gluPerspective()显示黑屏?

时间:2014-06-15 23:06:00

标签: java opengl 3d lwjgl

我有一个简单的应用程序,它显示一个在所有轴上旋转的3D立方体,以及一个通过鼠标控制的摄像头,可以让你调整你看多维数据集的角度。

当我使用glOrtho时,整个应用程序完全按照我想要的方式工作,但是一旦我将其更改为gluPerspective,我只会得到黑屏。

这是我初始化openGL的方法:

public void initializeOpenGL()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, ((float)WIDTH) / ((float)HEIGHT), 0.01f, 500f);
    //glOrtho(0, 640, 480, 0, 600, -1); //displays everything correctly
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
}

然后这是我的循环方法:

public void begin()
{
    float degrees = 0;
    Mouse.setGrabbed(false);
    while(!Display.isCloseRequested())
    {
        moveCamera(); //calculates the changes in mouse position            
        GL11.glLoadIdentity();
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        camera.lookThrough(); //applies the changes
        glTranslatef((float)WIDTH/2,(float)HEIGHT/2,10f);
        glRotatef(degrees++,1f,1f,1f);
        glScalef(100,100,100);

        drawQuad();

        Display.update();
        Display.sync(60);
    }
    Display.destroy();
    System.exit(0);     
}

1 个答案:

答案 0 :(得分:0)

我创建了一个显示相机外观的图像:http://i.imgur.com/9NVSyqj.png 如您所见,相机沿-z轴看

- >你应该尝试将四边形翻译成类似的东西:

glTranslatef(0,0, -10f );

不是将四边形移动到显示屏的中间,而是将其移动到地平线的一半大小

简短版本:要点:https://gist.github.com/Chronove/11da12b2635bfc040981

package me.tutorial;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.gluPerspective;

import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

/**
 * @author Chronove
 */
public class Example {

    public static void main(String[] args) throws Exception {

        int WIDTH  = 600;
        int HEIGHT = 400;

        // INIT
        Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT));
        Display.create();

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        gluPerspective(45.0f,(float)(WIDTH / HEIGHT),0.1f,500f);

        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_DEPTH_TEST);

        float degrees = 0;

        while(!(Display.isCloseRequested())){

            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glLoadIdentity();

            glTranslatef(0,0,-10f);
            glRotatef(degrees++,0f,0f,1f);

            // drawQuad();
            {

                glBegin(GL_QUADS);

                glVertex3f(-1f,-1f,0f);
                glVertex3f( 1f,-1f,0f);
                glVertex3f( 1f, 1f,0f);
                glVertex3f(-1f, 1f,0f);

                glEnd();

            }

            Display.update();
            Display.sync(60);

        }

        Display.destroy();
        System.exit(0);

    }

}