2011-12-27 9 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

ユニットの立方体の対角が側面よりも大きいsqrt(3)であるため、Zの限界に当たっています。ですから、-14 ... 14(= ± round(8*sqrt(3)))をnearおよびfar面の制限として使用することをお勧めします。

3

あなたは単位立方体の外に引き出すことができません。あなたはx、y、z座標のための範囲-8...8を使用できるように

あなたglOrthoコールは、座標をスケーリングが、あなたのforループは、範囲を超え、クリッピングされます-10...10を、使用しようとします。

関連する問題