首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >非平面多边形的平阴影

非平面多边形的平阴影
EN

Computer Graphics用户
提问于 2016-01-10 12:25:09
回答 1查看 800关注 0票数 7

我试图找出如何正确地实现网格的平面阴影包含非平面多边形(使用OpenGL/GLSL)。目的是获得类似于Blender给出的结果(下面所有的多边形都是非平面的):

提供一些上下文-非平面多边形(例如四角,五角,.)是否存在于网格I加载中,或由于将细分方案(如Catmull)应用于网格而出现。

在三角形网格的情况下,我知道以下实现平面阴影的方法-

  1. dFdxdFdy在破片着色器中的交叉积计算
  2. 利用几何图形计算三角形的法向,取三角形两边的交叉积。
  3. 当使用glDrawElements时,使用flat插值限定符(它基本上使用与所有片段的激发顶点相关联的法线)。
  4. 当使用glDrawArrays时,大多数顶点(通常都是)被多次复制到GPU。因此,每次都可以使用不同的正常值。

对于包含非平面多边形的网格,前三个选项不会产生我想要的结果。在我的实现中(使用Qt框架),我使用GL_TRIANGLE_FAN

第四种选择可能有效,但不是很优雅--我想使用glDrawElementsglDrawMultiElements。另一种选择是在逐个遍历faces时使用glDrawElements (而不是使用glPrimitiveRestartIndex调用一次)。在这种情况下,一个人可以上传一个uniform正常的每张脸。然而,这似乎不太有效。还有其他想法吗?

EN

回答 1

Computer Graphics用户

发布于 2016-01-13 14:29:53

不知道搅拌机的内部,我会说它使用共享法线为四角,分裂法线只在边缘之间的四角,而不是在三角形之间。因此,您的想法上传一个正常的每四元可能是接近的结果,你正在寻找。

如果将网格加载为四角体,则设置。如果您使用的是OpenGL的旧版本,其中仍然存在四叉元,那么甚至可以使用解决方案3)。

如果将网格加载为三角形,则必须确定哪些三角形起源于四角体。你很可能只是通过在相邻三角形之间的固定角度之外强制分割法线来做到这一点。

我不确定有一个简单的动态解决方案,你只是渲染任何网格。你可以使用几何图形着色器查看相邻的顶点,但最简单的版本是在上传之前平滑法线一次。

票数 7
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/1888

复制
相关文章

相似问题

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