Cómo obtener las coordenadas mundiales de un objeto usando un sombreador
En este punto, la transformación final se ve así:
eyePos=viewMatrix * modelMatrix * modelVertex
En OpenGL, viewMatrix y modelMatrix están fusionados, porque OpenGL no tiene parámetros de cámara. , por lo que OpenGL no sabe qué es viewMatrix. viewMatrix está definido por el usuario, por lo que si puede obtener viewMatrix y su matriz inversa, puede obtener worldPos:
worldPos=viewMatrixInv * viewMatrix * modelMatrix * modelVertex<
OpenGL tradicional los programas deben calcular viewMatrixInv usted mismo, pero afortunadamente OSG Camera proporciona el método getViewMatrixInverse (), a través del cual podemos obtener fácilmente viewMatrixInv, luego pasarlo al sombreador de vértices (uniforme es suficiente) y calcularlo directamente.
Recuerda que necesitas actualizar este viewMatrixInv en cada fotograma, solo un updateCallBack.
Bien, mire algunas imágenes. Creé dos cuadros en 3DSMAX para facilitar la visualización, limité los valores de los vértices del modelo a 0-1 y luego los exporté usando osgExp. También desmarque Aplanar transformación estática, que no convierte los puntos fijos del modelo en vértices del sistema de coordenadas mundiales.
En el código fuente, puede cambiar el valor de gl_FragColor= para mostrar el valor del sistema de coordenadas correspondiente.
El resultado final del sistema de coordenadas mundial se mostrará como una transformación de color continua.