我正在通过从 Control 类派生来实现 LookAt Controller 插件。
一切正常,除了我不明白如何获得指向 Control 所属节点的 INode 指针。我如何得到这个指针?(我需要从 LookAt 类的代码中访问指针。)
不要得到节点指针。控件不应该知道它们的值是如何被使用的,只需接受你的输入,应用你的算法,然后返回值。
例如,要创建一个 LookAt,我会将我的 Control 定义为超类类型 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 中的动画层次结构是如何工作的。