OpenGL 高分三问

skywind 2004-03-04 10:24:10
[问题其一:字体显示怎么那么慢??]

glPushAttrib(GL_LIST_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glRasterPos2i(x, y);
glListBase(FontList - 32);
glCallLists(i, GL_UNSIGNED_BYTE, line);
glPopAttrib();
glFinish();

我用上面的方法画字体,在什么都不画的情况下是225fps,但是一旦有字体
输出的话fps变成了38!!!怎么搞的,
上面的代码真的有那么慢么??

我的电脑CIII 1.2GHz
nVidia TNT Vanta

不知道怎么搞的??



[问题其二:Frustum改变与zBuffer]

比如我改变了zFar平面离镜头的距离
比如我在作图的时候画了些东西,此时zFar很近,然后我把zFar设远了
去画个SkyBox,问题就出来了~~ :

从投影的角度分析,设变换矩阵 A = ModelView x Projection
在空间中的一点乘了A后,等于把zNear-zFar之间的距离影射为
最后的z坐标 [-1,1) 然后在zBuffer中比较是否画出。

此时,在我改变zFar平面的前后,由于zNear-zFar前后的距离
不等,而最终都将影射成[-1,1)的z坐标,那么经过一个zFar
平面的变远过程那么在世界坐标中本来离镜头远的点映射的
z值就会比变zFar前本来离镜头近的点的z值要小,然后这两个
点都会被渲染,在zBuffer的比较中,终于导致本来该画在
后面的点却画到了前面~~

上面是一个推论,实际我在画SkyBox的时候并没有改变zFar,
只是在一开始渲染的时候就把zFar设置的很远,之后不变,
但是有的时候并不必要这么做。

故求教各位此推论成立否?如果不成立,那么OpenGL是如何
处理的??

多蒙赐教



[问题其三:Quardtree+LOD地形拼接问题]

一开始我实现的时候是在摄影机坐标四周重复画一圈同样的地形(四块)
但是由于地形和地形拼节的地方(比如两块1024x1024的地形拼节起来)
接逢处可能会出现由于lod等级不一样而出现裂缝~~

要拼节这些裂缝实在太麻烦了,不知道各位有什么简单点的方法??
下面是代码
void iLandScape::UpdateQuadtree(int x, int y, int Width)
{
int w = Width >> 1;
int w2 = Width >> 2;
if (TestFrustum(x, y, Width) == 0) return;
// 设置标志为可以看见
QuadtreeSet(x - 1, y);
if (Width <= 3) return;
if (TileSplit(x, y, Width)) { //如果细分
QuadtreeSet(x, y);
UpdateQuadtree(x - w2, y - w2, w + 1);
UpdateQuadtree(x + w2, y - w2, w + 1);
UpdateQuadtree(x - w2, y + w2, w + 1);
UpdateQuadtree(x + w2, y + w2, w + 1);
}
}

...全文
57 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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