【问题标题】:Simulate Distortion of Spherical Billboard模拟球形广告牌的失真
【发布时间】:2014-03-08 15:17:40
【问题描述】:

我需要制作球形广告牌(即设置深度),但要考虑透视投影——理想情况下包括偏心截头锥体。

我无法找到任何成功人士的参考资料——尽管对于标准广告牌没有透视失真的原因有很多解释。不幸的是,对于我的应用程序来说,缺乏并不是外观缺陷。它实际上对算法很重要。

我自己做了一些调查:

数学很快就变得相当混乱。显而易见的方法是行不通的:例如,您不能将广告牌定向为垂直于视线,因为切向光线不会与广告牌成直角相交。

可能我发现的最有前途的方法是将广告牌渲染为平行于近剪裁平面,并使用顶点着色器将其拉伸为椭圆。这只处理沿一个轴的扰动(例如,它不会处理在视图角落渲染的球体),但主要障碍是正确计算深度;您无法像计算未失真球体那样计算它,因为“球体”正在遮挡自身。

事实上,我没有找到一个好的解决方案,也找不到任何有的人。有人有想法吗?

【问题讨论】:

  • 我没有完全理解你的问题。一种明显的方法是将内容作为纹理映射到要渲染的球体上。或者你想在纯 2D 中做这个把戏?
  • 这必须是纯二维的。问题是故意在边缘附近引入透视失真。
  • 实现失真效果的方法有很多种。一种是将矩形映射到球体上,然后使用真正的投影方程将其投影到屏幕上。这些方程将 2D 球面坐标转换为 3D 笛卡尔坐标,然后将 3D 笛卡尔坐标转换为 2D 笛卡尔坐标并产生逼真的效果。其他方法是定义具有“类球”效果的任意变形(在极坐标中工作可以缓解这种情况)。但实际上你在寻找什么并不清楚。你能改写一下吗?
  • 必须是真正的广告牌:四个顶点,由几何着色器生成。在片段着色器中,我需要(设置片段深度)/(根据需要丢弃)以使广告牌看起来是一个 3D 球体。
  • 仍不清楚。我需要一张图来理解。

标签: opengl math geometry


【解决方案1】:

在浏览甚至没有远程解决这个问题时,我偶然发现了http://iquilezles.org/www/articles/sphereproj/sphereproj.htm,它非常接近。链接教程展示了如何计算栅格化球体的边界椭圆;获得深度(在最坏的情况下,使用光线投射)应该相当容易推导。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多