I am having a surprisingly hard time of expressing this calculation in
Renderman.
For example, I made a sphere that is at [0, 0, 0] and another at [1,
1, 1].
If a horizontal line were drawn through the [0, 0, 0] sphere and a
vector drawn to [1, 1, 1] then the angle would be around 35 degrees,
while the angle between the line and the x-axis is 45 degrees.
I guess I'm not sure how to make Renderman render this configuration.
I've tried the following:
TransformBegin
Rotate -35 1 0 0
Rotate -45 0 1 0
Rotate 0 0 0 1
Translate 0 0 0
Cylinder 0.2 0 5 360
TransformEnd
Of course, this does not work. Any help would be greatly appreciated.
-Kazem
-kedmond
By the way, the best method to do that is not with rotations but with
a change of basis. Compute the following vectors:
Z = (B - A)
Y = any vector which is perpendicular to Z
X = Y x Z (cross product)
then normalize X and Y (to not change the radius of your cylinder) and
build a transformation matrix using the 3 vectors as rows (or columns,
depending which way the matrices are used). I assumed here that the
original cylinder had its length along the Z axis. If not, you need to
swap the vectors.
To pick a vector V which is perpendicular to W, use:
V = (0, Wz, -Wy) if |Wx| < |Wy|
V = (-Wz, 0, Wx) otherwise
You can easily verify that V.W (the dot product) is always zero. The
two cases are so V is never (0,0,0) if W isn't.
Olivier