2011-05-30 16 views
5

Tengo activos de modelo que no están texturizados y estoy cansado de convertirlos en negro sin iluminación. Esto es porque si la textura id 0 está vinculada y le pregunto a la muestra, me dice que es negra. Posteriormente, se produce una iluminación de 0 * que hace que todo el objeto sea negro sin iluminación. Lo ideal es que me guste el color, el material y la iluminación (lo que sucederá si no lo multiplicamos por 0)¿Cómo puedo saber si la textura activa es la ID de textura 0 en GLSL?

He considerado usar una bandera uniform y alternarla por objeto, pero esperaba un nivel superior más simple forma de ejecución si necesitamos activos parcialmente texturizados más tarde.

También he pensado enlazar una textura blanca empujando un píxel blanco y configurándolo para envolver, por ejemplo, pero esto parece ser "Chi Ting".

Nota. Una textura válida puede volverse negra, por lo que no podemos ignorar las lecturas de textura negra. bueno, podríamos, pero no se vería bien. Actualmente no estamos utilizando ningún objeto de búfer, solo el método obsoleto glBegin()glEnd() con listas de visualización.

Cualquier otra idea sería apreciada.

+3

¿Qué pasa con chi ting, esto no es física, es gráficos de computadora? Usar una textura blanca 1x1 es la forma más fácil. –

Respuesta

6

Use textura blanca vacía. Va a ser tan rápido como usar uniformes y no tiene que manejar casos adicionales.

Si realmente te preocupa la velocidad, combina tus texturas en una, dejando una pequeña área blanca para las partes sin textura. Cambiar texCoords es mucho más rápido que cambiar texturas o uniformes.

2

En mis propios intentos de aprender OpenGL, fui con un uniforme booleano, como sugirió.

Tiene sentido que usar una textura o tener un color fijo sea una propiedad de cada objeto modelo; por lo tanto, establecer esta propiedad en el sombreador para cada objeto a través de un uniforme parece lógico, ¡no hay 'trampas' involucradas!

Si te hace sentir mejor, puedes tener la textura (si existe) como propiedad de tu objeto y establecer el uniforme en función de su presencia o ausencia, en lugar de duplicar información al tener una propiedad de textura y una textura/bandera no con textura.