首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为何glRectf(-25.0f,25.0f,25.0f,25.0f);无法执行?解决思路

2012-04-22 
为何glRectf(-25.0f,25.0f,25.0f,-25.0f)无法执行?这是从 学OpenGL编游戏 里的代码片断,这是原来的代码

为何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里画物体(拍摄).否则可能物体就不在相机的视线内,所以就看不到你画的矩形了

热点排行