OpenGL отрезает часть экрана - PullRequest
1 голос
/ 27 декабря 2011

Я изучаю OpenGL, и я читаю книгу, чтобы помочь мне долго.Я прошел его половину пути и решил пойти своим путем, теперь, когда я знаком с основами.Я начал разрабатывать приложение, намереваясь просто показать сетку.

Я в значительной степени прибил его, но когда я запускаю свое приложение, часть сетки обрезается.Я приложил сокращенную версию кода (которая дает тот же результат) - кто-нибудь знает, что я делаю неправильно, чтобы он отрезал часть экрана?Я много возился и пробежал по нескольким значениям, но я просто не могу разобрать эту вещь.Любая помощь или толчок в правильном направлении очень ценится.

Код:

#include <Windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "deps\glut\glut.h"

void display();

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(800, 600);
    glutCreateWindow("");
    glutDisplayFunc(display);
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glColor3f(0.0, 0.0, 0.0);

    // Init
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-8.0, 8.0, -8.0, 8.0, -8.0, 8.0);

    glutMainLoop();
    return 0;
}

void display() {
    float f;

    // Clear the screen
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);

    // This next bit of code just creates the grid
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(1.0);
    for(f=-10.0f;f<10.0f;f++) {
        glBegin(GL_LINES);
            glVertex3f(f, 0.0f, -10.0f);
            glVertex3f(f, 0.0f, 10.0f);
        glEnd();
    }
    glRotatef(90, 0.0, 1.0, 0.0);
    for(f=-10.0f;f<10.0f;f++) {
        glBegin(GL_LINES);
            glVertex3f(f, 0.0f, -10.0f);
            glVertex3f(f, 0.0f, 10.0f);
        glEnd();
    }

    // Swap the buffers
    glutSwapBuffers();
}

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Вы не можете рисовать вне куба юнита.

Ваш glOrtho вызов масштабирует координаты, так что вы можете использовать диапазон -8...8 для координат x, y и z, но ваш цикл for затем пытается использовать -10...10, который превышает диапазон и будет обрезан .

1 голос
/ 27 декабря 2011

Вы попали в пределы Z из-за того, что диагональ единичного куба на sqrt(3) длиннее стороны. Поэтому я предлагаю вам использовать -14… 14 (= ± round( 8*sqrt(3) )) в качестве пределов для ближней и дальней плоскости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...