【OpenGL 100分!!!】各位好心的OpenGL高手近来帮忙!!!!纹理和显示列表问题!!!!!!

doall4u 2003-08-30 12:12:49
小D现从数据库中读出了一个方格网的128*128个点(正方形的一块),用了三个数组分别存放了点的X,Y和高程,然后在OPENGL中构造一个DEM,由于必须把方格网变成三角网(否责OPENGL无法渲染),我就把每个小方格沿对角线给切了.然后三个点一组画出若干个小三角,最后构成一个地形.现在地形可以正常显示,而且每个面的法向量也设置了,加上了光照.但是现在由于我是每20毫秒刷新一下场景,我在VC中用的OnTimer,每20毫秒做一次VIEW的刷新,好象是什么Invalidate()函数.是从书上学的.所以总要去重画128*128个点,总要每三个点计算法向量.还没有加上纹理坐标的计算就CPU利用率100%了!!!!在不加纹理的情况下,SDI窗口最大化CPU利用率100%,不最大化最多只有2%(很不明白,怎么差这么多),加了纹理以后不论什么时候都100%,可以肯定是CPU在画的时候不停的做各种OPENGL计算,因为内存一切正常.我看了书上说了用显示列表,于是我就用了,但是更槽,不加纹理的情况下怎么样都是100%,加了纹理更不用说,不知道显示列表怎么用.各位大侠有没有什么好的方法帮我解决解决,我也是才接触OpenGL和VC.
注:我的方法是:
1:我是把绘图的部分封装成DEM类,在VIEW的RenderScene()中调用DEM类的.Draw()方法来画的.不知道各位在画的物体比较多的时候是怎么做的,用不用把降水,房屋,水坝都封装成类来做呢??????
2:实现动画可不可以用别的方法,不用TIMEER,这种方法好实现,但是跟CPU利用率有直接关系,如果拉长时间间隔又要影响动画效果.
3:我伪代码是这样写的,源代码在公司
DEM类的Draw():(没敢加纹理)
for(int i=0;i<16384;i++) //128*128个点
{
if(如果不是最后一列又不是最后一行的点) //选则点来构造三角
{
glBegin(GL_TRAINGLES);//开始画三角形
//每个方格分成两个三角形
//第一个
Jisuan();//计算法向量
glNormal(*,*,*);//指定法向量
glVertex3f(x[i],y[i],z[i]); //第一个点
glVertex3f(x[i+1],y[i+1],z[i+1]);//第二个点
glVertex3f(x[i+1+行宽],y[i+1+行宽],z[i+1+行宽]);//第三个点
//第二个
Jisuan();//计算法向量
glNormal(*,*,*);//指定法向量
glVertex3f(x[i],y[i],z[i]);//第一个点
glVertex3f(x[i+1+行宽],y[i+1+行宽],z[i+1+行宽]);//第二个点
glVertex3f(x[i+行宽],y[i+行宽],z[i+行宽]);//第三个点
glEnd();
}
}//大概是这样
加上显示列表后
glNewList(1,GL_CONPILE);
for(int i=0;i<16384;i++) //128*128个点
{
if(如果不是最后一列又不是最后一行的点) //选则点来构造三角
{
glBegin(GL_TRAINGLES);//开始画三角形
//每个方格分成两个三角形
//第一个
Jisuan();//计算法向量
glNormal(*,*,*);//指定法向量
glVertex3f(x[i],y[i],z[i]);//第一个点
glVertex3f(x[i+1],y[i+1],z[i+1]);//第二个点
glVertex3f(x[i+1+行宽],y[i+1+行宽],z[i+1+行宽]);//第三个点
//第二个
Jisuan();//计算法向量
glNormal(*,*,*);//指定法向量
glVertex3f(x[i],y[i],z[i]);//第一个点
glVertex3f(x[i+1+行宽],y[i+1+行宽],z[i+1+行宽]);//第二个点
glVertex3f(x[i+行宽],y[i+行宽],z[i+行宽]);//第三个点
glEnd();
}
}
glEndList(1,GL_CONPILE);
然后在DEM类中建立另一方法DEM.Complie(),里面是上面的代码,然后.Draw()方法里面改成只有一行代码:glCallList(1);
虽然画出地形了,但利用率比以前更高了???应该怎么办?????我用显示列表的方法对吗????
大家帮帮忙!!!!怎么能把CPU利用率降下来啊>>

另:这里什么时候能有OPENGL的专栏啊?????!!!!!
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
look4u 2004-03-06
  • 打赏
  • 举报
回复
GZ
doall4u 2003-08-31
  • 打赏
  • 举报
回复
up!
doall4u 2003-08-31
  • 打赏
  • 举报
回复
up
doall4u 2003-08-30
  • 打赏
  • 举报
回复
FatGarfield:
我现在没加纹理呢,纹理坐标的设置怎么和画点分开呢???不是同时画吗????代码放在公司了,拿不回来,公司不能上网
FatGarfield 2003-08-30
  • 打赏
  • 举报
回复
几条建议:
1.OpenGL画TRIANGLE_STRIPS效率是最高的
2.把纹理坐标的设置放在显示列表中
只有128*128不会这么慢,可能是纹理设置出了问题。

需要的话,可以帮你看看程序
e_mail: jteng@nlpr.ia.ac.cn
msn: FatGarfieldjteng@hotmail.com

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧