OpenGL отсечение Z> 1,0 - PullRequest
       34

OpenGL отсечение Z> 1,0

1 голос
/ 29 марта 2012

По какой-то причине я не могу нарисовать что-либо после z> 1 в openGL.Z-буфер работает нормально, я застрял на этом некоторое время.Я думал, что проблема была в gluPerspective, но она все еще не работает.Я могу видеть что-нибудь между 0 и 1, треугольник кода кодируется.Извините за мой плохой английский.

#include <iostream>
#include <GL/glut.h>

using namespace std;

void idle() {
    glutPostRedisplay();
}

void changeSize(int w, int h) {

    // Prevent a divide by zero, when window is too short
    // (you cant make a window of zero width).
    if(h == 0)
        h = 1;
    float ratio = 1.0* w / h;

    // Use the Projection Matrix
    glMatrixMode(GL_PROJECTION);

        // Reset Matrix
    glLoadIdentity();

    // Set the viewport to be the entire window
    glViewport(0, 0, w, h);

    // Set the correct perspective.
    gluPerspective(0, ratio, 0.1, 1000.0);

    // Get Back to the Modelview
    glMatrixMode(GL_MODELVIEW);
}

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0.0);
        glVertex3f(0.5,0.0,0.0);
        glVertex3f(0.0,0.5,2.0);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char **argv) {

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(800,600);
    glutCreateWindow("OpenGL");

    glutDisplayFunc(renderScene);
    glutReshapeFunc(changeSize);
    glutIdleFunc(idle);

    glEnable(GL_DEPTH_TEST);

    glutMainLoop();

    return 0;
}

1 Ответ

4 голосов
/ 29 марта 2012

Прежде всего, ваш gluPerspective имеет нулевое значение для fovy, что совершенно бессмысленно. Попробуйте поставить номинальное значение для поля зрения (может быть, 60).

Во-вторых, когда это исправлено, я не думаю, что какая-либо из ваших трех вершин должна быть видимой. При условии, что у вас нет матрицы вида (там не показано), первые две вершины должны быть обрезаны по ближней плоскости. Для третьей вершины вы, вероятно, хотите, чтобы она была в -2, а не в 2 (глаз по умолчанию смотрит вниз по отрицательной оси z). Так что эта вершина тоже за глазом.

Честно говоря, я удивлен, что вы вообще смогли что-либо увидеть, но посмотрите, помогает ли исправление этих вещей. Попробуйте нарисовать свой треугольник со значениями z -0.2, -0.2 и -2.0.

...