【发布时间】:2014-05-14 22:04:37
【问题描述】:
我正在通过从 Control 类派生来实现 LookAt Controller 插件。
一切正常,除了我不明白如何获得指向控件所属节点的 INode 指针。我如何得到这个指针? (我需要从 LookAt 类的代码中访问指针。)
【问题讨论】:
我正在通过从 Control 类派生来实现 LookAt Controller 插件。
一切正常,除了我不明白如何获得指向控件所属节点的 INode 指针。我如何得到这个指针? (我需要从 LookAt 类的代码中访问指针。)
【问题讨论】:
不要获取节点指针。控件不应该知道它们的值是如何被使用的,只需接受你的输入,应用你的算法,然后返回值。
例如,要创建一个 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 中动画层次结构的工作原理。
【讨论】: