Three.js: ポイントマテリアルサイズの減衰がFOVを考慮していないようです

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

PerspectiveCameraと、PointsMaterialを使用していくつかのPointsを含むモデルを使用しています。 カスタマイズされたバージョンのOrbitControls.jsを使用して、大きくて複雑なモデルを表示できるようにしています。 変更点の1つは、ズーム機能がカメラを近づけるのではなく、カメラのFOVを変更することです。 カメラが動き、モデルの特定の部分が表示されます。 カメラがモデルに近づくとPointsMaterialの減衰のサイズが変わるが、FOVが変わるとサイズが変わることに気づきました。

サイズアルゴリズムはカメラまでの距離を使用しますが、FOVは使用しないと思いますか? 私はこれまでこのリポジトリに投稿したことがないので、何かが足りない場合はすみません。 IEでテストしようとしましたが、現時点ではページを読み込めません。 同様に、Threeのどのバージョンであるかは正確にはわかりませんが、昨年以内です。

PointsMaterialを作成するコード:

var texFlame = new THREE.TextureLoader().load("textures/flame.png");
mtlFlame = new THREE.PointsMaterial ({size: 2, sizeAttenuation: true, color: 0xffffff, transparent: true,  blending: THREE.AdditiveBlending, depthWrite: false, map: texFlame});

FOVを変更するコードも同様に刺激的ではありません。

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
Three.jsバージョン
  • []開発
  • [] r87
  • [バツ] ...
ブラウザ
  • []それらすべて
  • [x]クローム
  • [x] Firefox
  • [ ] インターネットエクスプローラ
OS
  • []それらすべて
  • [x]ウィンドウ
  • [ ] マックOS
  • [] Linux
  • [] Android
  • [] iOS
ハードウェア要件(グラフィックカード、VRデバイスなど)

これがハードウェア固有であるかどうかはわかりませんが、可能性は低いようです。 Windows10でGeForceGTX950を使用しています。

Question

全てのコメント3件

PointsMaterial.sizeは、世界の単位ではなく、ピクセルの単位があります。 サイズは自分で調整する必要があります。

この関連する投稿は参考になるかもしれません: https ://github.com/mrdoob/three.js/issues/10385#issuecomment-267789138。

gl_PointSizeは制限されている可能性があるため、リクエストしたサイズが実際のサイズと異なる場合があることに注意してください。

@WestLangley。 したがって、FOVを変更するときに、PointsMaterialのsizeプロパティを変更する必要がありますか?

私は尋ねる前にその投稿を見つけましたが、なぜそれがそのように機能するのかについてはよくわかりません。 サイズはピクセル単位であると理解していますが、減衰によってデバイスのピクセルとは関係がなくなり、そのプロセスは確かに、ある意味でFOVに関係する必要がある遠近法に関係する必要がありますか?

しかし、それは私自身の理解の欠如を説明しているだけです。 私はあなたが与える解決策に完全に満足しています。 ありがとう。

PointsMaterial.sizeはピクセル単位のままになると思いますので、参考までに、この回避策をここに投稿します。

このstackoverflowの回答に基づいて、次のパターンを使用してポイントをスケーリングできます。これは、 camera.fov妥当な値で機能するはずです。

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
このページは役に立ちましたか?
0 / 5 - 0 評価