Hello to everyone.
I’am developing a solution that project specific texture on a screen with transformations: move, scale, rotation. Move and scale works fine.
But a have a problem with rotation. When I try to rotate uv coords they looks quite different then object rotation in Unity. My code looks like:
Matrix4x4 rot = Matrix4x4.TRS(new Vector3( 0.0f, 0.0f, 0f), Quaternion.Euler(0f, 0.0f, -angle ), Vector3.one );
gameObject.renderer.material.SetMatrix(“_Matrix0”, rot );
And UV calculations in shader looks like this:
float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
float2 uv = mul(_Matrix0, float4(screenUV, 1.0, 1.0)).xy;
As result I’ve got this:
Red color - original sprite in 3D space. Yellow color: projected texture on a 2D plane.
But if I choose 2D screen everything looks ok:
So the problem is in the way how screen UV coords works.
Does anybody have same problems with uv rotation ? I belive that exists some additional calculation that take in account sreen aspect ration in UV rotation.
I am be very glad for any ideas and solutions.
Thanks in advance.