【发布时间】:2014-03-08 15:17:40
【问题描述】:
我需要制作球形广告牌(即设置深度),但要考虑透视投影——理想情况下包括偏心截头锥体。
我无法找到任何成功人士的参考资料——尽管对于标准广告牌没有透视失真的原因有很多解释。不幸的是,对于我的应用程序来说,缺乏并不是外观缺陷。它实际上对算法很重要。
我自己做了一些调查:
数学很快就变得相当混乱。显而易见的方法是行不通的:例如,您不能将广告牌定向为垂直于视线,因为切向光线不会与广告牌成直角相交。
可能我发现的最有前途的方法是将广告牌渲染为平行于近剪裁平面,并使用顶点着色器将其拉伸为椭圆。这只处理沿一个轴的扰动(例如,它不会处理在视图角落渲染的球体),但主要障碍是正确计算深度;您无法像计算未失真球体那样计算它,因为“球体”正在遮挡自身。
事实上,我没有找到一个好的解决方案,也找不到任何有的人。有人有想法吗?
【问题讨论】:
-
我没有完全理解你的问题。一种明显的方法是将内容作为纹理映射到要渲染的球体上。或者你想在纯 2D 中做这个把戏?
-
这必须是纯二维的。问题是故意在边缘附近引入透视失真。
-
实现失真效果的方法有很多种。一种是将矩形映射到球体上,然后使用真正的投影方程将其投影到屏幕上。这些方程将 2D 球面坐标转换为 3D 笛卡尔坐标,然后将 3D 笛卡尔坐标转换为 2D 笛卡尔坐标并产生逼真的效果。其他方法是定义具有“类球”效果的任意变形(在极坐标中工作可以缓解这种情况)。但实际上你在寻找什么并不清楚。你能改写一下吗?
-
它必须是真正的广告牌:四个顶点,由几何着色器生成。在片段着色器中,我需要(设置片段深度)/(根据需要丢弃)以使广告牌看起来是一个 3D 球体。
-
仍不清楚。我需要一张图来理解。