2011-10-25 22 views
2

私はOpenGLを学習しています。私は最初の2Dプログラムを作成することができましたが、私はgluPerspectiveの使用に固執しています。gluPerspective()を使用する

3Dプロジェクトをどのように作り上げることができるかを少し試してみたいと思いますが、私は何が欠けているのか、この小さなテスト作業をするために何が必要なのか分かりません。

void init_perspective() 

{ 

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL); 
SDL_WM_SetCaption("OpenGL Test", NULL); 

glClearColor(0, 0, 0, 0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45, 1.333, 0, 100); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

} 

int main(int argc, char **argv) 

{ 

init_perspective(); 

glTranslatef(200, 200, 50); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 

    glVertex3f(0, 0 ,0); 
    glVertex3f(50,0 ,10); 
    glVertex3f(50,50,30); 
    glVertex3f(0, 50,0); 

glEnd(); 

glLoadIdentity(); 

SDL_GL_SwapBuffers(); 

SDL_Delay(1000); 

SDL_Quit(); 

return 0; 

} 

このテストコードで使用できる関数呼び出しが何であるか教えてもらえれば、3D OpenGLがどのように機能するのかを知ることができます。

+0

SDLとは私はOpenGLでしばらく働いていて、SDLを見ていません。 –

+0

聞いたことがない、私はいつもOpenGLを使っていました。ありがとうマイケル。 –

答えて

6

gluPerspective(45,1.333,,,100);

zNearを0に設定しないでください。それは、the mathを台無しに:

zNearが0に近づくようr = zFar/zNearが無限大に近づくので、zNear0.01または12のようないくつかの小さな正の数を選択してください0

に設定してはいけません。

EDIT:

int main(int argc, char **argv) 
{ 
init_perspective(); 

glTranslatef(0,0,-5); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 
    glVertex2f(-1,-1); 
    glVertex2f(1,-1); 
    glVertex2f(1, 1); 
    glVertex2f(-1, 1); 
glEnd(); 

SDL_GL_SwapBuffers(); 

SDL_Delay(1000); 

SDL_Quit(); 

return 0; 
} 

デフォルトでは、それが位置(0,0,0)から-Z軸を見下ろしています:また、それはあなたのジオメトリを見ることができるようにお使いのカメラのどこかに置きます。

+0

ヒントをありがとう、私はいつも見たいくつかのコード例は、zNear 0.1fまたはそれに設定されている疑問に思った。コード内で値を1に変更しましたが、それが大きな問題ではないと考えています –

+2

1に設定した場合の問題は、カメラがオブジェクトから1単位未満離れていれば、オブジェクトはレンダリングされません。一方、zNearを小さすぎる値に設定すると、有限精度zBufferがあるため、レンダリングのアーチファクトが発生することがあります。 – NickLH

+0

gluPerspective()を使用するときにViewPortsを使用する必要があるのか​​どうか疑問に思っていました。 glOrthoを使用したとき、ViewPortsを使用する必要はありませんでした。一般的には、直交ビュー全体を投影するためです。 –

関連する問題