您的位置:首页 > 运维架构

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那样 漫游都反应不过来了

谁能告诉我这是为什么 有什么改进的方法吗 先谢过各位走过路过的


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: