标签: 3dcamera

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万
查看次数

这会导致万向节锁定吗?

我制作了一个非常简单的 3d 场景,在世界坐标中有 5 个点。我想在场景中导航,所以我定义了一个带有 UP 和 OUT 向量的相机。有了这些信息,我会在每一帧中生成一个旋转矩阵,我将其应用于向量以获得相机坐标。

问题是:我已经阅读过有关使用这种方法的万向节锁定问题,但在这种情况下会发生吗?

请注意,我在每一帧中生成旋转矩阵,并且我没有累积旋转。那么在这种情况下会发生锁定吗?如果是这种情况,您建议如何安全地应用旋转(从 UP 和 OUT 向量)?

谢谢

opengl 3d 3dcamera

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

标签 统计

3d ×2

3dcamera ×2

opengl ×2

java ×1