2021SC@SDUSC ClayGL Camera类分析(五)

2021SC@SDUSC ClayGL Camera类分析(五)
接上文

Methods

1.decomposeLocalTransform()

将局部转换分解为 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);
    },

2.decomposeProjectionMatrix()

分解相机投影矩阵

    decomposeProjectionMatrix: function () {},

3. decomposeWorldTransform()

分解世界转换为 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;
    },

4.eachChild(callback, contextopt)

遍历所有子节点。
不能在迭代期间在回调中执行"添加","删除"操作。
参数:

名称类型属性
callbackfunction
contextNode可选
    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);
        }
    },

5.error(action, contextopt)

一次别名(‘error’)
参数:

名称类型属性
actionfunction
contextObject可选
    error: function(action, context) {
        return this.once('error', action, context);
    },

6.getChildByName(name) → {clay.Node}

得到第一个有名字的子节点
参数:

名称类型
namestring
contextObject

返回值: 类型 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];
            }
        }
    },

7.getDescendantByName(name) → {clay.Node}

获取第一个具有给定名称的后代节点
参数:

名称类型
namestring

返回值: 类型 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;
                }
            }
        }
    },

8.getParent() → {clay.Scene}

获取父节点
返回值:
类型 clay.Scene

    getParent: function () {
        return this._parent;
    },

9.getPath(rootNodeopt) → {string}

获取查询路径,相对于根节点(默认为 scene)。
参数:

名称类型属性
rootNodeclay.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;
    },
### 2021 SC SDUSC IT相关信息 #### ByteToMessageDecoder解析 `ByteToMessageDecoder` 是Netty框架中的一个重要解码器,用于处理字节流到消息对象的转换过程。此实现了入站处理器接口,在接收到的数据被读取之后触发调用方法来执行具体的解码逻辑[^1]。 ```java public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception; } ``` 该提供了一个抽象方法 `decode()` ,子需实现此方法完成特定的应用层协议解析工作。当有新的数据到达时会自动调用这个函数来进行逐步解码操作直到所有可用输入都被消耗完毕为止。 #### 后端文件夹sdudoc-mbg分析 针对项目后端部分中名为 `sdudoc-mbg` 的模块进行了深入探讨。这部分主要涉及数据库映射生成工具MyBatis Generator (MBG),它能够自动生成持久化所需的Java实体以及相应的DAO访问代码,大大提高了开发效率并减少了手工编写重复SQL语句的工作量[^2]。 #### 数据结构定义EVP_CIPHER_CTX 在OpenSSL库中存在一种称为 `EVP_CIPHER_CTX` 的数据型,其实际是一个指向内部结构体指针型的别名声明。这种上下文环境主要用于加密算法的操作过程中保存状态信息和其他必要的参数设置等[^3]: ```c typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; ``` 上述代码片段展示了如何通过宏定义的方式创建一个新的型名称以便于后续编程使用更加直观易懂。 #### Senta输入变量说明 Senta作为自然语言处理平台之一,在接收外部传入的数据时支持多种基础数值型张量形式作为模型训练样本集的一部分。具体来说就是允许用户指定维度大小不固定的矩阵或者向量,并且限定了所含元素仅能采用浮点数或整数两种基本别以确保计算精度满足需求[^4]。 #### 组件特性描述 为了增强系统的灵活性和健壮性,某些组件设计上融入了几项重要的机制:日志记录能力使得开发者可以在运行期间获取详细的调试线索;配置管理则让用户可以根据实际情况调整行为模式而无需修改源代码本身;资源清理功能保证了即使发生异常也能安全地终止程序而不遗留未关闭的对象实例;最后循环利用策略有助于降低垃圾收集频率进而优化整体性能表现并缓解潜在内存压力问题[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值