tutorial texture texturas sirve que para multiples gltexcoord2f example como cargar model textures webgl blender

model - texturas - texture in opengl c++



¿Cómo le digo a frag-shader qué textura(de muchas texturas cargadas previamente) usar por vértice de un archivo 3D generado externamente? (1)

Estoy tratando de encontrar la mejor manera de cargar un modelo 3D texturizado en mi aplicación webGL pero estoy teniendo problemas con eso. Mis modelos 3D tienen más de 1 textura y no sé cómo decirle al sombreador qué textura usar por vértice, ya que esta información no parece estar incluida en los archivos 3D que examiné hasta ahora. Daré un ejemplo: he modelado una silla de madera con un asiento / cojín de cuero en Blender. ¿Qué formato debo exportar a la silla para que sea fácil y eficiente de extraer: - las posiciones de vértice; - la información de rostros / índice que define qué vértice pertenece a cada cara. - los coords UV; - las normales - el nombre / ubicación de los archivos de texturas. - qué textura usar por vértice.

Supongo que una vez que tenga el par vertex-textureID en mi JS, podría pasarlo al sombreador como atributo (basado en cada vértice), haciéndole saber qué textura usar para ese vértice específico (usando drawElements para dibujarlo todo de una vez) ) pero no sé cómo conseguir esa información para empezar.

Todos los artículos, tutoriales y tutoriales que encontré en la web hasta ahora cargan modelos con 1 textura solamente. También noté que three.js parece haber resuelto este problema pero quería que funcione directamente en webGL antes de pasar a una de estas bibliotecas (como three.js, glge, scene.sj, spiderGL, etc.) .

Cualquier ayuda, enlaces o sugerencias serán muy apreciados.


Parece que tienes dos problemas aquí, uno de los cuales podemos ayudar y otro que requiere más información.

Por un lado, la mayoría de las veces no tendrá información de textura enumerada por vértice, ya que es más natural enumerarla por cara. Todavía tendrá que pasarlo a un sombreado por vértice, por lo que es probable que haya un poco de procesamiento previo de su parte, pero no debería ser tan malo. Sin embargo, la forma de obtener esa información de su archivo depende completamente del formato que esté utilizando para ello, que no ha especificado.

En cuanto a la representación de múltiples texturas con un archivo, hay algunas maneras de hacerlo. Puedes vincular todas las texturas que necesites a una matriz de muestras en el sombreado y luego indexarlas con un atributo de vértice, al que indicaste anteriormente. Esa es una buena manera de reducir el número de llamadas al sorteo, pero es una optimización extrema y dudo que se beneficie mucho de ella.

Una práctica más común es hacer un único llamado para cada material (material == textura en su caso). Por lo tanto, si tiene una silla con un marco de madera y un cojín de cuero tal como lo describió, uniría la textura de madera, renderizaría todo el marco y luego uniría la textura del cojín del asiento y el cojín por separado. Esto le da la oportunidad más adelante en la línea de utilizar diferentes sombreadores para cada tipo de material, para que pueda aumentar la especularidad en las partes de cuero mientras deja la madera agradable y mate. Puede sonar caro hacer varias llamadas por objeto, pero en la mayoría de los casos no es un gran problema a menos que se trate de escenas realmente complejas.