Three.js: ¿Utiliza Vertex Shader personalizado con MeshLambertMaterial?

Creado en 2 dic. 2011  ·  9Comentarios  ·  Fuente: mrdoob/three.js

Hola, estoy tratando de hacer algún tipo de sombreador personalizado, pero solo quiero modificar la posición del vértice y no el material. MeshLambert ya tiene luz, textura y todo lo que necesito, pero modifico el vértice, le doy un aspecto orgánico al objeto.

¿Alguien me puede dar una dirección?

Gracias !!

Question

Comentario más útil

@maurrubio terminaste tu proyecto: ojos:

Todos 9 comentarios

¿Alguien?

Lo más fácil sería crear ShaderMaterial que serían como lambert, simplemente agregando su código personalizado al sombreador de vértices.

Internamente, los materiales estándar usan exactamente la misma maquinaria que ShaderMaterial, por lo que solo necesitaría copiar y pegar el código desde aquí:

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

Hola @alteredq, gracias por responder.

¿A esto te has referido?
http://www.interactiveuniverse.net/Shaders.js

Estoy creando objetos a partir de las matrices que se proporcionan en el sombreador lambert y pasándolos a una nueva instancia de ShaderMaterial.

Al hacer eso, obtengo un material negro sin que me afecten las luces puntuales.

Casi ahí ;)

Para que las características de los materiales estándar funcionen en ShaderMaterial , también necesita establecer indicadores de material (luces, niebla, etc.):

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

Funcionó !!! Muchas gracias, cuando termine mi trabajo lo compartiré con ustedes.

Solo una última pregunta @alteredq, el propósito de hacer eso también fue usar un mapa de entorno en el objeto para poder darle una textura. ¿Cómo se supone que debo implementar este tipo de característica que contiene MeshLambertMaterial?

Hmmm. Creo que debería ser suficiente establecer el uniforme adecuado ( envMap ) y también necesitaría quedarse en algún lugar en la parte superior de los sombreadores de vértices y fragmentos #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;",

...

Solo tenga en cuenta que si modifica las posiciones de los vértices en un sombreador, las normales que provienen de la geometría estática ya no serán correctas y todo seguirá sombreado de acuerdo con las posiciones anteriores.

Funcionó: D

Ustedes son realmente increíbles, y sé que a los desarrolladores les encanta ver lo que otras personas hacen con sus herramientas, espero poder terminar mi proyecto pronto (es mi portafolio personal y estoy usando websockets para conectar usuarios en una interfaz espacial con esferas (cada uno es un proyecto diferente) y los usuarios navegan por el espacio y cada usuario es un punto de luz dinámico diferente que se mueve a través de mis obras.

El motor es bastante funcional ahora necesito trabajar más en el diseño de las cosas.

¡Gracias de nuevo!

@maurrubio terminaste tu proyecto: ojos:

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

scrubs picture scrubs  ·  3Comentarios

akshaysrin picture akshaysrin  ·  3Comentarios

Horray picture Horray  ·  3Comentarios

clawconduce picture clawconduce  ·  3Comentarios

ghost picture ghost  ·  3Comentarios