私は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
を有効にしてオブジェクトを表示、移動、回転させますか?
datenwolfの答えは私よりも正しいです。このWebページの図を見てください:http://www.songho.ca/opengl/gl_transform.html。プロジェクトマトリックスを含む主要な変容を示しています。 -アーロン – ahoffer