No. En ningún momento deberías tener un matriz mundial explícita en tu sombreador.
Una explicación detallada de por qué aquí , pero la versión corta es realmente muy simple: nunca la necesita y puede matar su precisión de punto flotante.
Si su espacio mundial es demasiado grande, entonces una cámara que está lejos del origen puede causar problemas de precisión de coma flotante.
Todo el espacio mundial no es más que un intermediario entre el espacio modelo y el espacio de la cámara. Es un lugar donde puedes expresar la cámara y todos los demás objetos en el mismo espacio. Pero para todo lo que usa es para generar una matriz de mundo a cámara, que luego aplica a todas las matrices de modelo a mundo para crear matrices de modelo a cámara.
Puede lidiar con problemas de precisión en C ++ mediante el uso de dobles en lugar de flotantes para los cálculos matriciales. Puede convertirlos nuevamente en flotantes antes de cargarlos en el sombreador.
Entonces, ¿por qué necesitarías una transformación explícita del mundo-espacio en tu sombreador? En su código fuente, sí. ¿Pero en tu sombreador? ¿Qué harías con él que no puedes hacer con el espacio de la cámara?
La iluminación se puede hacer en el espacio de la cámara tan fácilmente como el espacio mundial; todo lo que tiene que hacer es transformar sus posiciones / direcciones de luz en el espacio de la cámara. Después de todo, el espacio de la cámara tiene la misma escala que el espacio mundial. Haces esta transformación una vez por cuadro por luz; apenas una carga de rendimiento incluso en la CPU.
Por lo tanto, no tiene ningún sentido exponer sus sombreadores a una transformación explícita del espacio mundial. Es solo un paso intermedio que se pliega en sus matrices.