32 lines
980 B
Plaintext
32 lines
980 B
Plaintext
|
|
void setFlareBillboard(
|
||
|
|
inout mat4 _MODELVIEW_MATRIX, inout mat3 _MODELVIEW_NORMAL_MATRIX,
|
||
|
|
mat4 _VIEW_MATRIX, mat4 _MAIN_CAM_INV_VIEW_MATRIX, mat4 _MODEL_MATRIX,
|
||
|
|
vec3 scale, vec2 _screenOffsetScale
|
||
|
|
)
|
||
|
|
{
|
||
|
|
_MODELVIEW_MATRIX = _VIEW_MATRIX * mat4(
|
||
|
|
_MAIN_CAM_INV_VIEW_MATRIX[ 0 ],
|
||
|
|
_MAIN_CAM_INV_VIEW_MATRIX[ 1 ],
|
||
|
|
_MAIN_CAM_INV_VIEW_MATRIX[ 2 ],
|
||
|
|
_MODEL_MATRIX[ 3 ]
|
||
|
|
);
|
||
|
|
|
||
|
|
vec3 viewPosition = _MODELVIEW_MATRIX[ 3 ].xyz;
|
||
|
|
|
||
|
|
viewPosition.xy += viewPosition.xy * _screenOffsetScale;
|
||
|
|
|
||
|
|
_MODELVIEW_MATRIX[ 3 ].xyz = viewPosition;
|
||
|
|
|
||
|
|
float scaleX = length( _MODEL_MATRIX[ 0 ].xyz ) * scale.x;
|
||
|
|
float scaleY = length( _MODEL_MATRIX[ 1 ].xyz ) * scale.y;
|
||
|
|
float scaleZ = length( _MODEL_MATRIX[ 2 ].xyz ) * scale.z;
|
||
|
|
|
||
|
|
_MODELVIEW_MATRIX = _MODELVIEW_MATRIX * mat4(
|
||
|
|
vec4( scaleX, 0.0, 0.0, 0.0 ),
|
||
|
|
vec4( 0.0, scaleY, 0.0, 0.0 ),
|
||
|
|
vec4( 0.0, 0.0, scaleZ, 0.0 ),
|
||
|
|
vec4( 0.0, 0.0, 0.0, 1.0 )
|
||
|
|
);
|
||
|
|
|
||
|
|
_MODELVIEW_NORMAL_MATRIX = mat3( _MODELVIEW_MATRIX);
|
||
|
|
}
|