相关疑难解决方法(0)

如何旋转然后朝那个方向移动?

海兰,我目前正在做一个第一人称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)

c++ opengl

4
推荐指数
1
解决办法
8530
查看次数

OpenGL:创建我自己的相机

我正在尝试创建一个可以在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)

java opengl 3d 3dcamera

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

opengl ×2

3d ×1

3dcamera ×1

c++ ×1

java ×1