我有一个init()方法,并且试图创建一个Perspective渲染。下面是到目前为止的代码,但是我传递给gluPerspective(fovy, aspect, zNear, zFar)的数字是错误的。我认为fovy是视场(60度),而aspect是长宽比(宽度/高度),但是我不知道zNearzFar是什么。

public void init(GLAutoDrawable gld) {
    //We will  use the default ViewPort

    GL gl = gld.getGL();
    glu = new GLU();

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);


    glu.gluLookAt(
            25, 15, 0, // eye
            25, 15, 30, // at
            0, 1, 0 // up
            );



    // Set up camera for Orthographic projection:
    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(60, 500/300, 0.0, 60.0);

    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();

}

最佳答案

Near和far值指定对象可见的范围(它们定义了近端和远端裁剪planes)。实际上,使用该透视图将看不到比60.0更远的对象。

正如Tim所说,最好显式地写浮点值(即500.0f/300.0f)。

但更糟糕的是,您在将查找矩阵设置为标识之前先进行了设置(假设在方法开始时矩阵模式为GL.GL_MODELVIEW)。以下顺序可能更好:

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(...);


也许您需要研究更多有关相机抽象的知识。

关于java - 如何在jogl中使用gluPerspective()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9725028/

10-10 18:31