2012-01-05 5 views
1

私はOpenGLで2Dゲームを作成しています。 、それが適切に行われる必要がありますどのようにすべての描画コードの後に​​glOrtho呼び出しを繰り返す必要はありますか?

#include <GL/glfw.h> 

int main() 
{ 
glfwInit(); 

glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE); 
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 8); 
glfwOpenWindow(800, 600, 0, 0, 255, 0, 32, 0, GLFW_WINDOW); 

glfwSetWindowTitle("title"); 

glfwSwapInterval(1); // also known as 'vsync' 

glfwEnable(GLFW_KEY_REPEAT); 
//glfwDisable(GLFW_MOUSE_CURSOR); 

glOrtho(0.0, 1024, 768, 0, -1.0, 1.0); 
glMatrixMode(GL_MODELVIEW); 

while(!glfwGetKey(GLFW_KEY_ESC)) 
{ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glLoadIdentity(); 
    glOrtho(0.0, 1024, 768, 0, -1.0, 1.0); 

    glTranslatef(100, 0, 0); 

    glColor3f(0.5f,0.5f,1.0f); 
    glBegin(GL_POLYGON); 
     glVertex2f(100, 100); 
     glVertex2f(100, 250); 
     glVertex2f(250, 250); 
     glVertex2f(250, 100); 
    glEnd(); 

    glLoadIdentity(); 
    glOrtho(0.0, 1024, 768, 0, -1.0, 1.0); 

    glRotatef(25,0,0,1); 

    glBegin(GL_POLYGON); 
     glVertex2f(300, 300); 
     glVertex2f(300, 450); 
     glVertex2f(450, 450); 
     glVertex2f(450, 300); 
    glEnd(); 

    glFlush(); 

    glfwSwapBuffers(); 
} 

glfwTerminate(); 
} 

:それ以外の場合は、すべてのオブジェクトが移動されますので、私は私のオブジェクトを移動毎回、私は、glLoadIdentityを呼び出す必要がありますが、glLoadIdentityもそう基本的に、私はこのようなもので終わる、glOrthoコールをリセットglOrthoを有効にしてオブジェクトを表示、移動、回転させますか?

答えて

5

しかしglLoadIdentityもそう基本的に、私はglOrtho投影行列ではなく、モデルビュー行列に属するこの

のようなもので終わる、glOrtho呼び出しをリセットします。このチュートリアルチェックアウトあなたが受け入れた答えは、概念的には間違っているわけではありませんが、その部分が欠けていました。あなたのコードの部分はのようになります

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0.0, 1024, 768, 0, -1.0, 1.0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(100, 0, 0); 

glColor3f(0.5f,0.5f,1.0f); 
glBegin(GL_POLYGON); 
    glVertex2f(100, 100); 
    glVertex2f(100, 250); 
    glVertex2f(250, 250); 
    glVertex2f(250, 100); 
glEnd(); 

glLoadIdentity(); 

glRotatef(25,0,0,1); 

glBegin(GL_POLYGON); 
    glVertex2f(300, 300); 
    glVertex2f(300, 450); 
    glVertex2f(450, 450); 
    glVertex2f(450, 300); 
glEnd(); 

glFlush(); 

glfwSwapBuffers(); 
関連する問題