我正在编写一个体积渲染程序,它不断调整一些平面几何形状,使其始终面向相机。每当相机旋转时,平面几何体就会旋转,以使其看起来好像不动 - 相对于场景中的其他一切。(我使用相机的观察方向作为这些平面几何图形的法线向量。)
目前我正在手动存储一个自定义旋转向量('rotations')并在渲染函数中应用它的影响如下:
gl2.glRotated(rotations.y, 1.0, 0.0, 0.0);
gl2.glRotated(rotations.x, 0.0, 1.0, 0.0);
然后稍后我通过使用旋转值围绕 x 和 y 轴旋转初始视图方向 (0,0,-1) 来获得视图方向。这是通过以下方式完成的。最终的查看方向存储在“视图”中:
public Vec3f getViewingAngle(){
//first rotate the viewing POINT
//then find the vector from there to the center
Vec3f view=new Vec3f(0,0,-1);
float newZ=0;
float ratio=(float) (Math.PI/180);
float vA=(float) (-1f*rotations.y*(ratio));
float hA=(float) (-1f*rotations.x)*ratio;
//rotate about the x axis first
float newY=(float) (view.y*Math.cos(vA)-view.z*Math.sin(vA));
newZ=(float) (view.y*Math.sin(vA)+view.z*Math.cos(vA));
view=new Vec3f(view.x,newY,newZ);
//rotate about Y axis
float newX=(float) (view.z*Math.sin(hA)+view.x*Math.cos(hA));
newZ=(float) (view.z*Math.cos(hA)-view.x*Math.sin(hA));
view=new Vec3f(newX,view.y,newZ);
view=new Vec3f(view.x*-1f,view.y*-1f,view.z*-1f);
//return the finalized normal viewing direction
view=Vec3f.normalized(view);
return view;
}
现在我将这个程序移动到一个更大的项目中,其中相机旋转由第 3 方图形库处理。我没有旋转矢量。有什么方法可以从以下位置获取视图方向向量:
GLfloat matrix[16];
glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
我正在查看这个以供参考http://3dengine.org/Modelview_matrix但我仍然不知道如何提出视图方向。有人可以向我解释它是否可能以及它是如何工作的?