|

楼主 |
发表于 2004-9-22 14:46:00
|
显示全部楼层
Re:我用OPENGL画了一个地图,在把一个房子放上去,可是?
void COpenGL::InitGL(GLvoid)
{
int stop=0;
angle=0;
GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0};
GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0};
GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat light_position[] = {0.0, -100.0, -100.0, 0.0};
glClearColor(0, 0, 0, 0);
glColor3f(1, 1, 1);
g.SetCellLength(40); // 网格之间的长度
g.SetDimensions(50,50);
g.SetHeight(0, 20); // 地形高程的最小和最大值
g.GenerateNewGrid(); // 生成新的地形
g.SetInterpolationLevel(3); // 曲线插值阶数
g.Compile();
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING); // 使用光照
glEnable(GL_NORMALIZE);
glShadeModel(GL_FLAT);
glCullFace(GL_FRONT);
glEnable(GL_CULL_FACE);
if (!LoadGLTextures()) // Jump To Texture Loading Routine ( NEW )
{
return; // If Texture Didn't Load Return FALSE
}
glEnable(GL_TEXTURE_2D); // 启用纹理映射( 新增 )
glShadeModel(GL_SMOOTH); // 启用阴影平滑
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 黑色背景
glClearDepth(1.0f); // 设置深度缓存
glEnable(GL_DEPTH_TEST); // 启用深度测试
glDepthFunc(GL_LEQUAL); // 所作深度测试的类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精细的
Model = GL3DS_initialize_HUBBLE();
if (Model == -1)
{
printf("Error initializing display list\n");
exit (-1);
}
}
void COpenGL::RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(100, 300, 100, 0, 0, 0, 0, 1, 0);
glPushMatrix();
glRotatef(40, 0, 1, 0);
glRotatef(90, 1, 0, 0);
glTranslatef(-1000, -1000, 0);
angle += 1;
if (angle > 359)
angle = 0;
g.Draw();
glPopMatrix();
glLoadIdentity();
glPushMatrix();
glTranslatef( 0.0, 0.0, -200.0 );
// glCallList(2);
// 绘制地形
glPopMatrix();
glFlush();
::SwapBuffers(hdc); //交互缓冲区
}
|
|