2011-11-15 9 views
0

私はgluperspective()の使用法を誤解しており、助けが必要かもしれないと思います。OpenGL gluperspective()

私は現在、空白の黒い画面を生成するこのコードを持っています(私は理解していたから、2つの正方形、1つは近くに、もう1つは遠くに生成する必要があります)。それはこれをしないので、私はなぜそうしないのか理解する必要があります。

#include <SDL/SDL.h> 
#include <SDL/SDL_opengl.h> 
#include <GL/glu.h> 
#include "functionfile.h" 

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

glTranslatef(0,0,10); 
glColor4f(1.0,1.0,1.0,1.0); 

glBegin(GL_QUADS); 
glVertex3f(0, 0,0); 
glVertex3f(10, 0,0); 
glVertex3f(10,10,0); 
glVertex3f(0, 10,0); 
glEnd(); 

glLoadIdentity(); 
glTranslatef(0,0,50); 

glBegin(GL_QUADS); 
glVertex3f(0, 0, 0); 
glVertex3f(10, 0, 0); 
glVertex3f(10, 10, 0); 
glVertex3f(0, 10, 0); 
glEnd(); 

glLoadIdentity(); 

SDL_GL_SwapBuffers(); 

SDL_Delay(2000); 

SDL_Quit(); 

return 0; 
} 

// from header file "functionfile.h" 

void init_perspective(int width, int height) 

{ 

SDL_Init(SDL_INIT_EVERYTHING); 
SDL_SetVideoMode(width, height, 32, SDL_OPENGL); 
SDL_WM_SetCaption("OpenGL Test", NULL); 

glClearColor(0, 0, 0, 0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(45, width/height, 1, 100); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

} 
+1

'glTranslatef(0、0、-10)'と 'glTranslatef(0、0、-50)' –

+0

ああ、デフォルトで-z軸を見ているのを忘れてしまった。スクリーン、ありがとう! –

答えて

3

あなたのカメラは負のZ軸を見下ろしているので、glTranslatef呼び出しによって、ジオメトリが正面ではなくカメラの後ろに移動しています。

3

あなたのコードにはいくつかの問題があります。第一に、ビューポートを設定することができません(glViewportのドキュメントを参照)。次に、OpenGLが状態マシンであることを知っておく必要があります。それぞれの描画を繰り返す前に、必要な状態をすべて設定することをお勧めします。これには、ビューポートと投影の設定が含まれます。したがってglViewportであり、投影行列を意味的に描画コマンドに属するものとし、ウィンドウ管理のものには属さない。

あなたのケースでは、プログラム実行の観点からは違いはありませんが、アニメーションとイベントループを導入するとすぐに、これが重要になります。レンダリングプロセスが必要とする場合は、画面の角にミニマップオーバーレイを描画するなど、いつでもビューポート投影パラメータを変更できます。

+1

返信いただきありがとうございます。OpenGLでプログラミングする際にビューポートを使用する必要があることを知っています。現時点では画面に何かをレンダリングしようとしていますので、 –

関連する問題