gpt4 book ai didi

c++ - 我是否需要在所有绘图代码之后重复 glOrtho 调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:18 24 4
gpt4 key购买 nike

我正在使用 OpenGL 创建 2D 游戏。每次我移动对象时,我都必须调用 glLoadIdentity,否则所有对象都会被移动,但是 glLoadIdentity 也会重置 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();
}

如何正确地显示、移动和旋转启用 glOrtho 的对象?

最佳答案

but glLoadIdentity also resets glOrtho call, so basically I ending with something like this

glOrtho 属于投影矩阵,不属于模型 View 矩阵。您接受的答案在概念上并没有错,但确实遗漏了那部分。你的那部分代码应该看起来像

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();

关于c++ - 我是否需要在所有绘图代码之后重复 glOrtho 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com