为何glRectf(-25.0f,25.0f,25.0f,-25.0f);无法执行?
这是从 "学OpenGL编游戏 "里的代码片断,
这是原来的代码
void OpenGL::Render()
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glFlush();
SwapBuffers(hDC);
}
渲染后显示一个蓝色的背景图,
为了显示一个正方形修改代码如下
void OpenGL::Render()
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
//Test.Begin
glColor3f(1.0f,0.0f,0.0f);
glRectf(-25.0f,25.0f,25.0f,-25.0f);
//Test.End
glLoadIdentity();
glFlush();
SwapBuffers(hDC);
}
但是运行后还是显示一个蓝色背景,
//Test.Begin
glColor3f(1.0f,0.0f,0.0f);
glRectf(-25.0f,25.0f,25.0f,-25.0f);
//Test.End
这两行似乎没有起作用?不知道为什么,
下边是它的
void GameLoop()
{
MSG msg;
bool fMessage;
PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);
while(msg.message!=WM_QUIT)
{
fMessage=PeekMessage(&msg,NULL,0L,0L,PM_REMOVE);
if(fMessage)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
m_OpenGL-> Render();
}
}
}
为什么会这样呢?
[解决办法]
找参考示例一步步来,OpenGL里很容易就把坐标搞丢的。
[解决办法]
glLoadIdentity();应该放在glClearColor后面,glColor3f前面
另外从你的代码里没看到你设置matrix mode的代码,OpenGL就相当于拿着照相机照相,首先得调整好相机与物体之间的位置及相机的取向(glMatrixMode,glOrtho2D/3D,glPerspective,gluLookAt),然后才在render里画物体(拍摄).否则可能物体就不在相机的视线内,所以就看不到你画的矩形了