1

私は現在、シェイプ WebGL (具体的にはこの場合は球体) のレンダリングに関するこのチュートリアルを進めており、球体上の各ポイントの生成の背後にある数学を理解しています。ただし、チュートリアルでは、作成者はすべての頂点を見つける方法と、球体を構成するすべての正方形を生成する方法を定義しています。

チュートリアルで行われていることから、いくつかのことが不明です。まず、パラメトリック方程式によって生成された頂点が、生成されている正方形 (三角形のストリップ) にどの程度正確に接続されているか? 生成された頂点を使用するだけで同じことを行う前に、単純な javascript と HTML5 で必要最小限のプログラムを作成したので、三角形ストリップと組み合わせて使用​​する必要がある方法と理由がわかりません。もう 1 つの混乱点は、特に正方形を生成する関数に関するものです。

 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 を加えます)。

両方の関数のコードは、チュートリアルの下部にあります。このような場合のトライアングル ストリップの使用に関する一般的な説明も参考になります。

4

1 に答える 1

2

パラメトリック方程式によって生成された頂点は、生成されている正方形 (三角形のストリップ) にどのくらい正確に接続されていますか?

A: 頂点は基本的に点です。したがって、基本的には数学を使用してポイントを生成します。チュートリアルからの引用:

「緯度バンドが m で経度バンドが n の半径 r の球体の場合、0 から π までの範囲を m 個の部分に分割して θ の値の範囲を取得することで、x、y、z の値を生成できます。 0 から 2π の範囲を n 個の部分に分割し、次のように計算することによる φ の値の範囲:

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

三角形ストリップと組み合わせて使用​​する必要がある方法と理由

A: プリミティブ型 gl.TRIANGLE_STRIP のような三角形 STRIPS ではなく、3 点で定義された単なる正三角形です。

正方形を生成する関数について

A: それ自体は生成正方形ではありませんが、パラメトリック方程式から生成された点を使用して、GPU がレンダリングする三角形を作成します。OPで示したコードは、基本的に正方形を2つの三角形に分割します。

于 2015-11-18T22:08:25.800 に答える