1

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

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

4

1 回答 1

1

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

例如,要创建一个 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 中的动画层次结构是如何工作的。

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

于 2014-05-14T14:04:37.983 回答