





 
 




 
 


I am going mad trying to project image maps onto polygons that are not in the
xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
points so all I have to do is create each triangle using sets of the 32
vertices. BUT . . . .
I cannot work out how to project the 20 image_map pigments properly. Image_map
pigments only seem to work on polygons normal to the Z axis and left corner at
0,0 XY
The suggestion that I create each triangle at 0,0 and then translate/rotate them
to the icosahedron would be just fine if i had those numbers. (I do not)
There must exist another way, as the current limitation is ludicrously
unuseful. Everybody aplying pictures to polyhedra would have exactly the same
problem.
What am I missing?
Is it possible to translate the triangle by translating its individual points?
That I might be able to do, but I can't work out how.
The ultimate goal is a Dymaxion type world map on an Icosahedron.
Post a reply to this message
Attachments:
Download 'testico.png' (62 KB)
Preview of image 'testico.png'


 
 




 
 


hi,
"MollyJ" <nomail@nomail> wrote:
> I am going mad trying to project image maps onto polygons that are not in the
> xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
> typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
> points so all I have to do is create each triangle using sets of the 32
> vertices. BUT . . . .
>
> I cannot work out how to project the 20 image_map pigments properly. Image_map
> pigments only seem to work on polygons normal to the Z axis and left corner at
> 0,0 XY
<https://wiki.povray.org/content/Reference:Image_Map>
once you've created the image_map, you'll want to scale it to correct
proportions, eg if the source is 1920x1080, the scale ought to read
'<1.92,1.08,1>'.
> The suggestion that I create each triangle at 0,0 and then translate/rotate them
> to the icosahedron would be just fine if i had those numbers. (I do not)
ok, I'll stop here 'coz confused, above you wrote "I have the XYZ coordinates
for the points".
if you do have those coords, create yr object in position (near origin, "image
is projected onto the object as though there were a slide projector somewhere in
the zdirection"), then translate. hth.
regards, jr.
Post a reply to this message


 
 




 
 


"MollyJ" <nomail@nomail> wrote:
> I am going mad trying to project image maps onto polygons that are not in the
> xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
> typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
> points so all I have to do is create each triangle using sets of the 32
> vertices. BUT . . . .
>
> I cannot work out how to project the 20 image_map pigments properly. Image_map
> pigments only seem to work on polygons normal to the Z axis and left corner at
> 0,0 XY
>
> The suggestion that I create each triangle at 0,0 and then translate/rotate them
> to the icosahedron would be just fine if i had those numbers. (I do not)
>
> There must exist another way, as the current limitation is ludicrously
> unuseful. Everybody aplying pictures to polyhedra would have exactly the same
> problem.
> What am I missing?
>
> Is it possible to translate the triangle by translating its individual points?
> That I might be able to do, but I can't work out how.
>
>
> The ultimate goal is a Dymaxion type world map on an Icosahedron.
Hi Molly
Perhaps the code I posted in this thread can be useful for you:
From: Tor Olav Kristensen
Subject: How to transform a triangle into another
Date: 20021002 19:41:55
http://news.povray.org/povray.text.tutorials/thread/%3C3D9B843D.E5392CD0%40hotmail.com%3E/
If so, then it is important to replace the 4 first lines in the
Triangle2Triangle_Trans macro (and probably in the Pyramid2Pyramid_Trans macro)
with the corrected ones in my second post.

Tor Olav
http://subcube.com
https://github.com/tok
Post a reply to this message


 
 


From: Alain Martel
Subject: Re: image_map to tilted and rotated triangle centered and scaled
Date: 28 Mar 2022 11:23:31
Message: <6241d2f3$1@news.povray.org>



 
 


Le 20220327 à 22:18, MollyJ a écrit :
> I am going mad trying to project image maps onto polygons that are not in the
> xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
> typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
> points so all I have to do is create each triangle using sets of the 32
> vertices. BUT . . . .
>
> I cannot work out how to project the 20 image_map pigments properly. Image_map
> pigments only seem to work on polygons normal to the Z axis and left corner at
> 0,0 XY
>
> The suggestion that I create each triangle at 0,0 and then translate/rotate them
> to the icosahedron would be just fine if i had those numbers. (I do not)
>
> There must exist another way, as the current limitation is ludicrously
> unuseful. Everybody aplying pictures to polyhedra would have exactly the same
> problem.
> What am I missing?
>
> Is it possible to translate the triangle by translating its individual points?
> That I might be able to do, but I can't work out how.
>
>
> The ultimate goal is a Dymaxion type world map on an Icosahedron.
>
In your case, it may be OK to use the spherical mapping for your
image_map, making sure that the isocahedron is modelled centred at the
origin. For that you need a single image showing every faces. Ideally,
that image will have a 2:1 aspect ratio.
Add «map_type 1» at the beginning of the image_map statement. There will
be some distortion, but, in this case, it'll be minimal.
Another option is to use UV mapping. For that, you need to declare your
icosahedron as a mesh object.
If that's not an option, like you have individual images for each faces,
you need to create each triangles at the origin parallel to the XY
plane, rotate them correctly, then translate them to their final location.
Post a reply to this message


 
 




 
 


"MollyJ" <nomail@nomail> wrote:
> I am going mad trying to project image maps onto polygons that are not in the
> xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
> typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
> points so all I have to do is create each triangle using sets of the 32
> vertices. BUT . . . .
>
> I cannot work out how to project the 20 image_map pigments properly. Image_map
> pigments only seem to work on polygons normal to the Z axis and left corner at
> 0,0 XY
>
> The suggestion that I create each triangle at 0,0 and then translate/rotate them
> to the icosahedron would be just fine if i had those numbers. (I do not)
>
> There must exist another way, as the current limitation is ludicrously
> unuseful. Everybody aplying pictures to polyhedra would have exactly the same
> problem.
> What am I missing?
>
> Is it possible to translate the triangle by translating its individual points?
> That I might be able to do, but I can't work out how.
>
>
> The ultimate goal is a Dymaxion type world map on an Icosahedron.
My first thought is use a mesh2 with UV mapping. It may be a little hard to do
it by hand. But you only have 32 points to worry about. Try looking at the mesh2
documentation to see if you want to try that.
Post a reply to this message


 
 




 
 


Thank you everyone for all that help.
I worked out how to do it after rereading your posts carefully. I had to break
out the geometry/trigonometry skills to derive the angles from xyz coordinates.
there seems to be no other way.
unless there is . . . .
Is there a povray function that returns polar coordinates of a surface's normal?
eg. create a polygon my_polygon at xyz xyz xyz and then ask
let lat/lon = normal(my_polygon)
Post a reply to this message
Attachments:
Download 'tutorial00.png' (505 KB)
Preview of image 'tutorial00.png'


 
 




 
 


In case someone in the distant future is searching for the pitch angles on the
facets of an icosahedron standing on a vertex, they are:
+52.62263186 degrees from vertical on the five topmost facets
+/ 10.81231696 degrees from vertical for the 10 facets around the equator
52.62263186 degrees from vertical on the five lowermost facets
Post a reply to this message


 
 




 
 


hi,
"MollyJ" <nomail@nomail> wrote:
> ...
> Is there a povray function that returns polar coordinates of a surface's normal?
>
> eg. create a polygon my_polygon at xyz xyz xyz and then ask
>
> let lat/lon = normal(my_polygon)
afaik, no. (in fact, searching "polar" in the wiki only finds (fisheye) camera
related mention) however, if you have the maths, you can (and usually would, in
POVRay) write a macro[1], using 'trace()'[2] to find the surface normal, then
convert and return the (lat,lon). Bald Eagle wrote some polar coord conversion
code[3], maybe it'll be of use to you.
[1]
<https://wiki.povray.org/content/Reference:User_Defined_Macros#The_macro_Directive>
[2] <https://wiki.povray.org/content/Reference:Vector_Expressions#Functions>
[3] <http://news.povray.org/web.58dc085aae95604bc437ac910%40news.povray.org>
regards, jr.
Post a reply to this message


 
 




 
 


You might be able to use
f_th(x,y,z): f_th() is a function that is only useful when combined with other
surfaces. It produces a value which is equal to the theta angle, in radians, at
any point. The theta angle is like the longitude coordinate on the Earth. It
stays the same as you move north or south, but varies from east to west. Also
look at f_ph and f_r
and
f_ph(x,y,z): When used alone, the PH function gives a surface that consists of
all points that are at a particular latitude, i.e. a cone. If you use a
threshold of zero (the default) this gives a cone of width zero, which is
invisible. Also look at f_th and f_r
in Functions.inc
https://wiki.povray.org/content/Reference:Functions.inc
Post a reply to this message


 
 




 
 


"MollyJ" <nomail@nomail> wrote:
> I am going mad trying to project image maps onto polygons that are not in the
> xy plane or plumb to the y axis. I have 20 equilateral triangles forming a
> typical D20 shape (regular icosahedron). I have the XYZ coordinates for the
> points so all I have to do is create each triangle using sets of the 32
> vertices. BUT . . . .
>
> I cannot work out how to project the 20 image_map pigments properly. Image_map
> pigments only seem to work on polygons normal to the Z axis and left corner at
> 0,0 XY
>
> The suggestion that I create each triangle at 0,0 and then translate/rotate them
> to the icosahedron would be just fine if i had those numbers. (I do not)
>
> There must exist another way, as the current limitation is ludicrously
> unuseful. Everybody aplying pictures to polyhedra would have exactly the same
> problem.
> What am I missing?
>
> Is it possible to translate the triangle by translating its individual points?
> That I might be able to do, but I can't work out how.
>
>
> The ultimate goal is a Dymaxion type world map on an Icosahedron.
Hi again Molly
I've now made a couple of GitHub repositories that may be useful for you.
Here you can find the vertices and the triangles that you need:
https://github.com/tok/POVRayicosahedron
Here you can see how you can UVmap parts of an image onto a mesh2:
https://github.com/tok/POVRayUVmappingofmesh2
And here you can download images suitable for being mapped onto an icosahedron:
https://solarviews.com/cap/ico/icoearth.htm

Tor Olav
http://subcube.com
https://github.com/tok
Post a reply to this message


 
 




 