2011-08-05 17 views
9

Si entendí correctamente la documentación de Mathematica (tampoco he encontrado ejemplos) Graphics3D no produce sombras de objetos 3D, aunque Graphics3D tiene una opción Lighting->.Sombras en mathematica Graphics3D

Pregunta: ¿Alguna vez ha intentado producir objetos Mathematica 3D con sombras? Si es así, ¿has resuelto esto en Mathematica? ¿O ha exportado los gráficos a otros visores 3D (gráfico de escenas) como, por ejemplo, J-Reality?

+1

Hasta donde yo sé, la solución más fácil es usar algún programa externo de raytracer y exportar su geometría. Hice esto usando Kerkythea (fácil de aprender/usar para cosas simples, freeware). – Szabolcs

+0

Se ve muy bien. Actualmente estoy desarrollando una arquitectura de escenario/actor/director, donde actualmente el escenario es 'Graphics3D'. Lo que supones funciona solo para una escena. Sin embargo, vale la pena intentarlo, gracias. –

Respuesta

14

El modelo de sombreado used by MMA determina las intensidades de píxeles basándose en una relación simple entre la orientación de la superficie local, dirección (es) de la fuente de luz, dirección de la cámara y propiedades difusas y especulares de la superficie. No se tiene en cuenta ningún otro aspecto de la geometría, lo que significa que los objetos no influyen en los valores de píxel de otros objetos, incluso si se encuentran entre el objeto y la fuente de luz.

Esto significa que el modelo no genera sombras. No puede.

Puede simular las sombras usted mismo al proyectar los polígonos de su objeto en el plano de tierra o en los planos de las paredes, según corresponda. Eso no debería ser demasiado difícil, pero las sombras en superficies no planas serán bastante difíciles.

Ejemplo:

polys = (PolyhedronData["GreatRhombicTriacontahedron", "Faces"] // 
     Normal // N) /. {x_, y_, z_}?VectorQ -> {x, y, z + 6}; 
    (* raise it slightly above ground plane*) 

shadow = polys /. {x_, y_, z_}?VectorQ -> {x - z, y, 0}; 
     (* projection from a directional light source at 45 deg elevation *) 

Graphics3D[{polys, EdgeForm[], FaceForm[[email protected]], shadow}, 
Lighting -> {{"Directional", White, {{1, 0, 1}, {0, 0, 0}}}}, 
Boxed -> False] 

enter image description here

Por supuesto, es necesario asegurarse de que las fuentes de luz (punto, punto, dirección ...) y su proyección de sombras son consistentes.

+0

¡Se ve bien! Pero, hmmm ... agregar sombras = va a ser difícil. En mi (próxima) aplicación de todos modos. - Gracias por responder. –