|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Hi people,
has anybody an idea, how to make a look_at_macro?
Means, that I have a point and the macro gives my back the angles, looking to it
from the origin.
-Holger-
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Here a little script, that should go, but it doesn't.
It only works, if you use only one of the coordinates...
the Box "looks" toe the ball:
/*
Initial_Frame=0
Final_Frame=360
Initial_Clock=0
Final_Clock=360
*/
camera {
location <-1, 1, -2.0>*4
look_at 0
rotate <clock/10,clock,0>
}
light_source {<-3,3,-3>*10 color rgb 1}
plane {y, -1 pigment { color rgb 0.5 }}
#declare xp=2*sin(clock/6);
#declare yp=3;
#declare zp=4*sin(clock/10);
sphere {
<xp,yp,zp>, .5
texture {pigment {color rgb 0.7}}
}
#declare zf=((zp>0)-0.5)*2;
#declare xw=zf*degrees(acos(yp/(sqrt(pow(zp,2)+pow(yp,2)))));
#declare xf=((xp>0)-0.5)*2;
#declare yw=xf*degrees(acos(zp/(sqrt(pow(xp,2)+pow(zp,2)))))-90;
#declare yf=-((yp>0)-0.5)*2;
#declare zw=yf*degrees(asin(xp/(sqrt(pow(xp,2)+pow(yp,2)))))+90;
box {
<-2,-1,-0.5>,-<-2,-1,-0.5>
pigment{color rgb <1,0,0>}
scale 0.5
//rotate <xw,yw,zw>
rotate <xw,0,0> // If you use
rotate <0,yw,0> // one of these
rotate <0,0,zw> // alone, it goes!
}
cylinder {0*x,3*x,0.2 pigment{color rgb 1}}
cylinder {0*y,3*y,0.2 pigment{color rgb 1}}
cylinder {0*z,3*z,0.2 pigment{color rgb 1}}
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I think you want something like Reorient_Trans
from transforms.inc
//+kff360
#include "transforms.inc"
#declare P = <2*sin(clock*60),3,4*sin(clock*36)>;
sphere {P,0.05
pigment {Red}
}
cone {<0,0,0>,0.05,<0,0,0.5>,0
pigment {Cyan}
Reorient_Trans(z,vnormalize(P))
}
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Tim Attwood" <tim### [at] comcastnet> wrote:
> I think you want something like Reorient_Trans
> from transforms.inc
>
> //+kff360
> #include "transforms.inc"
> #declare P = <2*sin(clock*60),3,4*sin(clock*36)>;
> sphere {P,0.05
> pigment {Red}
> }
> cone {<0,0,0>,0.05,<0,0,0.5>,0
> pigment {Cyan}
> Reorient_Trans(z,vnormalize(P))
> }
Really helpful!!
And nice short ;)
Thanx!!!!!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"H. Karsten" <h-karsten()web.de> wrote in message
news:web.47d7b9c5d9327eeb10a45770@news.povray.org...
> Here a little script, that should go, but it doesn't.
> It only works, if you use only one of the coordinates...
>
Hi,
If you look at Reorient_Trans in the help, I suspect that does exactly what
you want.
The main problem with your code is that you've worked out the angles based
on the initial position/orientation of the box. As soon as POV-Ray performs
the first rotation (around x) it moves it out of it's initial
position/orientation. The second rotation will therefore be around the
y-axis of the scene and not around the axis of the box.
This can be a bit hard to get your head around, but imagine a 1 unit high
line at the origin. Rotate through 45*x and then 45*y to get to a point P.
If I understand what you're trying to do in your calculation (though I
haven't tested it), it should give you the y rotation, but would give a
value for x that is less than 45 degrees because it's equivalent to
projecting a line back onto the YZ plane at right angles, rather than
rotating it back there around the y axis. Furthermore your calculation will
give you an equal negative z rotation (a bit less than 45 degrees).
If you now think of applying the three rotations you calculate to the point
<0,1,0>, the first two bring you to a point a short distance directly above
point P. The third (around -z) takes you down somewhere close to the XZ
plane.
Hope this helps.
Regards,
Chris B.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Well I saw, that the includefile makes the transformation itself.
As I open it, the transformaton was made with the matrix keyword.
But I need to have three values that I can assign to the normal rotate <...>
keyword. Because, I need to write this values in to a file!
Maybe by using the "vaxis_rotate(...)" command?
-holger-
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"H. Karsten" <h-karsten()web.de> wrote in message
news:web.47d7cf1fd9327eeb10a45770@news.povray.org...
> I need to have three values that I can assign to the normal rotate <...>
> keyword. Because, I need to write this values in to a file!
>
> Maybe by using the "vaxis_rotate(...)" command?
>
Looking at your earlier code you've got a sphere whizzing around at y=3 and
a box at the origin. If I understand correctly you want the centre of the
top of the box to point at the sphere and you don't seem bothered about the
orientation of the box around the centre line between the box and the
sphere. If this is the case, then you can always achieve this with only two
rotations. ie You can tilt the box with a rotation in x and then spin it
round the y axis to point at any point on the plane y=3 (indeed at any point
in 3D space).
There are quite a few standard POV-Ray macros that could help with this, but
you might want to look at VRotationD(V1, V2, Axis) and use it to work
backwards through the 2 rotational axes that you need. For example:
#include "math.inc"
#declare P = <-30,3,5>;
#local TempP = P;
#debug concat("Normalised Point: ",vstr(3,vnormalize(P),",",3,3),"\n")
// Work out the angle between the z axis and
// a point projected down onto the XZ plane
#local YRot = VRotationD(z, TempP*<1,0,1>, y);
// Bring the point back onto the YZ plane
#local TempP = vrotate(TempP,-y*YRot);
// Work out the x rotation
#local XRot = VRotationD(y, TempP, x);
#debug concat("Should be the same:
",vstr(3,vrotate(y,<XRot,YRot,0>),",",3,3),"\n")
Regards,
Chris B.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Tim Attwood wrote:
> I think you want something like Reorient_Trans
> from transforms.inc
>
> //+kff360
> #include "transforms.inc"
> #declare P = <2*sin(clock*60),3,4*sin(clock*36)>;
> sphere {P,0.05
> pigment {Red}
> }
> cone {<0,0,0>,0.05,<0,0,0.5>,0
> pigment {Cyan}
> Reorient_Trans(z,vnormalize(P))
> }
There's no need to normalize the vectors
going into the Reorient_Trans() macro.
--
Tor Olav
http://subcube.com
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
> Well I saw, that the includefile makes the transformation itself.
>
> As I open it, the transformaton was made with the matrix keyword.
>
> But I need to have three values that I can assign to the normal rotate
> <...>
> keyword. Because, I need to write this values in to a file!
>
> Maybe by using the "vaxis_rotate(...)" command?
A full set of rotations really consists of two rotations,
elevation and Y rotation, the third is really just to control
the "up" or "roll" direction. There's not really enough info
in a single vector to determine the desired "up" direction
in all cases. So this code just assumes it starts with Y as
up. The selects are to determine the general direction of
the angles...
//+kff360
#include "math.inc"
#declare P = <2*sin(clock*60),3,4*sin(clock*36)>;
#declare Ay = select(P.x,-VAngleD(z,<P.x,0,P.z>),
0,VAngleD(z,<P.x,0,P.z>));
#declare Ax = select(P.y,VAngleD(P,vrotate(z,Ay*y)),
0,-VAngleD(P,vrotate(z,Ay*y)));
sphere {P,0.05
pigment {Red}
}
cone {<0,0,0>,0.05,<0,0,0.5>,0
pigment {Cyan}
rotate Ax*x
rotate Ay*y
}
#debug concat("Elevation = ",str(Ax,0,3)," degrees.\n")
#debug concat("Y Rotation = ",str(Ay,0,3)," degrees.\n")
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thank you all for the work! I'll try out the code!
Thanx !!
-Holger- :)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|