- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个对象,我想用它来遵循贝塞尔曲线,但现在有点迷茫,不知道如何让它根据时间而不是构成曲线的点来做到这一点。
.::当前系统::.我的场景图中的每个对象都是由位置、旋转和缩放 vector 构成的。这些 vector 用于形成它们相应的矩阵:缩放、旋转和平移。然后按顺序相乘以形成局部变换矩阵。然后将世界变换(通常是单位矩阵)与局部矩阵变换相乘。
class CObject
{
public:
// Local transform functions
Matrix4f GetLocalTransform() const;
void SetPosition(const Vector3f& pos);
void SetRotation(const Vector3f& rot);
void SetScale(const Vector3f& scale);
// Local transform
Matrix4f m_local;
Vector3f m_localPostion;
Vector3f m_localRotation; // rotation in degrees (xrot, yrot, zrot)
Vector3f m_localScale;
}
Matrix4f CObject::GetLocalTransform()
{
Matrix4f out(Matrix4f::IDENTITY);
Matrix4f scale(), rotation(), translation();
scale.SetScale(m_localScale);
rotation.SetRotationDegrees(m_localRotation);
translation.SetTranslation(m_localTranslation);
out = scale * rotation * translation;
}
我的大问题是
1) 如何定位我的对象以面向贝塞尔曲线的切线?
2) 如何在不将对象位置设置为贝塞尔曲线上某个点的位置的情况下沿曲线移动该对象?
这是到目前为止的功能概述
void CNodeControllerPieceWise::AnimateNode(CObject* pSpatial, double deltaTime)
{
// Get object latest pos.
Vector3f posDelta = pSpatial->GetWorldTransform().GetTranslation();
// Get postion on curve
Vector3f pos = curve.GetPosition(m_t);
// Get tangent of curve
Vector3f tangent = curve.GetFirstDerivative(m_t);
}
编辑: 抱歉,它不是很清楚。多年来我一直致力于此,它让我的大脑变得糊涂。
我想让物体附着在曲线上并面向曲线的方向。
至于运动,我想反对基于时间的曲线,这样它可以在整个曲线上创建平滑的运动。
最佳答案
正如@etarion 所说,您应该有一条参数形式的曲线,并使用导数 vector 来评估对象的旋转(旋转角度 = 导数角度)。
要以所需速度(我认为这是您想要的)在曲线上移动对象,您应该在每个模拟步骤中估计该点在此步骤中应移动的距离。
最简单的估计是dist = derivative.length()*TIMER_STEP
。当您知道应该在当前步骤和 t0
上遍历 dist - 曲线的当前参数时,您可以简单地将 t0 增加一些小值 epsilon
并检查遍历距离仍然比估计的要小。重复此操作,直到遍历距离(同时增加 t0)>= 估计。这将是下一步的新电流参数t0
编辑:
首先没有注意到您处于 3d 中。在 3d 空间中,即使知道初始位置,也无法明确定义对象在曲线上的位置。想象一下你的曲线是一条线——物体仍然可以绕着线旋转。这个角度不是由曲线定义的。
我会做这样的事情。让我们将一个 vector 绑定(bind)到对象,以便在运动开始时(例如曲线参数 t = 0)对象 vector 方向与导数 vector 重合。然后在运动过程中,该 vector 仍应与曲线每个点的导数重合。所以你会知道这个对象 vector 并且能够根据这个 vector 设置你的对象。但是你仍然会有一个自由度。
例如,您可以说对象不围绕该 vector 旋转。
了解对象 vector 和围绕它旋转的角度,您可以恢复 3d 世界中的对象方向。
PS:这样的物体 vector 和围绕它旋转的角度被称为四元数 - 所以你可以使用四元数数学(简单复制所需的公式)来计算物体旋转矩阵!这是公式 http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/index.htm
关于c++ - 沿贝塞尔曲线的方向移动对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702418/
我正在使用 MapBox 绘制兴趣点,这些兴趣点是通过基于 Rails 构建的用户生成表单提交的。当前,用户输入一个地址,然后该地址通过 gem(地理编码器)计算出 Lat 和 Lng。从那里我通过
我正在纵向平板电脑上开发应用程序。 但是,当平板电脑转到横向模式时,应用程序也会转动,并且所有对齐方式都将被取消。那么有什么方法可以将我的 WPF 应用程序锁定到一个方向? 谢谢! 最佳答案 我必须同
我在我的应用程序中的 mkmapview 上显示了两点之间的路线,但我想显示这两点的方向。点的纬度和经度存储在 NSArray 中。 最佳答案 这可能为时已晚,您可能已经解决了它,但这是我已经测试过并
我正在处理一个小型 Unity3D 项目,我需要从另一个工具导入一些数据。该工具通过两个向量为我提供了对象方向,我需要将其移植到 Unity。 例如,我有这两个向量; x = Vector( 0.70
有没有办法以编程方式设置 UIActionSheet 的方向?我的 iPhone 方向是纵向,但 UIActionSheet 需要是横向。这可以吗? 编辑: 所以我的问题是我不想将 rootviewc
如何在 Python 中根据 2 个 GPS 坐标计算速度、距离和方向(度)?每个点都有纬度、经度和时间。 我在这篇文章中找到了半正矢距离计算: Calculate distance between
需要一个代码来更改 div 的属性,具体取决于 iPhone 设备的位置。在这段代码工作之前现在停止这样做了吗? @media all and (orientation:portrait) { .
在“View Did Load”中,我试图确定 View 的大小,以便我可以适本地调整 subview 的大小。我希望它始终围绕屏幕的长度和宽度拉伸(stretch),而不管方向如何。 quest *
如何根据对象的方向移动对象?我的意思是,我有一个处于某个位置的立方体,我想绕 Y 轴旋转并根据它们的方向移动。然后再次移动和旋转以改变方向。像这样的事情: 最佳答案 在 JS 中你可以尝试这样的事情:
我目前有一个处于横向模式的 SurfaceView。 目前我正在尝试使用添加操作栏/菜单栏 /*Action Bar */ //this.setRequestedOrientation(Activit
我正在使用 cocos2d,我想播放电影。为此,我创建了 MPMoviePlayerViewController 并将其作为 [[CCDirector sharedDirector] openGLVi
我在 cocos2d 中创建了一个游戏,因为我想使用我找到的一些 UIKit 元素 kobold2d。 我移植了游戏,但问题是我的 iPhone 刺激器旋转了, 但不是显示的节点。 必须使用: bac
我可以在 iOS 中的 UITabBarController 中更改方向吗?我有这样的东西: UITableViewController-> Team Tab -> UINavigationContr
我有 UINavigationController 和几个 View Controller 。这是他们的名单:主->相册->图片 现在,在第一个和第二个(主要和专辑)中,我希望 UINavigatio
人们普遍认为,在过去几年中,标准显示器的最佳网站宽度已从 800 像素增加到 1024+ 像素(网站通常为 960 像素宽),但随着移动设备的兴起,哪些分辨率被认为是“关键”迎合? 例如,this
我正在做一个 GTK+ 项目,我需要一个像这样的垂直 GtkLevelBar: 但我不知道如何从默认的水平 GtkLevelBar 翻转它: 这是我的 GtkLevelBar 代码。 GtkWidge
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我的 collectionView 以横向模式显示 20 个项目。在纵向模式下,我只想展示 8 个可重复使用的项目。我怎样才能做到这一点? collectionView 何时在数据源上调用 colle
可以在 list 文件中设置 Activity 的方向。 但是否也可以通过代码来实现?如果是,怎么办? 谢谢! 最佳答案 setRequestedOrientation(ActivityInfo.SC
我希望在纬度、经度和用户当前位置之间集成方向。我希望通过点击按钮将用户定向到已安装的 Google map /其他应用程序并显示方向。 我搜索了 SO 和谷歌,但找不到好的来源,因此我发布了这个问题。
我是一名优秀的程序员,十分优秀!