如何在LWJGL3DJava应用程序中制作相机?我试着用 glRotate
以及 glTranslatef
,但这只移动对象,我需要移动场景。
和我试着用的一样
glLoadMatrixf(new float[]{
50, 50, 50, 50,
50, 50, 50, 50,
-75, 50, 50, 50,
100, 100, 100, 100
});
但我不太明白它是怎么工作的,我看到了白色的屏幕
我可以用什么方法来完成我的任务?
2条答案
按热度按时间x759pob21#
如果要创建第一个视图矩阵,请从
gluLookAt
.使用这个方便的传统opengl实用程序函数,您可以通过位置定义视图矩阵(
eye
),目标点(target
)和一个上向量(up
):(另请参见org.lwjgl.util.glu.glu.glulookat()的java代码示例)
视图空间是由场景上的视点定义的局部系统。视图的位置、视线和视图的向上方向定义了相对于世界坐标系的坐标系。场景的对象必须相对于视图坐标系绘制,以便从观察位置“看到”。视图坐标系的逆矩阵称为视图矩阵。此矩阵从世界坐标转换为视图坐标。
此外,您还需要一个正交或透视投影矩阵。
前一个矩阵可以定义为
glOrtho
(另请参见org.lwjgl.opengl.gl11.glortho()的java代码示例)最后一个是
gluPerspective
(另请参见org.lwjgl.util.glu.glu.glupperspective()的java代码示例)投影矩阵描述了从场景的三维点到视口的二维点的Map。投影矩阵从视图空间变换到剪辑空间。剪辑空间中的坐标通过除以
w
剪辑坐标的分量。在传统的opengl中存在不同的当前矩阵。投影矩阵应设置为当前值
GL_PROJECTION
矩阵和视图矩阵GL_MODELVIEW
矩阵。看到了吗glMatrixMode
.例如。:
而不是
GLU.gluPerspective
,透视投影矩阵可设置如下:而不是使用
GLU.gluLookAt
视图矩阵可以通过glTranslate
以及glRoatate
:vsaztqbk2#
在opengl中没有摄像头。要“移动相机”,你必须把物体移到相反的方向。例如,不向前移动摄影机,而是向后移动对象。