【问题标题】:cylinder algorithm圆柱算法
【发布时间】:2012-12-11 13:29:29
【问题描述】:

我正在尝试在 OpenGL 中绘制一个圆柱体。我找到了这个算法,但我无法理解它。

http://paulbourke.net/miscellaneous/sphere_cylinder/

“给定两个垂直向量 A 和 B,可以在圆柱体的每个边缘周围创建顶点。因此,对于 4 个顶点小平面,顶点可能由以下给出,其中 theta2 - theta1 是一个合适的小角度,确定近似的粗糙度。”

我怎样才能找到 A 和 B ?我正在使用glm。 glm可以计算叉积吗?

【问题讨论】:

  • 在他的笔记下面,他链接了一个 C 源文件,该文件显示了如何做到这一点。
  • My question here 有用于计算圆柱面顶点的 Postscript 源代码..

标签: c++ opengl


【解决方案1】:

A 和 B 构成正交(最好是正交)笛卡尔二维坐标系的基础。把它们想象成 X 轴和 Y 轴。回想一下,圆的参数方程是

p(t) = r (X cos(t) + Y sin(t))

现在将 X 和 Y 替换为 A、B,你就得到了圆柱的圆形横截面方程。要使其成为圆柱体,您需要通过垂直于 A 和 B 的矢量来拉伸,即 C = A × B

p(s, t) = s * C + r (A cos(t) + B sin(t))

【讨论】:

    【解决方案2】:

    上面几串有答案:

    创建这两个向量的方法有很多种,它们通常需要形成任何与圆柱轴不共线的向量。该向量与圆柱轴 (P2-P1) 的叉积给出了其中一个向量 (A 说),取这个新向量与轴的叉积得到另一个向量 (B)。然后对这两个垂直向量进行归一化。

    让我们一步一步来:

    1. 创建任何不与圆柱轴矢量共线的。
    2. 求该向量与圆柱轴的叉积。叉积的结果是向量,称为向量 A。
    3. 求向量 A 与圆柱轴的叉积得到向量 B
    4. 规范化向量 A 和 B

    更多关于叉积的信息你可以阅读here

    【讨论】:

      【解决方案3】:

      是的,glm 可以构建叉积矩阵,请参阅GLM APIglm::gtx::matrix_cross_product::matrixCross3glm::gtx::matrix_cross_product::matrixCross4)。

      【讨论】:

        【解决方案4】:

        我在 C# 中为 Unity3D 创建了一个模块,该模块以程序方式创建圆柱体并允许您调整其参数。您应该能够轻松转换为 C++,因为几何计算在任何地方都是相同的,我认为代码很容易理解 :) 观看 video 以了解它的内容并从 GitHub 下载代码.

        【讨论】:

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