查看: 1582|回复: 4

关于优化改变坐标的问题

[复制链接]

该用户从未签到

发表于 2010-5-18 14:41:29 | 显示全部楼层 |阅读模式
大家好,我有个问题。我现有一个模型,其中有两个面的y值很接近(比如一个是1583.54,另一个是1583.59),我使用osgUtil::Optimizer优化后两个值都变为一致的(1583.6),浏览时会出现闪面,请问如何避免此种情况。

该用户从未签到

发表于 2010-5-18 14:43:02 | 显示全部楼层
避免重合面闪烁的通用方法是使用PolygonOffset

该用户从未签到

发表于 2010-5-18 18:23:41 | 显示全部楼层
具体怎么弄?

该用户从未签到

发表于 2010-5-19 08:21:32 | 显示全部楼层
具体用法和glPolygonOffset是一致的

该用户从未签到

发表于 2010-5-19 11:03:18 | 显示全部楼层
两个面共面或面之间距离很近时,会出现十分难看的z - fighting 问题, 另外在地形上绘制等高线也有z -fighting问题

要解决此问题可以使用, Polygon Offset, 方法如下:

drawSomething();

//同一位置绘制另一个东西

glEnable( GL_POLYGON_OFFSET_FILL ); // This is the one we need...

glPolygonOffset( g_OffsetFactor, g_OffsetUnit );

drawOtherthing();

glPolygonOffset( 0.0f, 0.0f );

glDisable( GL_POLYGON_OFFSET_FILL );

其中

g_OffsetFactor代表 factor,

g_OffsetUnit 代表 units,

关于factor, units 的解释如下:

When GL_POLYGON_OFFSET is enabled, each fragment's depth

value will be offset after it is interpolated from the depth

values of the appropriate vertices. The value of the offset

is factor * DZ + r * units, where DZ is a measurement of

the change in depth relative to the screen area of the

polygon, and r is the smallest value that is guaranteed to

produce a resolvable offset for a given implementation. The

offset is added before the depth test is performed and

before the value is written into the depth buffer.

glPolygonOffset is useful for rendering hidden-line images,

for applying decals to surfaces, and for rendering solids

with highlighted edges.

  

我的翻译:

当GL_POLYGON_OFFSET启用,多边形每个由相应顶点内插得到的深度值将被“偏移”。

偏移值的量为 “factor * DZ + r * units”,这里DZ是多边形深度值相对其屏幕面积变化的一个量算值,

r 是一个可以确保能产生一个可用于实行的偏移最小值。 这个“偏移”值在深度检测和值被写入z-Buffer之前要加到片段深度值上。

在渲染隐藏线影像,申请表面注记,和渲染带有高亮边的填充体方面glPolygonOffset很有用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表