Three.js: Menggunakan Vertex Shader khusus dengan MeshLambertMaterial?

Dibuat pada 2 Des 2011  ·  9Komentar  ·  Sumber: mrdoob/three.js

Hai, saya mencoba melakukan semacam shader kustom, tetapi saya hanya ingin mengubah posisi simpul dan bukan materialnya. MeshLambert sudah memiliki cahaya, tekstur dan semua yang saya butuhkan, tapi saya memodifikasi vertex untuk memberikan tampilan organik pada objek.

Seseorang bisa memberi saya arahan?

Terima kasih !!

Question

Komentar yang paling membantu

@maurrubio apakah Anda menyelesaikan proyek Anda: mata:

Semua 9 komentar

Some one?

Cara termudah adalah membuat kustom ShaderMaterial yang akan seperti lambert, cukup menambahkan kode kustom Anda ke vertex shader.

Secara internal, material standar menggunakan mesin yang sama persis dengan ShaderMaterial, jadi Anda hanya perlu menyalin dan menempelkan kode dari sini:

https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLShaders.js#L1187

Hai @alteredq, terima kasih telah menanggapi.

Ini adalah apa yang telah Anda rujuk?
http://www.interactiveuniverse.net/Shaders.js

Saya membuat objek dari array yang disediakan di lambert shader dan meneruskannya ke instance ShaderMaterial baru.

Melakukan itu saya hanya mendapatkan bahan hitam tanpa terpengaruh oleh lampu titik.

Hampir sampai ;)

Agar fitur dari bahan standar berfungsi di ShaderMaterial Anda juga perlu menyetel bendera bahan (lampu, kabut, dll):

https://github.com/mrdoob/three.js/blob/master/src/materials/ShaderMaterial.js#L40

shaderMaterial = new THREE.ShaderMaterial( {

    uniforms:       uniforms,
    vertexShader:   vertexShader,
    fragmentShader: fragmentShader,
    lights:         true
    }); 

Berhasil !!! Terima kasih banyak, setelah saya menyelesaikan pekerjaan saya, saya akan berbagi dengan kalian.

Hanya satu pertanyaan terakhir @alteredq tujuan melakukan itu juga menggunakan peta lingkungan di objek sehingga saya bisa memberikan tekstur. Bagaimana saya bisa mengimplementasikan jenis fitur yang dikandung MeshLambertMaterial?

Hmmm. Saya pikir itu harus cukup untuk mengatur seragam yang tepat ( envMap ) dan juga Anda harus menempel di suatu tempat di bagian atas shader simpul dan fragmen #define USE_ENVMAP .

uniforms[ "envMap" ].texture = myCubeTexture;
vertexShader= [

"#define USE_ENVMAP",

"varying vec3 vLightWeighting;",

THREE.ShaderChunk[ "map_pars_vertex" ],
THREE.ShaderChunk[ "lightmap_pars_vertex" ],

...
fragmentShader = [

"#define USE_ENVMAP",

"uniform float opacity;",

...

Perlu diketahui bahwa jika Anda mengubah posisi simpul dalam shader, normals yang berasal dari geometri statis tidak akan benar lagi dan semuanya akan tetap diarsir sesuai dengan posisi lama.

Berhasil: D

Kalian benar-benar luar biasa, dan saya tahu bahwa para pengembang suka melihat apa yang orang lain lakukan dengan alat mereka, saya harap saya dapat segera menyelesaikan proyek saya (Ini portofolio pribadi saya dan saya menggunakan soket web untuk menghubungkan pengguna dalam antarmuka luar angkasa dengan bola (masing-masing adalah proyek yang berbeda) dan pengguna menavigasi melalui ruang dan setiap pengguna adalah lampu titik dinamis berbeda yang bergerak melintasi karya saya.

Mesinnya cukup fungsional sekarang saya perlu bekerja lebih banyak dalam mendesain barang.

Terima kasih sekali lagi!

@maurrubio apakah Anda menyelesaikan proyek Anda: mata:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jack-jun picture jack-jun  ·  3Komentar

yqrashawn picture yqrashawn  ·  3Komentar

fuzihaofzh picture fuzihaofzh  ·  3Komentar

Horray picture Horray  ·  3Komentar

makc picture makc  ·  3Komentar