Three.js: Poin Redaman ukuran material tampaknya tidak mempertimbangkan FOV

Dibuat pada 7 Sep 2017  ·  3Komentar  ·  Sumber: mrdoob/three.js

Saya menggunakan PerspectiveCamera dan model termasuk beberapa Poin menggunakan PointsMaterial. Saya menggunakan versi OrbitControls.js yang disesuaikan untuk memungkinkan tampilan model yang besar dan kompleks. Salah satu perubahannya adalah fungsi zoom mengubah FOV kamera alih-alih memindahkannya lebih dekat. Kamera bergerak untuk menunjukkan bagian tertentu dari model. Saya perhatikan bahwa atenuasi PointsMaterial berubah ukuran ketika kamera bergerak lebih dekat ke model tetapi tidak ketika FOV diubah.

Saya berasumsi algoritma ukuran menggunakan jarak ke kamera tetapi tidak FOV? Saya belum pernah memposting ke repo ini sebelumnya jadi maafkan saya jika saya melewatkan sesuatu. Saya mencoba menguji dengan IE tetapi tidak dapat memuat halaman saat ini. Sama, tidak yakin persis versi Tiga itu tetapi dalam satu tahun terakhir.

Kode yang membuat 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});

Kode yang mengubah FOV juga tidak menarik:

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
Versi Three.js
  • [ ] Dev
  • [ ] r87
  • [x] ...
Peramban
  • [ ] Mereka semua
  • [x] Chrome
  • [x] Firefox
  • [ ] Internet Explorer
OS
  • [ ] Mereka semua
  • [x] Jendela
  • [ ] macOS
  • [ ] Linux
  • [ ] Android
  • [ ] iOS
Persyaratan Perangkat Keras (kartu grafis, Perangkat VR, ...)

Tidak tahu apakah ini khusus perangkat keras tetapi sepertinya tidak mungkin. Saya menggunakan GeForce GTX950 di Windows 10.

Question

Semua 3 komentar

PointsMaterial.size memiliki satuan piksel -- bukan satuan dunia. Anda harus menyesuaikan ukurannya sendiri.

Posting terkait ini mungkin informatif: https://github.com/mrdoob/three.js/issues/10385#issuecomment -267789138.

Hati-hati bahwa gl_PointSize mungkin terbatas, sehingga ukuran yang Anda minta mungkin tidak sesuai dengan ukuran yang Anda dapatkan.

@WestLangley. Jadi saya perlu mengubah properti ukuran dari PointsMaterial ketika saya mengubah FOV?

Saya memang menemukan posting itu sebelum bertanya tetapi saya tidak cukup mengikuti mengapa itu bekerja seperti itu. Saya mengerti bahwa ukuran dalam piksel tetapi redaman sudah membuatnya tidak berhubungan dengan piksel perangkat dan proses itu pasti harus berhubungan dengan perspektif yang harus berhubungan dengan FOV dalam beberapa hal?

Namun, itu hanya menjelaskan kurangnya pemahaman saya sendiri. Saya sangat senang dengan solusi yang Anda berikan. Terima kasih.

Saya berharap PointsMaterial.size akan tetap dalam satuan piksel, jadi untuk referensi, saya akan memposting solusi ini di sini.

Berdasarkan jawaban stackoverflow ini , Anda dapat menskalakan poin Anda menggunakan pola berikut, yang seharusnya berfungsi untuk nilai wajar camera.fov .

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

RicoLiu picture RicoLiu  ·  100Komentar

Mugen87 picture Mugen87  ·  68Komentar

qornflex picture qornflex  ·  113Komentar

arctwelve picture arctwelve  ·  92Komentar

mrdoob picture mrdoob  ·  84Komentar