Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Texturizar Polígonos En 3d

Iniciado por Ruben3D, 16 de Diciembre de 2003, 10:16:38 AM

« anterior - próximo »

Ruben3D

 Hola a todos.

Hace tiempo hice un visor de modelos en 3d por software que pintaba objetos sólidos. No conseguí averiguar cómo representar los objetos texturizados  (nooo). Me gustaría saber cómo se puede representar un objeto con textura en vez de un color sólido usando coordenadas u,v en cada vértice para la textura. Estuve buscando y no encontré nada claro (aunque leí que había que hacer una transformación del espacio del objeto al espacio de la textura o algo así  :huh:). Estaría muy agradecido si alguien me pudiera explicar de manera general (sin centrarse en ningún lenguaje de programación en particular) cómo hacerlo, o darme algún link en donde viniera explicado.

Muchas gracias a todos.

cemar

 Holaaaa.
Todavía ando un poco verde de conocimientos en este mundo de la programación 3D, pero creo que no me equivoco en lo siguiente ( y si me equivoco que me avise alguien ).
Tienes tres formas para representar un objeto con texturas.

1. La primera es hacerlo a mano. Es decir, para cada vértice del póligono, junto con sus coordenadas X,Y y Z, tienes que especificar las coordenadas u y v de la textura. Tienes que saber que las coordenadas u y v se mueven en un rango entre 0 y 1, siendo las coordenadas por ejemplo para los cuatro puntos de una textura cuadrada las siguientes (u,v):
(0,0)          (1,0)


(0,1)          (1,1)
Si quisieras, como prueba, podrías mostrar esta textura en un cuadrado formado por dos triangulos, simplemente tendrías que relacionar cada vertice del cuadrado con el correspondiente de la textura.
Pero este método sólo se puede utilizar para representar un objeto sencillo y con pocos polígonos. Sería impensable meter a mano las coordenadas de las texturas necesarias para dibujar una figura humana.

2. La segunda sería crear algún algoritmo para hallar las coordenadas de los vertices. Pero esto solo se podría utilizar con objetos que se comportan todo el rato de la misma manera, una esfera, una pared, suelo, etc

3. Y por último, la única opción cuando hablamos de objetos serios (a no ser que seas un poco masoca), es diseñar el objeto que se quiere utilizar, en algún programa de diseño 3D, como por ejemplo, 3D Studio o MilkShape. Entonces las coordenadas para las texturas las pondrá automáticamente el programa. Después lo que tendrás que hacer, es estudiar la manera en la que el programa guarda los modelos en archivo, para poder cargarlos y utilizarlos en tu programa. O también puedes transformar el modelo creado, mediante alguna herramienta, a otro tipo de archivo que si conozcas mejor, como por ejemplo el archivo .X, para el caso de DirectX, y utilizar a continuación la función de DirectX (algo parecido a loadmeshfromfile) que directamente te carga el modelo en memoria y te lo deja preparado para dibujar.

Bueno, espero haberte solucionado un poco el problema.
Un saludo.

Zaelsius

 Puedes acercarte a tu biblioteca local y buscar algun libro de programación gráfica. Aunque sea muy antiguo(sólo rendering por software con c/basic y cosas asi), seguro que tocan el tema y muestran código de ejemplo.  :)  

Ruben3D

 Hola. Gracias por las respuestas.

Ya estuve buscando libros de tratamiento de imágenes y programación gráfica en la biblioteca de mi facultad. Encontré información de todo tipo, ya fuera 2d (alisación, algoritmo bresenham, etc) o 3d (rotaciones, traslaciones, cálculo de visibilidad). Sin embargo, todos mencionaban la texturización de objetos y ponían el típico ejemplo (las tres fotos donde aparece el objeto alámbrico, sólido y con textura), pero ninguno llegaba a explicar explícitamente cómo se hacía, quedandose en representación de objetos sólidos sin texturas.

Espero que alguien me pueda iluminar.

Un saludo.

Kriller

 Hola. El problema que tienes que resolver es más general que poner textura a un triángulo, te sirve también para colorearlo, iluminarlo, etc. La idea es recorrer cada "scanline" (= línea horizontal) del triángulo interpolando para cada píxel algún valor que te interese; en tu caso, las coordenadas de la textura u,v. Tienes que interpolar porque sólo conoces los valores inicial y final de u,v pero no los intermedios (es una interpolación lineal, muy sencilla). Por tanto para cada píxel obtienes un par u,v determinado, que simplemente escalándolos por la anchura y la altura respectivamente de tu textura obtienes qué punto de la textura corresponde al píxel del triángulo.

A este problema se le suele llamar "triangle rasterization", "polygon rasterization" o algo similar. Si buscas en la red seguramente encuentres algo. Por cierto, en el libro "Tricks of the 3D game programming gurus" de André LaMothe viene explicado.

Ruben3D

 Muchas gracias. Me pondré a buscar sobre los temas que me has indicado (y si encuentro el libro, mejor).

Un saludo.

HgH

 Recordando mis inicios y lo que estuve leyendo, había una serie de textos para principiantes bastante famosos: la PCGPE (PC Game Programming Encyclopedia): Ahí tienes un artículo sobre texture mapping por soft:
http://brand107.home.comcast.net/pc-gpe/texture.txt

Es un texturado bastante básico, sin corrección de perespectiva ni ningun tipo de filtros, pero para ver el concepto, sobra.
Espero que te sirva


gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.