Three.js: استخدام Vertex Shader المخصص مع MeshLambertMaterial؟

تم إنشاؤها على ٢ ديسمبر ٢٠١١  ·  9تعليقات  ·  مصدر: mrdoob/three.js

مرحبًا ، أحاول عمل نوع من التظليل المخصص ، لكني أريد فقط تعديل موضع الرأس وليس المادة. يحتوي MeshLambert بالفعل على الضوء والملمس وكل ما أحتاجه ، لكنني أقوم بتعديل الرأس لإعطاء مظهر عضوي يقوم بالكائن.

يمكن لأي شخص أن يعطيني التوجيه؟

شكر !!

Question

التعليق الأكثر فائدة

maurrubio هل أنهيت مشروعك: عيون:

ال 9 كومينتر

شخصا ما؟

الأسهل هو إنشاء ShaderMaterial مخصص مثل lambert ، فقط إضافة كودك المخصص إلى تظليل قمة الرأس.

داخليًا ، تستخدم المواد القياسية نفس الآلات تمامًا مثل ShaderMaterial ، لذلك ستحتاج فقط إلى نسخ ولصق الكود من هنا:

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

مرحبا alteredq شكرا على الرد.

هذا ما حكمت عليه؟
http://www.interactiveuniverse.net/Shaders.js

أقوم بإنشاء كائنات من المصفوفات المتوفرة في تظليل لامبرت وأمررها إلى مثيل ShaderMaterial الجديد.

عند القيام بذلك ، أحصل على مادة سوداء دون أن أتأثر بأضواء النقطة.

اوشكت على الوصول ؛)

لكي تعمل الميزات من المواد القياسية في ShaderMaterial تحتاج أيضًا إلى تعيين أعلام المواد (أضواء ، ضباب ، إلخ):

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
    }); 

انها عملت !!! شكرا جزيلا لكم ، عندما أنتهي من عملي سوف أشارككم يا رفاق.

سؤال أخير واحد فقط alteredq كان الغرض من القيام بذلك هو أيضًا استخدام خريطة بيئة في الكائن حتى أتمكن من إعطائه مظهرًا. كيف أفترض تنفيذ هذا النوع من الميزات التي تحتوي عليها MeshLambertMaterial؟

هممم. أعتقد أنه يجب أن يكون كافيًا لضبط الزي الرسمي المناسب ( envMap ) وأيضًا ستحتاج إلى التمسك في مكان ما في أعلى كل من تظليل الرأس والجزء #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;",

...

فقط كن على دراية بأنه إذا قمت بتعديل مواضع الرأس في تظليل ، فلن تكون المعايير القادمة من الهندسة الثابتة صحيحة وسيظل كل شيء مظللًا وفقًا للمواضع القديمة.

عملت: د

أنتم رائعون حقًا ، وأنا أعلم أن المطورين يحبون رؤية ما يفعله الآخرون بأدواتهم ، وآمل أن أتمكن من إنهاء مشروعي قريبًا (إنه بورتفوليو الشخصي الخاص بي وأنا أستخدم مآخذ الويب لتوصيل المستخدمين في واجهة فضائية مع المجالات (كل منها عبارة عن مشروع مختلف) ويتنقل المستخدمون عبر المساحة وكل مستخدم هو نقطة ضوئية ديناميكية مختلفة تتحرك عبر أعمالي.

المحرك يعمل بشكل جيد الآن ولست بحاجة للعمل أكثر على تصميم الأشياء.

شكرا لك مرة أخرى!

maurrubio هل أنهيت مشروعك: عيون:

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات