opengl 中render()的问题
2014-03-20 19:22
260 查看
在创建了一个三维地形的程序中
render()函数的内容如下:
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// 设置摄像机位置和方向
g_Camera.Look();
// 渲染地形
RenderHeightMap(g_HeightMap);
// 绘制天空包围盒
CreateSkyBox(500, 0, 500, 2000, 2000, 2000);
// 获得当前摄像机的位置
CVector3 vPos = g_Camera.Position();
CVector3 vNewPos = vPos;
// 判断摄像机是否低于地平面
if(vPos.y < Height(g_HeightMap, (int)vPos.x, (int)vPos.z ) + 10)
{
// 设置新的位置
vNewPos.y = (float)Height(g_HeightMap, (int)vPos.x, (int)vPos.z ) + 10;
// 获得y方向的差
float temp = vNewPos.y - vPos.y;
// 获得当前摄像机的方向
CVector3 vView = g_Camera.View();
vView.y += temp;
// 设置新的摄像机位置
g_Camera.PositionCamera(vNewPos.x, vNewPos.y, vNewPos.z,
vView.x, vView.y, vView.z, 0, 1, 0);
}
frame++;
// 交换缓冲区
SwapBuffers(g_hDC);
}
本人想要随着frame的增加 改变映射在地面上的纹理 于是在
// 渲染地形
RenderHeightMap(g_HeightMap); 之前
加了这么几句
if(frame>=0&&frame<=2000)
BuildTexture("Terrain.bmp",g_Texture[0]);
if(frame>2000&&frame<=4000)
BuildTexture("Terrain1.bmp",g_Texture[0]);
if(frame>4000&&frame<=6000)
BuildTexture("Terrain2.bmp",g_Texture[0]);
if(frame>6000&&frame<=8000)
BuildTexture("Terrain3.bmp",g_Texture[0]);
if(frame>8000&&frame<10000)
BuildTexture("Terrain4.bmp",g_Texture[0]);
结果程序在运行10秒左右之后 就慢的不行了 刚开始的帧速率还能有100多 结果没一会就只有1,2那样 漫游都反应不过来了
谁能告诉我这是为什么 有什么改进的方法吗 先谢过各位走过路过的
render()函数的内容如下:
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// 设置摄像机位置和方向
g_Camera.Look();
// 渲染地形
RenderHeightMap(g_HeightMap);
// 绘制天空包围盒
CreateSkyBox(500, 0, 500, 2000, 2000, 2000);
// 获得当前摄像机的位置
CVector3 vPos = g_Camera.Position();
CVector3 vNewPos = vPos;
// 判断摄像机是否低于地平面
if(vPos.y < Height(g_HeightMap, (int)vPos.x, (int)vPos.z ) + 10)
{
// 设置新的位置
vNewPos.y = (float)Height(g_HeightMap, (int)vPos.x, (int)vPos.z ) + 10;
// 获得y方向的差
float temp = vNewPos.y - vPos.y;
// 获得当前摄像机的方向
CVector3 vView = g_Camera.View();
vView.y += temp;
// 设置新的摄像机位置
g_Camera.PositionCamera(vNewPos.x, vNewPos.y, vNewPos.z,
vView.x, vView.y, vView.z, 0, 1, 0);
}
frame++;
// 交换缓冲区
SwapBuffers(g_hDC);
}
本人想要随着frame的增加 改变映射在地面上的纹理 于是在
// 渲染地形
RenderHeightMap(g_HeightMap); 之前
加了这么几句
if(frame>=0&&frame<=2000)
BuildTexture("Terrain.bmp",g_Texture[0]);
if(frame>2000&&frame<=4000)
BuildTexture("Terrain1.bmp",g_Texture[0]);
if(frame>4000&&frame<=6000)
BuildTexture("Terrain2.bmp",g_Texture[0]);
if(frame>6000&&frame<=8000)
BuildTexture("Terrain3.bmp",g_Texture[0]);
if(frame>8000&&frame<10000)
BuildTexture("Terrain4.bmp",g_Texture[0]);
结果程序在运行10秒左右之后 就慢的不行了 刚开始的帧速率还能有100多 结果没一会就只有1,2那样 漫游都反应不过来了
谁能告诉我这是为什么 有什么改进的方法吗 先谢过各位走过路过的
相关文章推荐
- 打开OPENGL真的能提高魔兽争霸III/魔兽世界的速度吗?(文字只显示一半,卡之类问题)
- CUDA&OPenGL环境搭建和测试问题总结(VS2015)
- cocos2d-x lua 屏幕适配问题(OpenGL调用),版本号(cocos2dx v3.4)
- OpenGL纹理映射的几个问题
- Qt+opengl集成,运行demo时出现的问题
- windows下X server运行OpenGL程序的问题
- opengl常见问题
- OpenGL使用模板模板缓冲时需要注意的几个问题
- [OpenGL]移植OpenGL项目遇到的问题记录
- 在mingw/GNU上编译opengl代码问题
- Opengl 绘图出现白板、像素不清晰的问题解决办法
- 问题解决——OpenGL超级宝典 关于gltDrawTorus的错误解决
- CodeBlocks配置openGL遇到的一些问题
- OpenGL深度测试带来的问题----Z冲突
- 解决安装OpenGL时程序运行提示glut32.dll丢失的问题
- OpenGL常见问题
- 关于NVIDIA 的 OpenGL回退到软件模式的问题。
- 【OpenGL】无法启动此程序,因为计算机中丢失 glut32.dll。尝试重新安装该程序以解决此问题。
- OPENGL问题:link时出现error LNK2001: unresolved external symbol ___glutInitWithExit@12的错误提示
- 关于NVIDIA 的 OpenGL回退到软件模式的问题。