繁体   English   中英

关于内容转换。 3D 变换矩阵如何工作?

[英]About contentsTransform. How 3D Transform matrix work?

我听说我可以使用 contentsTranform 修改纹理。 但是怎么办? contentsTranform 是一个 SCNMatrix,从文档中我可以使用 SCNMatrix4MakeTranslation、SCNMatrix4MakeRotation 和 SCNMatrix4MakeScale 函数来创建一个矩阵。 但是我不知道如何像第二张图那样显示纹理。 相框是 1:2,纹理是 1:1。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


两次编辑:

我在材质编辑器中更改比例和偏移以及 WrapT 属性。 而且效果很好。 但是当我运行它时,我无法获得相同的效果。 所以我尝试通过更改 contentsTransform 属性来编程。 但是 scale,offset 它们都会影响 contentsTransform。 那么如果 offSet 是 (0, -4.03) 并且 Scale 是 (1, 1.714),contentsTransform 是什么

在此处输入图像描述

解决方案@HaoDong的问题帖子中移出。

现在我知道什么是解决方案了。

第一的

不要加载 .dae 文件作为 SCNScene。 支持使用.scn 文件。 发生错误是因为我在场景编辑器中使用.dae 文件修改纹理。 然后我运行它时无法得到相同的结果。 我将其更改为.scn文件并修改纹理后。 我在真实设备上得到了正确的效果。 您可以通过 ->Editor->Convert to SceneKit scene file format 将 .dae 文件转换为 .scn 文件。

第二

offset 和 Scale 值都会影响contentsTransform属性的值。 我已经在材质编辑器视图中修改了纹理。 如果 offSet 为 (0, -4.03) 且 Scale 为 (1, 1.714),则contentsTransform属性为SCNMatrix4(m11: 1.0, m12: 0.0, m13: 0.0, m14: 0.0, m21: 0.0, m22: 1.714, m23: 0.0, m24: 0.0, m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, m41: 0.0, m42: -4.03, m43: 0.0, m44: 1.0) 通过搜索文档,我发现了如何获得这个属性。

 var matrixA = SCNMatrix4MakeTranslation(0, -4.0, 0) var matrixB = SCNMatrix4MakeScale(1, 1.345, 1) var b = SCNMatrix4Mult(matrixB, matrixA)

确保它是 MakeScale * MakeTranslation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM