Wednesday, December 12, 2007

Mi carro con PovRay

Mi carro con PovRay
Dibujado de un carro en OpenGL utilizando ????

Jose Angel Espinoza Portillo
Graficacion • 14 Diciembre 2007



Que es Pov-Ray?
Pov-Ray es una herramienta que sirve para generar ambientes en 3D, basada la técnica de trazo de rayo. La cual consiste en dividir el campo de visión en una maya de pixeles y evaluar simular un rayo que pasa por cada pixel y evalúa el objeto que choca y el rebote de la luz desde todos los objetos y las fuentes de luz en el. y así sucesivamente con cada pixel, un ejemplo de esta técnica se puede ver en en la siguiente figura.

Implementación
Como implementar y que pasos seguir para el dibujado.

Base
De manera similar que en Open GL se programan muchas cosas dentro del código, el primer paso antes de empezar a implementar el carro es especificar las características básicas las cuales se especifican a continuación:




#include "colors.inc"
#include "shapes.inc"
#include "textures.inc"

camera {
location <2,5,>
look_at <0,>
}

background { color SkyBlue }
light_source { <20,> color rgb<1,> }


Esto posesionara la cámara en el punto <15,> mirando hacia <0,>, define el fondo en color azul cielo y posiciona una fuente de luz blanca en las coordenadas <20,>

Plano
Ahora se procede a agregar el siguiente código para integrar un plano infinito dentro de la vista:




plane { y, 1
pigment { checker Green, White }
finish { ambient .3 diffuse .7 }
}

El valor de pigment le dice que va a ser una maya de cuadros a continuación de los colores de los cuadros.






Cielo
Para simular el cielo, se agrega una esfera, la cual es magnificada para abarcar el espacio del cielo. Esta esfera es creada de la siguiente manera:

#declare Sky = sky_sphere {
pigment {
gradient y
color_map {
[0.75 color CornflowerBlue]
[1.00 color MidnightBlue]
}
scale 2
translate <-1, -1, -1>
}
pigment {
bozo
turbulence 0.6
octaves 7
omega .49876
lambda 2.5432
color_map {
[0.0 color rgbf<.75, .75, .75, 0.1>]
[0.4 color rgbf<.9, .9, .9, .9>]
[0.7 color rgbf<1,>]
}
scale 6/10
scale <1,>
}
pigment {
bozo
turbulence 0.6
octaves 8
omega .5123
lambda 2.56578
color_map {
[0.0 color rgbf<.375, .375, .375, 0.2>]
[0.4 color rgbf<.45, .45, .45, .9>]
[0.6 color rgbf<0.5,>]
}
scale 6/10
scale <1,>
}
}
sky_sphere { Sky }



El carrito
Los colores
Para hacer el carro primero se especificaron las 6 texturas del objeto pertenecientes a cada lado del mismo especificandole un grado de refleccion y el material del mismo(metal) de la siguiente manera:

#declare TRed = texture {
pigment { color rgb<0.8,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}
#declare TGreen = texture {
pigment { color rgb<0.2,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}
#declare TBlue = texture {
pigment { color rgb<0.2,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}

#declare TWhite = texture {
pigment { color rgb<0.8,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}
#declare TViolet = texture {
pigment { color rgb<0.8,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}

#declare TPurple = texture {
pigment { color rgb<0.8,> }
finish {
reflection {0.5 metallic}
diffuse 0.4

brilliance 2
specular 1 roughness 0.01
metallic
}
}


La figura
Basado en la figura diseñada para el mismo proyecto en OpenGL se implemento un objeto mesh basado en mayas de triángulos especificando que textura tiene cada triángulo esto se dibuja de la siguiente manera:


mesh {

triangle {
<0,>, <5,>, <5,>
texture { TRed }
}
triangle {
<0,>, <5,>, <0,>
texture { TRed }
}
triangle {
<1.25,>, <3.75,>, <3.75,>
texture { TRed }
}
triangle {
<1.25,>, <3.75,>, <1.25,>
texture { TRed }
}

triangle {
<0,>, <5,>, <5,>
texture { TGreen }
}
triangle {
<0,>, <5,>, <0,>
texture { TGreen }
}

triangle {
<0,>, <0,>, <0,>
texture { TWhite }
}
triangle {
<0,>, <0,>, <0,>
texture { TWhite }
}
triangle {
<1.25,>, <1,>, <1,>
texture { TWhite }
}
triangle {
<1.25,>, <1,>, <1.25,>
texture { TWhite }
}

triangle {
<0,>, <5,>, <5,>
texture { TViolet }
}
triangle {
<0,>, <5,> <0,>
texture { TViolet }
}
triangle {
<1,>, <4,>, <3.75,>
texture { TViolet }
}
triangle {
<1,>, <3.75,>, <1.25,>
texture { TViolet }
}

triangle {
<5,>, <5,>, <5,>
texture { TBlue }
}
triangle {
<5,>, <5,>, <5,>
texture { TBlue }
}
triangle {
<4,>, <4,>, <3.75,>
texture { TBlue }
}
triangle {
<4,>, <3.75,>, <3.75,>
texture { TBlue }
}

triangle {
<5,>, <0,>, <0,>
texture { TPurple }
}
triangle {
<5,>, <0,>, <5,>
texture { TPurple }
}
triangle {
<3.75,>, <1.25,>, <1,>
texture { TPurple }
}
triangle {
<3.75,>, <1,>, <4,>
texture { TPurple }
}

rotate x*-90
}

Cámara
Para efectos de presentación se moverá la cámara a otro punto para poder notar mejor la sombra y el efecto de reflejo de el piso en el objeto, reemplazando la cámara por lo siguiente.


camera {
location <15,>
look_at <0,>
}

Labels: ,

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home