2011-12-27 4 views
1

Я изучаю OpenGL, и я читаю книгу, чтобы помочь мне долго. Я следил за ним на полпути и решил пойти по своему пути, теперь, когда я знаком с основами. Я начал разрабатывать приложение, цель - показать сетку.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(); 
} 

ответ

1

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

3

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

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

Смежные вопросы