【问题标题】:(3ds max SDK) How do I get the node of a Control?(3ds max SDK) 如何获取控件的节点?
【发布时间】:2014-05-14 22:04:37
【问题描述】:

我正在通过从 Control 类派生来实现 LookAt Controller 插件。

一切正常,除了我不明白如何获得指向控件所属节点的 INode 指针。我如何得到这个指针? (我需要从 LookAt 类的代码中访问指针。)

【问题讨论】:

    标签: 3dsmax 3ds


    【解决方案1】:

    不要获取节点指针。控件不应该知道它们的值是如何被使用的,只需接受你的输入,应用你的算法,然后返回值。

    例如,要创建一个 LookAt,我会将我的控件定义为超类类型 CTRL_ROTATION_CLASS_ID。当此控件求值时(使用方法 = CTRL_RELATIVE 调用 GetValue),它将传递一个指向您要将值应用到的转换的指针。假设您的旋转是 PRS 的一部分,那么变换将是父变换,+ (P)RS 的位置部分。

    void YourClass::GetValue(TimeValue t, void* val, ...)
    {
        Matrix3* pInTransform = reinterpret_cast<Matrix3*>(val);
        Point3& pMyPosition = pInTransform->GetTrans();
    

    通过位置,您可以获得目标的位置,然后旋转/设置输入矩阵,使您的眼睛矢量指向目标

    我强烈推荐文档的学习路径部分,以大致了解 Max 中动画层次结构的工作原理。

    http://docs.autodesk.com/3DSMAX/15/ENU/3ds-Max-SDK-Programmer-Guide/files/GUID-A39314EC-15B4-4919-BB1B-318FFDC05DD8.htm

    【讨论】:

    • 确保方法 == CTRL_ABSOLUTE 将 val 转换为适当的类型(例如,对于旋转,它将是 Quat,而不是 Matrix)
    • 我的问题是我对这个专门的查看算法的输入之一是控件节点的父级是如何定向的(这就是我想要获取节点的原因,所以我可以访问父级的转换, ETC。)。现在看来,我对控件节点的所有了解都是它的世界转换。如果我能得到节点及其父节点的世界变换,那就行了。
    • 啊哈,好吧。我现在检查了一下,'val' 参数似乎是一个 Matrix3,而不是包含 PARENT 的方向和节点的位置(如你所说)。让我有点困惑的是它们在同一个矩阵实例中混合在一起。实际上,我认为这就是我现在需要的所有输入。谢谢。
    • 顺便说一句,Matrix3 可以包含翻译部分是不是有点奇怪?
    猜你喜欢
    • 2017-02-16
    • 2022-12-21
    • 2013-09-07
    • 2014-03-16
    • 2014-09-07
    • 2011-11-10
    • 2017-09-05
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多