首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认开放GLES线(3D)的替代方案?

默认开放GLES线(3D)的替代方案?
EN

Stack Overflow用户
提问于 2012-06-26 11:57:59
回答 2查看 292关注 0票数 0

我目前正在尝试在我的项目中实现一个轮廓算法(使用Open GLES,它目前主要用于移动设备,主要是iPhone )。其中一个要求是绘制一组3D线条。默认OpenGL线路的问题是,当它们很粗时,它们不能很好地连接成一个角度(出现间隙)。其他微妙的伪影也很明显,它们削弱了线条的视觉吸引力。

现在,我已经考虑使用某种类型的四元组作为替代。但是,在屏幕空间中绘制四元组需要某种可见性检测-在实际3D世界中遮挡的线条应该不可见。

有许多方法可以解决这个问题-即定量不可见性。但是,考虑到需要使用光线投射,这种方法,特别是在处理能力有限的移动设备上,很难有效地实现。再看一看,我发现了this paper,它描述了几种使用z-buffer采样来实现这种效果的方法。然而,我不是这个领域的专家,虽然我在一定程度上了解这些技术背后的理论,但我不确定如何进行实际实现。我想知道是否有人可以在这里指导我更多的技术层面-在OpenGLES方面的事情。我也对任何关于3D线条可见性的建议持开放态度。

EN

Stack Overflow用户

回答已采纳

发布于 2012-10-04 12:12:17

我已经想出了一个在iPhone 4S上运行良好的解决方案(没有在任何其他设备上测试过)。它建立在渲染世界空间四边形的想法上,并在GPU上进行轮廓检测。它的工作方式是这样的(不是双关语):

  • 我们生成边缘信息。这由网格中的边/“线”列表组成,对于每条边,我们关联两条法线,它们代表边两边的三角形。
  • 这被处理成一组四边形,并上传到GPU -每个四边形代表一条边。每个四边形的每个顶点都伴随着三个属性(vec3s),即边方向向量和两条相邻的三角法线。所有的四边形都是在没有“厚度”的情况下传递的-即两端的顶点都在相同的位置。但是,对于相同位置的每个顶点,边方向向量是相反的。这意味着它们将在需要时以相反的方向挤出以形成四边形。
  • 我们通过在每个tri范数和视图向量之间执行两个点积,并检查它们是否具有相反的符号,来确定顶点是否为顶点着色器中可见边的一部分。(有关详细信息,请参阅网络周围的标准轮廓算法)
  • 对于作为可见边的一部分的顶点,我们采用边方向向量与视图向量的叉积,以获得面向屏幕的“挤出”向量。我们将此向量添加到顶点,但除以投影顶点的w值,以创建一个恒定厚度的四边形。

这不会直接解决相邻边缘之间可能出现的差距,但在解决这一问题时要灵活得多。一种解决方案可能涉及将大角度线与另一个四边形之间的顶点连接起来,这是我目前正在探索的。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11200593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档