GLSL中的气缸冒名顶替者

nad*_*dir 6 opengl shader glsl vertex-shader cylindrical

我正在开发一种用于分子三维可视化的小工具.对于我的项目,我选择用"Brad Larson"先生用他的Apple软件" Molecules " 做的事情.一个链接,您可以在其中找到所使用技术的小型演示文稿:Brad Larsson软件演示文稿

为了完成我的工作,我必须计算球体冒充者圆柱体冒名顶替者.

目前,我已经在另一个教程Lies和Impostors的帮助下成功完成了"Sphere Impostor"

总结球体冒名顶替者的计算:首先我们将"球体位置"和"球体半径"发送到"顶点着色器",这将在相机空间中创建一个始终面向相机的正方形,之后我们发送片段着色器的正方形,我们使用简单的光线跟踪来找到正方形的哪个片段包含在球体中,最后我们计算片段的法线和位置来计算光照.(另一件事我们也写了gl_fragdepth来给我们的冒充球体提供一个很好的深度!)

但是现在我被阻挡在气缸冒名顶替者的计算中,我试图在球体冒充者和圆柱体冒名顶替者之间做一个平行但是我找不到任何东西,我的问题是,对于球体来说它很容易因为球体是总是一样的,无论我们如何看待它,我们总会看到同样的事情:"一个圆圈",另一个是球体完全由数学定义,然后我们可以轻松找到计算光照的位置和法线,并创建我们的骗子.

对于气缸而言,它不是一回事,我没有找到建模可以用作"气缸冒名顶替者"的形状的提示,因为气缸根据我们看到的角度显示许多不同的形状!

所以我的要求是询问你有关"气缸冒名顶替者"问题的解决方案或指示.

Ani*_*Ani 2

根据我对这篇论文的理解,我将其解释如下。

从任何角度观察,冒充圆柱体都具有以下特征。

  1. 从顶部看,它是一个圆圈。因此,考虑到您永远不需要从上到下查看圆柱体,因此您不需要渲染任何内容。
  2. 从侧面看,它是一个长方形。像素着色器只需要像平常一样计算照明。
  3. 从任何其他角度来看,它都是一个弯曲的矩形(与步骤 2 中计算的矩形相同)。它的曲率可以在像素着色器内部建模为顶部椭圆的曲率。该曲率可以简单地视为纹理空间中每个“列”的偏移,具体取决于视角。该椭圆的短轴可以通过将长轴(圆柱体的厚度)乘以当前视角系数(角度/90)来计算,假设 0 表示您正在从侧面查看圆柱体。

图。1。 视角。我在下面的数学中只考虑了 0-90 的情况,但其他情况略有不同。

图2. 给定视角 (phi) 和圆柱体直径 (a),着色器需要如何在纹理空间 Y = b' sin(phi) 中扭曲 Y 轴。b' = a * (phi / 90)。不应该渲染 phi = 0 和 phi = 90 的情况。

当然,我没有考虑这个圆柱体的长度 - 这取决于您的特定投影,而不是图像空间问题。