Java OpenGL中的奇怪透视问题
所以我试着放大和缩小一个在(0,0,0)处绘制的半径为0.6的球体,除非当我到达Z大约为-1.6时,它和我为方向绘制的轴消失了,我不知道为什么 以下是我的翻译代码:Java OpenGL中的奇怪透视问题,java,opengl,lwjgl,Java,Opengl,Lwjgl,所以我试着放大和缩小一个在(0,0,0)处绘制的半径为0.6的球体,除非当我到达Z大约为-1.6时,它和我为方向绘制的轴消失了,我不知道为什么 以下是我的翻译代码: glMatrixMode(GL_PROJECTION); glLoadIdentity(); glRotatef(rotX,1.0f,0.0f,0.0f); glRotatef(-rotY,0.0f,1.0f,0.0f); help2.setText("xShift : " +xShift+
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glRotatef(rotX,1.0f,0.0f,0.0f);
glRotatef(-rotY,0.0f,1.0f,0.0f);
help2.setText("xShift : " +xShift+ " yShift : " +yShift+ " zShift : " + zShift);
glTranslatef(xShift,yShift,zShift);`
这是用来画画的:
static Sphere temp = new Sphere();
temp.draw(0.6f, 100, 100);
以下是我的预gl设置资料:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50f, 1.0f, 0.01f, 1000f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glEnable(GL_LINE_SMOOTH);
glShadeModel(GL_SMOOTH);
为什么在这里使用投影矩阵?投影矩阵不应以这种方式更改。这段代码消除了您使用gluPerspective()所做的工作,并将其替换为标识转换
您几乎肯定应该在这里使用GL_MODELVIEW矩阵。设置透视后,您没有理由再次将矩阵模式设置为GL_投影,除非您希望修改纵横比(如果有调整窗口大小事件)、FOV或近平面或远平面
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
通过将其保留在标识变换处,您将相机设置在原点,向下看负Z轴。大概你的球体也在原点绘制,所以你可以看到它的内部。尝试将相机的初始位置设置为不同的位置,可能使用gluLookAt()
这将使您从Z轴上的球体开始观察原点3个单位。如果球体是以0.6半径绘制的,那么它应该是可见的 除了投影堆栈上的
glupperspective()
/glOrtho()
之外,您为什么还要做其他事情呢?那是为了旋转摄像机。。。这是坏习惯吗?只是试着不在那里,它会导致问题。这根本不是奇怪的行为。你将平移和旋转应用于投影矩阵,这就是奇怪的地方。我的印象是,如果平移和旋转在投影中,它会改变视点而不是模型?
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookat(0, 0, 3, 0, 0, 0, 0, 1, 0);