Three.js: InterleavedBufferクラスのストライドのデフォルト値がありません

作成日 2017年05月28日  ·  3コメント  ·  ソース: mrdoob/three.js

問題の説明

ここInterleavedBufferクラスでは、ストライドのデフォルト値を0にすることをお勧めします。 ユーザーがストライドを指定するのを忘れた場合、 this.strideの値undefinedになり、これはvar stride = data.stride;にカスケードされ、さらに_gl.vertexAttribPointerにカスケードされて未定義のwebgl動作が発生します。

Three.jsバージョン
  • [X]開発
  • [x] r85
  • []..。
ブラウザ
  • [x]それらすべて
  • []クローム
  • [] Firefox
  • [ ] インターネットエクスプローラ
OS
  • [x]それらすべて
  • [ ] ウィンドウズ
  • [ ] マックOS
  • [] Linux
  • [] Android
  • [] iOS

最も参考になるコメント

引数にデフォルト値を設定するということは、値をまったく指定しなくてもよいということです。 ただし、この場合は値を設定する必要があります。

また、ゼロがデフォルトの場合、次の行はゼロで除算できます。

three.jsは通常、パラメーター値をチェックしません。

全てのコメント3件

引数にデフォルト値を設定するということは、値をまったく指定しなくてもよいということです。 ただし、この場合は値を設定する必要があります。

また、ゼロがデフォルトの場合、次の行はゼロで除算できます。

three.jsは通常、パラメーター値をチェックしません。

  1. 残念ながら、C ++とは異なり、コンパイル時に検出されるため、ユーザーにその値を設定させる方法はありません。 設定する必要がある場合は、設定されていない場合にエラーをスローして、サイレントに通過して奇妙なグラフィック動作を返すのではないでしょうか。 three.jsの新しいユーザーとして、私は問題を見つけるのにかなりの時間を無駄にしました、そして私はこの落とし穴に陥る唯一の人ではないと確信しています。

  2. ユーザーが0をstrideに割り当てるのを防ぐ方法はありません。これにより、前述の@WestLangleyでゼロ除算の問題が発生します。

  3. ここでのAPIドキュメントは、 strideの意味を明確に説明していません。 OpenGL / WebGL APIでの私の経験に基づくと、ここでのstrideは、頂点属性のプリミティブ要素(floatまたはint)の数です。 したがって、 countは、最初の引数arrayで属性が定義されている頂点の数のようです。

  4. そして、私が間違っている場合は訂正してください。 this.countは、 WebGLRender全体で使用法を検出しませんが、 strideは重要なGL呼び出し_gl.vertexAttribPointerで使用されています。 stride 0を割り当てた後、正確には正しくなく、 this.countInfinityになった後、レンダリングが通常に戻る理由も説明しています。フレームワークのどこに。

したがって、 strideの値を確認し、 undefinedまたは0の場合はユーザーにプロンプ​​トを表示するように、セーフガードを設定することをお勧めします。

はい、これはJavaScriptであり、以前にこれらの議論を行ったことがあります。

一方、ドキュメントが不十分または不正確であると感じた場合は、ドキュメントを改善するのに役立つ絶好の機会です。 :)

参照したコードでは、 countは頂点の数です。 このプロパティは、レンダラーによって使用される場合と使用されない場合がありますが、必要に応じてアプリケーション層で使用できるプロパティです。

このページは役に立ちましたか?
0 / 5 - 0 評価