0


void init(void)
{ 
    glEnable(GL_DEPTH_TEST);
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}

void display(void) { glClearColor(1.0, 1.0, 1.0, 1.0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glScalef(1.0,1.0,1.0);
glColor3f(0.0,0.0,0.0);
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
glEnd();
    glutSwapBuffers();

}

void reshape(int w, int h) { int height = h; int width = w; glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); }

int main(int argc, char* argv[]) { Complex c(0,0); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(512, 512); glutInitWindowPosition(100, 100); winID = glutCreateWindow("Fractal"); init(); glutDisplayFunc(display); glutIdleFunc(display); glutReshapeFunc(reshape); // Compute the update rate here... glutMainLoop(); return 0; }

コードが最初にディスプレイに入ったかどうかをチェックする if 条件の glutSwapBuffers() を除いて、コードを display() に入れると四角形になります。ifを削除すると、白いウィンドウが表示されます

4

1 に答える 1

1

関数に余分なものglTranslatef(0.0f, 0.0f, -5.0f)を入れて、displayすべてを 5 単位シーンに押し戻します。そうしないと、原点で何を描いているかがわかりません。

ところで、行glScalef(1.0,1.0,1.0)は何もしません。不要な計算を避けるために削除してください。

編集: OpenGL には「目」はありません。より具体的には、負の z 軸を見下ろす (0,0,0) に常に固定されます。目の変換の逆でシーン全体を移動する必要があります。シーンを手動で移動して目が見えるようにするか、「目」を指定できるgluLookAtを使用できますが、バックグラウンドでは、固定された「目」が見えるようにシーンを変換するだけです。

さらに読む: http://www.opengl.org/archives/resources/faq/technical/viewing.htm

于 2012-10-27T06:02:23.237 に答える