MFC下OpenGL关于Fog的练习——2
直接从我的思路开始吧,那些前期的工作就省略了,练习——1里面已经说过了。
1.加入SetupFog()用于初始化
代码
void COpenGLDemo20100319View::SetupFog(void)
{
GLfloat fogColor[4] = {0.0f, 0.25f, 0.25f,1.0f};
glewInit();
glEnable(GL_FOG);
glFogi (GL_FOG_MODE, GL_EXP);
glFogfv (GL_FOG_COLOR, fogColor);
glFogf (GL_FOG_DENSITY, 0.25);
glHint (GL_FOG_HINT, GL_DONT_CARE);
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
glClearColor(0.0, 0.25, 0.25, 1.0); /* fog color */
}
{
GLfloat fogColor[4] = {0.0f, 0.25f, 0.25f,1.0f};
glewInit();
glEnable(GL_FOG);
glFogi (GL_FOG_MODE, GL_EXP);
glFogfv (GL_FOG_COLOR, fogColor);
glFogf (GL_FOG_DENSITY, 0.25);
glHint (GL_FOG_HINT, GL_DONT_CARE);
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
glClearColor(0.0, 0.25, 0.25, 1.0); /* fog color */
}
2.修改OnCreate()
int COpenGLDemo20100319View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) ==-1)
return-1;
// TODO: Add your specialized creation code here
InitializeOpenGL();
SetupFog();
return0;
}
{
if (CView::OnCreate(lpCreateStruct) ==-1)
return-1;
// TODO: Add your specialized creation code here
InitializeOpenGL();
SetupFog();
return0;
}
3.修改RenderScene()
void COpenGLDemo20100319View::RenderScene(void)
{
glPushMatrix();
glTranslatef(0.0f,0.0f,-5.0f);
glColor3f (1.0f, 0.75f, 0.0f);
glBegin (GL_TRIANGLES);
glFogCoordfEXT (f1);
glVertex3f (2.0f, -2.0f, 0.0f);
glFogCoordfEXT (f2);
glVertex3f (-2.0f, 0.0f, -5.0f);
glFogCoordfEXT (f3);
glVertex3f (0.0f, 2.0f, -10.0f);
glEnd();
glPopMatrix();
}
{
glPushMatrix();
glTranslatef(0.0f,0.0f,-5.0f);
glColor3f (1.0f, 0.75f, 0.0f);
glBegin (GL_TRIANGLES);
glFogCoordfEXT (f1);
glVertex3f (2.0f, -2.0f, 0.0f);
glFogCoordfEXT (f2);
glVertex3f (-2.0f, 0.0f, -5.0f);
glFogCoordfEXT (f3);
glVertex3f (0.0f, 2.0f, -10.0f);
glEnd();
glPopMatrix();
}
本来嘛,这个比练习——1画球还简单的,实施上却浪费了不少时间。首先,这个glFogCoordEXT或者书上写的是glFogCoord,貌似没什么大的差别。不过这个两个函数是在glew.h中的,所以务必包含这个。我刚开始没包含,结果说找不到这个函数,然后加了glew32.lib这个库,加上#include <gl/glew.h>,运行,还是找不到,把我郁闷了很久。咱是菜鸟,这个咱不否认。本来以为我的glew32.lib或者glew.h太老土了,里面没有这个函数,打开找了一下,有的啊。当时是大惑不解。后来试了下“clean solution”,再F5,一切OK了。这个问题其实很简单,不过对菜鸟来说,有的时候还真是找不到办法。这个也算是经验的积累吧。
好了,老规矩,还是贴个结果图吧。