【发布时间】:2015-05-27 17:13:37
【问题描述】:
我正在使用 WebCamTexture 从相机(iOS 和 Android)获取输入。但是,由于这是原始输入,因此在渲染到纹理时旋转是错误的。我看了很多,发现了这个(看底部):WebCamTexture rotated and flipped on iPhone
他的代码(但带有测试值):
Quaternion rotation = Quaternion.Euler(45f, 30f, 90f);
Matrix4x4 rotationMatrix = Matrix4x4.TRS(Vector3.zero, rotation, new Vector3(1, 1, 1));
material.SetMatrix("_Rotation", rotationMatrix);
但无论我使用什么值,都不会发生任何事情(无论是在编辑器中还是在设备上)...
谢谢!
编辑 经过一些激烈的测试,我发现 material.SetMatrix、SetFloat、SetWhatever 没有任何效果(不设置值),除非它在“属性”块中声明。看看 unity:s 自己的例子,这不应该(也不能)为矩阵完成(不能在 Properties 内声明,只能在 CGProgram 内声明)。那么......那你如何设置矩阵呢?还是我做错了什么?
【问题讨论】:
-
几件事。 1. 旋转不是与
SetMatrix累积的,因此您的 sn-p 只会在开始时旋转一次。 2. 您链接的着色器仅 旋转几何体,而不是纹理(也许您想要这个?)。官方文档有一个 working example 的纹理旋转。 -
谢谢,我去看看!我应该提到我每 3 年接触一次着色器...... :)
-
@Jerdak Btw,想多解释一下该解决方案如何“旋转几何体,而不是纹理”?泰!
-
该着色器中唯一使用
_rotation的地方是这一行:float4 newPosition = mul( UNITY_MATRIX_MVP, mul(_Rotation, v.vertex) );,它是顶点着色器的一部分,仅应用于o.pos = newPosition处的顶点,因此它只旋转几何体。 -
@Jerdak 我真正想要的是计算texcoord ..?太晚了,我不知道着色器或其语法......是的,对不起:)