2015-12-03 2 views
0
#include <stdlib.h> 
#include <stdio.h> 
#include <malloc.h> 
#include <freeglut.h> 
#include <FreeImage.h> 

void display(void) { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    GLint viewport[4]; 
    glGetIntegerv(GL_VIEWPORT, viewport); 
    double aspect = (double)viewport[2]/(double)viewport[3]; 
    gluPerspective(60, aspect, 1, 100); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(0,0,-35); 
    static float angle = 0; 
    angle += 4.0f; 
    //magenta middle cube 
    glPushMatrix(); 
    glTranslatef(0, 0, 0); 
    glRotatef(angle, 0.1, 0.2, 0.5); 
    glColor3ub(224,8,133); 
    glutSolidCube(5); 
    glPopMatrix(); 
    //yellow right cube 
    glPushMatrix(); 
    glTranslatef(10, 5, 0); 
    glRotatef(angle, 0.2, 0.3, 0.1); 
    glColor3ub(250, 224, 20); 
    glutSolidCube(5); 
    glPopMatrix(); 
    //cyan left cube 
    glPushMatrix(); 
    glTranslatef(-10, -5, 0); 
    glRotatef(angle, 0.3, 0.2, 0.6); 
    glColor3ub(0, 162, 211); 
    glutSolidCube(5); 
    glPopMatrix(); 
    glFlush(); 
    glutSwapBuffers(); 
} 

void repeat(int val) { 
    glutPostRedisplay(); 
    glutTimerFunc(10, repeat, 0); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
    glutInitWindowSize(500,500); 
    glutCreateWindow("SIMPLE DISPLAY"); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_COLOR_MATERIAL); 
    glShadeModel(GL_SMOOTH); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-500,500,-500,500,-500,500); 
    glutDisplayFunc(display); 
    glutTimerFunc(0, repeat, 0); 
    glutMainLoop(); 
    return 0; 
} 

У меня есть код, который рисует три куба в 3-х местах и ​​вращает их. Я заметил, что рабочая область очень маленькая, несмотря на использование glOrtho(-500,500,-500,500,-500,500). Перемещение кубов в трех направлениях делает вид, что рабочая область имеет только 50x50x50 (не уверен в размерах z, так как она вернется на 50 назад, прежде чем она исчезнет, ​​но не может подтвердить расстояние спереди). Перевод куба 25 влево или вправо приводит к тому, что он выходит из оконных границ.Установка размеров 3D-пространства в OpenGL

Я думал, glOrtho() установить размер рабочей области, в данном случае 1000x1000x1000?

+0

Вы обязательно должны добавить ВСЕ соответствующий код к самому вопросу. В противном случае этот вопрос и ответы не имеют смысла, когда код pastebin будет удален. – BDL

+0

Я думал, что код, возможно, слишком длинный, чтобы вставить сам Q, но без проблем. – gator

ответ

1

Вы вызываете вызов glOrtho в начале функции отображения по вызову gluPerspective. Вы можете использовать только одну проекцию, как перспективную, так и орфографическую.

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