2021SC@SDUSC ClayGL Camera类分析(五)
接上文
将局部转换分解为 SRT,
输入参数keepScale,如果scale!=keepScale,则scale=this.scale,否则scale=null。
decomposeLocalTransform: function (keepScale) {
var scale = !keepScale ? this.scale: null;
this.localTransform.decomposeMatrix(scale, this.rotation, this.position);
},
分解相机投影矩阵
decomposeProjectionMatrix: function () {},
分解世界转换为 SRT函数
decomposeWorldTransform: (function () {
var tmp = mat4.create();
return function (keepScale) {
var localTransform = this.localTransform;
var worldTransform = this.worldTransform;
// Assume world transform is updated
if (this._parent) {
mat4.invert(tmp, this._parent.worldTransform.array);
mat4.multiply(localTransform.array, tmp, worldTransform.array);
} else {
mat4.copy(localTransform.array, worldTransform.array);
}
var scale = !keepScale ? this.scale: null;
localTransform.decomposeMatrix(scale, this.rotation, this.position);
};
})(),
transformNeedsUpdate: function () {
return this.position._dirty
|| this.rotation._dirty
|| this.scale._dirty;
},
遍历所有子节点。
不能在迭代期间在回调中执行"添加","删除"操作。
参数:
名称 | 类型 | 属性 |
---|---|---|
callback | function | |
context | Node | 可选 |
eachChild: function (callback, context) {
var _children = this._children;
for(var i = 0, len = _children.length; i < len; i++) {
var child = _children[i];
callback.call(context, child, i);
}
},
一次别名(‘error’)
参数:
名称 | 类型 | 属性 |
---|---|---|
action | function | |
context | Object | 可选 |
error: function(action, context) {
return this.once('error', action, context);
},
得到第一个有名字的子节点
参数:
名称 | 类型 |
---|---|
name | string |
context | Object |
返回值: 类型 clay.Node
getChildByName: function (name) {
var children = this._children;
for (var i = 0; i < children.length; i++) {
if (children[i].name === name) {
return children[i];
}
}
},
获取第一个具有给定名称的后代节点
参数:
名称 | 类型 |
---|---|
name | string |
返回值: 类型 clay.Node
getDescendantByName: function (name) {
var children = this._children;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.name === name) {
return child;
} else {
var res = child.getDescendantByName(name);
if (res) {
return res;
}
}
}
},
获取父节点
返回值:
类型 clay.Scene
getParent: function () {
return this._parent;
},
获取查询路径,相对于根节点(默认为 scene)。
参数:
名称 | 类型 | 属性 |
---|---|---|
rootNode | clay.Node | 可选 |
返回值:
类型 string
getPath: function (rootNode) {
if (!this._parent) {
return '/';
}
var current = this._parent;
var path = this.name;
while (current._parent) {
path = current.name + '/' + path;
if (current._parent == rootNode) {
break;
}
current = current._parent;
}
if (!current._parent && rootNode) {
return null;
}
return path;
},