Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Añadir texturas diffuse, normal y specular a un objeto tridimensional en GLScene (https://www.clubdelphi.com/foros/showthread.php?t=77408)

noob 23-01-2012 11:45:26

Añadir texturas diffuse, normal y specular a un objeto tridimensional en GLScene
 
Hola,

Quiero añadir texturas diffuse, normal y specular a un objeto tridimensional en GLScene con Delphi 6.

Tengo las tres texturas en tres archivos.

Diffuse_Map: Obj_Colors.jpg
Normal_Map: Obj_Normal.jpg
Specular_Map: Obj_Spec.jpg

Código:

Bola.Material.Texture.Image.LoadFromFile('Obj_Colors.jpg'); // Añado la textura diffuse
Bola.Material.Texture.Disabled := False;

Pero no se cómo cargar las texturas normal y specular. ¿Alguna idea?

Hasta luego.

Ñuño Martínez 23-01-2012 12:48:11

Curiosamente llevo una semana o así repasando el Red Book para re-aprender OpenGL, y no veo en él nada sobre los tipos de textura que dices. Diffuse y specular son dos cualidades que tienen la iluminación y los materiales (esto es, glLight* y glMaterial*), por otro lado las normales son los vectores perpendiculares a un plano, que en gráficos se utilizan para calcular cómo se refleja la luz. Pero ya te digo que estoy re-aprendiendo y puede que lo haya olvidado (ahora estoy con las mezclas [blending], no he llegado a las texturas todavía, aunque ya he repasado materiales e iluminación).

Quizá si nos explicas cuál es el efecto que pretendes conseguir te podamos ayudar más.

noob 23-01-2012 13:01:18

Te cuento un poco más como lo veo yo:

Diffuse_Map: Es el mapa o textura que da el color al objeto, los juegos más simples que se pueden correr en prácticamente cualquier maquina tienen únicamente este tipo de textura en sus modelos.

Normal_Map: Es la textura que puede hacer que un objeto con pocos polígonos luzca como si tuviese millones de vértices, este mapa es el que da los increíbles detalles de los juegos next-gen (Por ejemplo en las arrugas de la cara de un personaje).

Specular_Map: Es la textura que le dice al objeto como debe “brillar” o reflejar la luz , en donde debe hacerlo y con que intencidad, por ejemplo un objeto que tiene plástico y metal no brilla de la misma manera en los dos materiales.

Te adjunto unas capturas:

Objeto con textura diffuse:



Objeto con textura normal:



Objeto con textura especular:



Lo que yo quiero es cargar las tres a la vez para lograr el efecto correcto.

Saludos.

Lepe 24-01-2012 12:14:24

No sé en GLScene...

En blender, tú tienes varias texturas como dice noob y las añades a texturas, después en el material es donde se especifica si modificará:
- el color
- las normales
- especularidad (brillo o como quieras llamarlo).

Además tendrás un shader activo que es el responsable de analizar los vértices (en caso de que la tarjeta trabaje así), o bien por píxeles, para aplicar el brillo y normal a cada vértice.

En el tema de Shaders hay muchas y de muchos tipos, bump shader, normal shader, normal + bump shader y el llamado monster shader que es una de las mejores ya que integra las tres cosas que estáis pidiendo, color, normales y especularidad. Es ésta shader la que necesita recibir las 3 texturas ya comentadas por noob.

Mirando, en sourceforge tienes el foro de shaders por si quieres investigar: http://sourceforge.net/apps/phpbb/gl...wforum.php?f=7


Ah, por cierto, para tener un diffuse más espectacular, detallado y realista, te aconsejo aplicarle un Ambient occlussion y después en Gimp multiplicar la capa diffuse con ésta nueva creado.

Saludetes

Ñuño Martínez 24-01-2012 12:35:09

¡Ahhhh...! Vale, ahora ya está más claro.

Lo que tú llamas "textura normal" es, en realidad, mapeado de bultos o bump mapping, y hay varias técnicas para conseguirlo (el bump mapping propiamente dicho, paralax mapping, sub-división o tesselation, los famosos pixel shader... ). Lo que no sé es si GLScene tendrá alguna propiedad o método para hacerlo directamente (he intentado consultar en su documentación en línea pero me sale un error 503), pero si lo hace casi seguro que es el método más simple (bump mapping).

En cuanto al otro, supongo que también puede conseguirse mediante pixel shader. También se me ocurre una forma de hacerlo dibujando, primero, con un material donde se establezca el valor specular que se quiera y luego dibujar encima de nuevo con otro material sin specular pero aplicando la textura como una máscara usando el mapa de iluminación como canal alpha.

Pero ya digo, los de GLScene tienen la documentación on-line caída así que no tengo ni idea de si sus modelos poseen alguna propiedad o método que permita hacerlo. [Actualizo] Consultando a Duckduckgo, me ha salido que TGlLibMaterial puede usarse para describir bump mappings. Tira del hilo, a ver qué sale.


La franja horaria es GMT +2. Ahora son las 07:26:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi