海兰,我目前正在做一个第一人称game.what我能够做的就是使用函数gluLookAt()使相机移动和使用glRotatef()它旋转.我试图向是旋转相机然后在我旋转的方向上向前移动,但轴保持不变,虽然我已经旋转,但相机会向侧面移动而不是向前移动.有人能帮我吗 ?这是我的代码:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(cameraPhi,1,0,0);
glRotatef(cameraTheta,0,1,0);
gluLookAt(move_camera.x,move_camera.y,move_camera.z,move_camera.x,move_camera.y,move_camera.z-10,0,1,0);
drawSkybox2d(treeTexture);
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以在3d空间中移动的摄像头,并且在设置它时遇到了一些问题.我这样做是Java,显然使用gluPerspective和gluLookAt会产生冲突(屏幕开始像疯了一样闪烁).
gluPerspective设置如下:
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50.0f, h, 1.0, 1000.0);
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个相机矩阵,利用眼睛坐标,向前和向上矢量(http://people.freedesktop.org/~idr/glu3/form_4.png)(假设相机的代码是正确的.
最后,在我绘制任何东西之前:
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glMultMatrixf(camera.matrix);
Run Code Online (Sandbox Code Playgroud)
然后我调用我的绘图例程(通过调用glRotatef和glTranslatef自己进行一些转换/旋转).
如果没有调用glMultMatrixf,相机会显示我需要在屏幕中央看到的项目.然而,使用glMulMatrixf,我得到的只是一个黑屏.我尝试使用glLoadMatrixf而它也没用.难道我做错了什么?我把东西放在一边吗?如果没有,这就是它应该如何完成让我知道,我会发布一些可能会产生冲突的相机代码.
编辑:这是相机矩阵创建代码:
private void createMatrix()
{
float[] f = new float[3]; //forward (centre-eye)
float[] s = new float[3]; //side (f x up)
float[] u = new float[3]; //'new up' (s x f)
for(int i=0;i<3;i++){
f[i] = centre[i]-eye[i];
}
f = Maths.normalize(f);
s = Maths.crossProduct(f,upVec);
u = Maths.crossProduct(s,f);
float[][] mtx = new float[4][4];
float[][] mtx2 = new float[4][4];
//initializing matrices to all 0s
for …Run Code Online (Sandbox Code Playgroud)