javascript - 如何渲染带有三 Angular 形 strip 的球体

标签 javascript webgl parametric-equations

我目前正在浏览 this tutorial关于渲染形状 WebGL(在这种情况下特别是一个球体),我理解球体上每个点生成背后的数学。不过在教程中,作者定义了一种方法来查找所有顶点,另一种方法来生成构成球体的所有正方形。

本教程中有几件事不清楚。首先,参数方程生成的顶点究竟是如何连接到生成的正方形(三 Angular 形带)的?在使用生成的顶点做同样的事情之前,我已经用普通的 javascript 和 HTML5 制作了一个简单的骨骼程序,所以我没有看到它们如何以及为什么必须与三 Angular 形条一起使用。另一个混淆点是关于生成正方形的函数:

 var indexData = [];
    for (var latNumber = 0; latNumber < latitudeBands; latNumber++) {
      for (var longNumber = 0; longNumber < longitudeBands; longNumber++) {
        var first = (latNumber * (longitudeBands + 1)) + longNumber;
        var second = first + longitudeBands + 1;
        indexData.push(first);
        indexData.push(second);
        indexData.push(first + 1);

        indexData.push(second);
        indexData.push(second + 1);
        indexData.push(first + 1);
      }
    }

要生成每个正方形的第一个点(左上角的点),请执行以下操作:var first = (latNumber * (longitudeBands + 1)) + longNumber;

我不确定为什么每一步都需要将纬度线的数量乘以经度线的总数(加 1 以完全环绕)。

这两个函数的代码在教程的底部。在这种情况下使用三 Angular 形带的一般解释也可能会有所帮助,谢谢。

最佳答案

参数方程生成的顶点与正在生成的正方形(三 Angular 形带)的连接到底是怎样的?

A:顶点基本上就是点。所以它基本上使用数学生成点。引自教程:

“对于半径为 r、具有 m 个纬度带和 n 个经度带的球体,我们可以通过将 0 到 π 的范围分成 m 个部分来获取 θ 的值范围来生成 x、y 和 z 的值, 并通过将范围 0 到 2π 分成 n 个部分来获取 φ 的值范围,然后计算:

x = r sinθ cosφ y = 余弦θ z = r sinθ sinφ"

如何以及为什么必须将它们与三 Angular 带结合使用

A:它们不是原始类型 gl.TRIANGLE_STRIP 中的三 Angular 形 STRIPS,而只是用 3 个点定义的规则三 Angular 形。

关于生成正方形的函数

A:它们本身不是生成方 block ,而是使用参数方程生成的点来创建三 Angular 形供 GPU 渲染。您在 OP 中显示的代码基本上将一个正方形分成 2 个三 Angular 形。

关于javascript - 如何渲染带有三 Angular 形 strip 的球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33770689/

相关文章:

javascript - 为什么这个简单的平移矩阵不起作用

python - 使用 matplotlib Python 绘制参数图

javascript - 筛选与另一个数组的任何成员都不匹配的对象数组

javascript - Three.js:将 HTML 页面/DOM 元素渲染到立方体的表面?

javascript - 在 WebGL2 中使用 mat4 属性

math - 如何找到二维线的法向量?

matlab - 如何绘制圆柱体的可变横截面?

javascript - 如果执行,如何在单击后向左滑动完整的 div

javascript - 画中画和全屏一起 - API 只能通过用户手势启动

javascript - 无法在 Chrome 中编辑样式?