使用Matrix4f转换相机

时间:2016-10-29 01:43:10

标签: java opengl lwjgl coordinate-transformation

我有一个三维场景,有一个三角形和一个我想要移动的相机。我将相机转换存储为矩阵(特别是,加载了标识的Matrix4f对象)。

以下是修改该矩阵的两个方法示例:

这个在y轴上旋转负值:

public void turnRight() {
    getCameraMatrix().rotate(-ROTATION_INTERVAL, new Vector3f(0, 1, 0));
}

这个翻译正确:

public void right() {
    getCameraMatrix().translate(new Vector3f(TRANSLATION_INTERVAL, 0, 0));
}

我将投影矩阵设置为正交(以前称为glViewport()):

public void performProjection() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Display.getWidth(), 0, Display.getHeight(), 0, 1000);
}

每次相机移动时,在绘制场景之前更改相机位置:

public void performLook() {
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glLoadMatrix(
            getAsFloatBuffer() //Gets the FloatBuffer from the matrix.
    );
}

然而,这种转换的效果是三角形被平移和旋转,而不是相机。作为如何发生这种情况的一个例子,如果调用right(),摄像机应该垂直于其当前方向向右移动,而不是向某个轴向下移动。

有关如何执行此操作的任何提示? (我们的任务出于某种原因禁止现代openGL 。)

修改

如果有用,三角形的坐标为:(1, 1, 1), (1, 50, 1), (50, 50, 1)

视口通话为glViewport(0, 0, Display.getWidth(), Display.getHeight());

最后,显示尺寸为640x480

如果我的问题有任何需要澄清的地方,请告诉我。感谢。

修改

相机矩阵是我代码中的模型视图矩阵。我通过创建一个新的Matrix4f对象并加载标识来构建它。所有后续变换都被添加到矩阵中,当调用performLook()时,矩阵的数据将被移动到模型视图矩阵。我现在只绘制一个原语,所以我还没有处理过世界变换的对象。

渲染步骤如下: performProjection() 2. performLook() 3.清除屏幕 4.绘制原语 5.交换缓冲区。

0 个答案:

没有答案