En la entrada anterior se quedó pendiente un problema al pintar los polígonos del modelo que ya había surgido en la representación con color plano pero que al aplicarle la textura se hace mucho más evidente. Cuando se gira la figura en la pantalla alrededor de cualquier eje en algunos momentos hay polígonos que no se pintan, dejando entonces ver los que hay detrás de ellos, cosa que no debería ser así.
He estado toda la tarde mirando y probando funciones de OpenGL-ES que controlan el culling y el depth-buffer. Lo primero sirve para evitar que se calculen los polígonos que no se van a ver en la pantalla (por ejemplo, los que quedan en la parte de atras de la cabeza) para que el proceso de representación sea más rápido. Pensé que quizás en alguno de ellos se calculaba mal la normal y por eso unas veces se pintaban y otras no, pero no era nada de eso. El depth-buffer es la representación interna que utiliza la librería para saber que objetos están delante de otros y cuales hay que pintar o cuales no. Tampoco solucioné nada mirándolo por ahí.
Casi al final se me ocurrió otra cosa. Observé que eso solo ocurre en las zonas en la que hay varias 'capas' de objetos, o que los polígonos están muy juntos, como por ejemplo: La boca y los dientes que están dentro; o los globos oculares y las cuencas que los rodean. Seguramente al estar en esos sitios los puntos muy juntos si los cálculos no son suficientemente precisos (y podrían no serlo, algunos dispositivos usan aritmética de coma fija en lugar de flotante) puede dar como resultado que los que están más atrás se solapen con los de más adelante.
Para solucionarlo, se podría multiplicar las coordenadas de los puntos por un factor fijo y de esa forma estarían más alejados unos de otros. Eso se puede hacer de forma muy sencilla con la transformación de cambio de escala glScalef y valores apropiados. Hice una prueba rápida y, efectivamente el efecto desapareció casi completamente, aunque con el lógico resultado de que el modelo no cabía en la pantalla. Es necesario hacer algo para que entre todo en el campo visual, como alejar el punto donde se sitúa la cámara, o similar.

No hay comentarios:
Publicar un comentario