OpenGL中的奇怪透视问题

时间:2014-02-26 16:40:34

标签: java opengl lwjgl

所以我试图放大和缩小在半径为0.6的(0,0,0)处绘制的球体,除非一旦达到约-1.6的Z,它和我绘制的方向的轴已经消失而且我不确定为什么。

这是我的翻译代码:

    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);

这是我的预设设置:

    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);

1 个答案:

答案 0 :(得分:0)

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glRotatef(rotX,1.0f,0.0f,0.0f);
...

为什么在这里使用投影矩阵?不应以这种方式改变投影矩阵。此代码消除了您使用gluPerspective()所做的工作,并将其替换为身份转换。

你几乎肯定会在这里使用GL_MODELVIEW矩阵。一旦设置了透视图,您就没有理由再次将矩阵模式设置为GL_PROJECTION,除非您想要修改方面(如果您有调整大小窗口事件),FOV或近或远平面。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

将此保留在标识变换处,您将相机设置在原点,向下看负Z轴。据推测,你的球体也在原点绘制,所以你看到它的内部。尝试使用gluLookAt()

将初始相机位置设置为不同的位置
gluLookat(0, 0, 3, 0, 0, 0, 0, 1, 0);

这使您在Z轴上看球的3个单位看原点。如果您的球体绘制的半径为0.6,那么它应该是可见的。