Как использовать gluPerspective () в jogl? - PullRequest
2 голосов
/ 15 марта 2012

У меня есть метод 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();

}

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Ближние и дальние значения указывают диапазон, в котором объекты видны (они определяют ближнее и дальнее отсечение плоскости ).Действительно, объекты, которые находятся дальше, чем 60.0, не будут видны с этой точки зрения.

Поскольку Тим , как уже прокомментировано, лучше явно записывать значения с плавающей запятой (т.е. 500.0f/300.0f).

Но что еще хуже, вы настраиваете матрицу просмотра перед тем, как установить ее на идентичность (при условии, что в начале метода режим матрицы равен GL.GL_MODELVIEW).Вероятно, лучше использовать следующую последовательность:

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

Возможно, вам нужно больше узнать об абстракции камеры.

0 голосов
/ 16 марта 2012

Как уже сказал Лука, ближний и дальний определяют диапазон видимых объектов. Но самое главное, никогда не используйте значение <= 0 для ближнего или дальнего значения (что вы в настоящее время делаете), так как это приведет к единственной матрице проекции (с любым странным результатом рендеринга, который приведет к этому). </p>

Используйте достаточно малое значение для ближней плоскости отсечения, но не слишком маленькое, так как это приведет к плохой точности буфера глубины. Используйте что-то разумное, например, при моделировании нормального реального мира, близкое расстояние в 10 см, как правило, является хорошим выбором (какое бы количество общих единиц это не значило в реальном приложении), так как вы не будете смотреть так близко к любому объекту. , Но это зависит от вашего приложения, например, от дальнего значения.

И, конечно, как сказал Тим, в данный момент ваше соотношение сторон равно 1,0, поскольку вы делаете целочисленное деление.

...