Three.js: bidang klip yang ditentukan pengguna

Dibuat pada 13 Okt 2011  ·  5Komentar  ·  Sumber: mrdoob/three.js

Saya ingin menggunakan pesawat kliping yang ditentukan pengguna.
Di openGL saya akan menggunakan:

glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);

Bagaimana saya bisa melakukan hal yang sama dengan webGL?

Question

Komentar yang paling membantu

Hai banyak terima kasih guys !!

Saran Anda membuat saya mempertimbangkan kembali masalahnya, dan saya perhatikan bahwa tidak ada jeda 'umum', tetapi hanya berkedip ketika bidang klip dekat berubah (posisi cermin dibandingkan dengan posisi kamera cermin).

Jadi, Anda hampir sampai di sana @WestLangley : ini adalah matriks kamera cermin yang perlu Anda perbarui, bukan kamera itu sendiri.

Hasil: tidak ada lagi 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Mungkin kita bisa mengabstraksi ini menjadi objeknya sendiri.

Ya, saya sudah memikirkannya. Akan sangat bagus untuk memiliki new THREE.mirror() yang menangani semuanya. Saya akan mencoba membuat kode sesuatu ...

Semua 5 komentar

Anda seharusnya bisa mendapatkan konteks WebGL dengan renderer.context .
Dari sana terserah Anda dan spesifikasi WebGL :)

Saya baru-baru ini mengalami masalah yang sama saat menerapkan permukaan datar reflektif (alias 'cermin': smile :) ke three.js
Sejauh yang saya tahu, Anda tidak dapat memiliki clipping planes yang ditentukan pengguna dengan WebGL, setidaknya tidak dengan cara openGL 'sederhana' yang Anda jelaskan.
Caranya adalah dengan menggunakan metode "Oblique View Frustum" yang dijelaskan dalam tulisan ini: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
Tujuan dari metode ini adalah untuk mengganti bidang klip dekat dari frustum kamera cermin Anda dengan bidang yang ditentukan oleh permukaan reflektif.
Bahkan ada beberapa kode sumber yang disediakan (dalam C ++ sekalipun): http://www.terathon.com/code/oblique.html

Saya berhasil mem-porting metode itu di three.js dan berikut adalah contoh adegan untuk menunjukkan ini secara langsung: http://jsfiddle.net/slayvin/PT32b/

Satu-satunya masalah yang tersisa adalah renderTarget di-render di belakang, dan saya tidak tahu mengapa! Hal ini menyebabkan beberapa kedipan saat kamera bergerak terlalu cepat dan saat cermin melewati objek lain.

ada ide untuk memperbaiki ini? Apakah saya perlu menerapkan semacam metode multi-buffering, atau hanya karena saya tidak memperbarui matriks kamera setelah memodifikasi frustum? Jika ya, bagaimana saya bisa melakukannya?

Mmmhh ... Saya sudah mencoba menyetel scene.autoUpdate menjadi false dan menelepon scene.updateMatrixWorld() dengan tangan untuk memastikan semua perender memiliki hal yang sama tetapi tampaknya tidak menyelesaikan apa pun ... Tidak memanggil mirror.updateMatrix() sebelum mengekstrak rotasi dari sana ...

Cukup keren! Mungkin kita bisa mengabstraksi ini menjadi objeknya sendiri.

Manis.

Saya juga mencoba memastikan bahwa matriks yang relevan sudah terkini. Jika Anda khawatir tentang kelambatan, Anda harus memperbaruinya sebelum Anda menggunakannya. Sayangnya, sepertinya tidak masalah saat memperbesar dengan cepat ...

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

Hai banyak terima kasih guys !!

Saran Anda membuat saya mempertimbangkan kembali masalahnya, dan saya perhatikan bahwa tidak ada jeda 'umum', tetapi hanya berkedip ketika bidang klip dekat berubah (posisi cermin dibandingkan dengan posisi kamera cermin).

Jadi, Anda hampir sampai di sana @WestLangley : ini adalah matriks kamera cermin yang perlu Anda perbarui, bukan kamera itu sendiri.

Hasil: tidak ada lagi 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Mungkin kita bisa mengabstraksi ini menjadi objeknya sendiri.

Ya, saya sudah memikirkannya. Akan sangat bagus untuk memiliki new THREE.mirror() yang menangani semuanya. Saya akan mencoba membuat kode sesuatu ...

Apakah halaman ini membantu?
0 / 5 - 0 peringkat