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