[]设置transform.localRotation之后,就不能再使用transform.rotate了

laya3D,
...
var ele=eleroot.getChildAt(0).clone();
ele.transform.position=new Laya.Vector3(0, 0, 0);
scene.addChild(ele);
...
ele.transform.rotate(new Laya.Vector3(10, 0, 0), true); //这里会有效
ele.transform.localRotation=new Laya.Quaternion(0, 0,0,0); //这里也还是有效的
ele.transform.rotate(new Laya.Vector3(30, 0, 0), true); //这里就无效了,从此以后的对ele的rotate全部无效了
已邀请:

183*****755

赞同来自:

自己先在谷歌浏览器里debug调试下,看每行代码执行后,物体的世界矩阵是否发生变化!

hhh_DDD

赞同来自:

我使用的版本是 1.7.2 beta附件是测试例子,是一个nodejs工程。用node app.js --port=8888启动服务器,浏览器访问localhost:8888
等界面显示之后在console中输入test()
这会创建两张牌,第一张牌在右侧,第二张在左侧。
第一张牌使用了localRotation,可以看到旋转无效了,console中的matrix也可以看到是不变的
第二张牌直接rotate,可以看到旋转了。
 
顺便问一下,要想知道Sprite3D.load加载完成,只能继承并重写onAsynLoaded?
-------------------------------------------------------------------------------------ok, 我检查了worldMatrix,确实在设置了localRotation之后就不再变化了,why?
 
以下是log
 
var bom=tileroot.getChildAt(1).getChildAt(0).clone();       //创建对象
undefined
bom.transform.worldMatrix                                         //世界矩阵
Matrix4x4elements: Float32Array[16]0: 0.85106498003005981: 02: 03: 04: 05: 0.85106498003005986: 07: 08: 09: 010: 0.851064980030059811: 012: 331.600006103515613: -5.099999944384835e-1414: -3.03830003738403315: 1buffer: (...)byteLength: (...)byteOffset: (...)length: (...)Symbol(Symbol.toStringTag): (...)__proto__: TypedArray__proto__: Object
bom.transform.localRotation=new Laya.Quaternion(0, 0,0,0);           //设置了localRotation
Quaternion {elements: Float32Array[4]}
bom.transform.worldMatrix                                                         //再看看worldMatrix,是一样的
Matrix4x4elements: Float32Array[16]0: 0.85106498003005981: 02: 03: 04: 05: 0.85106498003005986: 07: 08: 09: 010: 0.851064980030059811: 012: 331.600006103515613: -5.099999944384835e-1414: -3.03830003738403315: 1buffer: (...)byteLength: (...)byteOffset: (...)length: (...)Symbol(Symbol.toStringTag): (...)__proto__: TypedArray__proto__: Object
bom.transform.rotate(new Laya.Vector3(10, 0, 0), true);                    //旋转他,但是没用,wordMatrix不变
undefined
bom.transform.worldMatrix
Matrix4x4elements: Float32Array[16]0: 0.85106498003005981: 02: 03: 04: 05: 0.85106498003005986: 07: 08: 09: 010: 0.851064980030059811: 012: 331.600006103515613: -5.099999944384835e-1414: -3.03830003738403315: 1buffer: (...)byteLength: (...)byteOffset: (...)length: (...)Symbol(Symbol.toStringTag): (...)__proto__: TypedArray__proto__: Object
var bom2=tileroot.getChildAt(1).getChildAt(0).clone();
undefined
bom2
MeshSprite3D {_render: MeshRender, _geometryFilter: MeshFilter, _projectionViewWorldMatrix: Matrix4x4, _projectionViewWorldUpdateLoopCount: -1, _projectionViewWorldUpdateCamera: null…}
bom2.transform.worldMatrix
Matrix4x4elements: Float32Array[16]0: 0.85106498003005981: 02: 03: 04: 05: 0.85106498003005986: 07: 08: 09: 010: 0.851064980030059811: 012: 331.600006103515613: -5.099999944384835e-1414: -3.03830003738403315: 1buffer: (...)byteLength: (...)byteOffset: (...)length: (...)Symbol(Symbol.toStringTag): (...)__proto__: TypedArray__proto__: Object
 
//做个对比,没有设置localRotation的对象旋转是有效的
bom2.transform.rotate(new Laya.Vector3(10, 0, 0), true);                      
undefined
bom2.transform.worldMatrix
Matrix4x4elements: Float32Array[16]0: 0.85106498003005981: 02: 03: 04: 05: -0.71410447359085086: -0.462997347116470347: 08: 09: 0.4629973471164703410: -0.714104473590850811: 012: 331.600006103515613: -5.099999944384835e-1414: -3.03830003738403315: 1buffer: (...)byteLength: (...)byteOffset: (...)length: (...)Symbol(Symbol.toStringTag): (...)__proto__: TypedArray__proto__: Object

要回复问题请先

商务合作
商务合作