Java OpenGL中的奇怪透视问题

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+

所以我试着放大和缩小一个在(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+ " 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);