我正在学习适用于 iOS 的 OpenGL ES 2.0,在一些教程的帮助下,我可以使用四元数旋转和缩放一个简单的球体对象。当用户在完成滑动后将手指从屏幕上抬起时,我希望地球继续以递减的速度旋转 - 所以我想给球体一些动力。我用这个博客来学习旋转:http://www.raywenderlich.com/12667/how-to-rotate-a-3d-object-using-touches-with-opengl .任何人都可以提供一些阅读或动量的例子吗?如何用四元数实现动量?谢谢!
// Set up the frustrum and projection matrix
float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
self.effect.transform.projectionMatrix = projectionMatrix;
// Now perform the interpolation step
//[self slerpToNewLocation];
// Move the globe back so we can see it
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, GLOBAL_EARTH_Z_LOCATION);
// In update, we convert the quaternion into a rotation matrix, and apply it to the model view matrix as usual.
GLKMatrix4 rotation = GLKMatrix4MakeWithQuaternion(_quat);
GLKMatrix4 rotateMatrix = GLKMatrix4RotateWithVector3(rotation,momentumVar/200,GLKQuaternionAxis(_quat));
_quat = GLKQuaternionMakeWithMatrix4(rotateMatrix);
modelViewMatrix = GLKMatrix4Multiply(modelViewMatrix, rotateMatrix);
// Cap the zoom scale factor max and mins
// only if slerping so that the auto-zoom out and back
// in still works during auto-rotation
if ( !_slerping ) {
if ( scale > 2.0 ) {
scale = 2.0;
}
if ( scale < 1.15 ) {
scale = 1.15;
}
}
// Apply the zoom factors
if ( _slerping ) {
//NSLog(@"final scale %f",scale);
}
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, scale, scale, scale);
// Assign the drawer modelViewMatrix
self.effect.transform.modelviewMatrix = modelViewMatrix;
我看到了以下问题:Obtaining momentum quaternion from two quaternions and timestep - 但不明白答案。我非常感谢这里的一些提示 - 谢谢。
// Called when touches are ended
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
// The momentum var is initialized to a value
momentumVar = 0.025;
// Now since we stopped touching, decay the rotation to simulate momentum
momentumTimer = [NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(decayGLKQuaternion)
userInfo:nil
repeats:YES];
}
// Slerp about the current axis after touches ended but for a greater angle ( radians )
- (void)decayGLKQuaternion {
if ( momentumVar < 0.001 ) {
// Stop the momentum and timer
momentumVar = 1.0;
[momentumTimer invalidate];
}
else {
// What is the current angle for the quaternion?
float currentQuatAngle = GLKQuaternionAngle(_quat);
// Decay the value each time
momentumVar = currentQuatAngle * 0.95;
}
}
更新:我仍在尝试解决这个问题,我尝试将更新方法中的当前四元数转换为 Matrix4 并围绕四元数轴旋转该矩阵以获得从开始触发的计时器更新和递减的值一旦 TouchesEnded 在我的应用程序中。结果进行了旋转,但轴看起来不太正确(看起来很接近)并且角度产生了与我预期相反的旋转方向 - 因此如果我向下滑动并抬起手指,地球仪会以较低的速度向上旋转。更改角度值的符号没有帮助。如何从四元数中正确提取旋转轴,以适当的角度旋转它,并以递减的速度旋转?谢谢-
// In update, we convert the quaternion into a rotation matrix, and apply it to the model view matrix as usual.
GLKMatrix4 rotation = GLKMatrix4MakeWithQuaternion(_quat);
GLKMatrix4 rotateMatrix = GLKMatrix4RotateWithVector3(rotation,momentumVar/200,GLKQuaternionAxis(_quat));
_quat = GLKQuaternionMakeWithMatrix4(rotateMatrix);
modelViewMatrix = GLKMatrix4Multiply(modelViewMatrix, rotateMatrix);
最佳答案
通过使用 UIKit 中的 UIScrollView 类,您可以完全避免必须实现动量物理。您可以放置一个实际上不在 OpenGL View 上绘制任何内容的 UIScrollView,并将其配置为具有您想要的 contentSize(可滚动区域)和滚动属性。然后你可以让你的一个类符合 UIScrollViewDelegate并使该类的实例成为您的 UIScrollView 的委托(delegate)。然后,当用户与您的不可见 ScrollView (在您的 OpenGL View 之上)交互时,您的 ScrollView 委托(delegate)类将收到用户交互的通知。以下委托(delegate)方法可能对实现特别有用。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
在那里,您可以获得最新更新的contentOffset并使用它来更新您的 3D 模型,然后您可以使用 OpenGL 将其渲染到您的 OpenGL View 中。因此,您仅将 ScrollView 用作检测用户交互的机制,它将处理 iOS 用户熟悉的所有流畅更新和动量物理。
我强烈推荐观看 WWDC 2012 Session 223, "Enhancing User Experience with Scroll Views"与乔希谢弗。在那次演讲中,他通过示例非常详细地讨论了如何使用这种技术。
关于iphone - 滑动后 iOS OpenGL ES 2.0 四元数旋转与动量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16136360/
点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度; 在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
欧拉角、旋转矩阵及四元数1.简介2.欧拉角2.1欧拉角定义2.2右手系和左手系2.3转换流程3.旋转矩阵4.四元数4.1四元数与欧拉角和旋转矩阵之间等效变换4.2测试Matlab代码5.总结1.简介常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。2.欧拉角2.1欧拉角定义欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋
有什么方法可以“开启”使用Proc.new或Kernel.proc实例化的Proc的严格元数强制执行,使其表现得像Proc用lambda实例化?我的initialize方法采用block&action并将其分配给实例变量。我希望action严格执行arity,因此当我稍后对其应用参数时,它会引发一个ArgumentError,我可以挽救它并引发一个更有意义的异常。基本上:classCommandattr_reader:name,:actiondefinitialize(name,&action)@name=name@action=actionenddefperform(*args)be
假设您正在用不同的元数覆盖子类中的方法:classAdeffoo(arg)#arityis1#doingsomethinghereendendclassB有没有办法在线获取super的元数?(实际用例:我调用super时知道父类(superclass)不接受任何参数。但是,如果父类(superclass)实现(在gem中)发生变化,我想发出警告。)感谢您的帮助! 最佳答案 关于您的实际用例:无需亲自检查参数。打电话super(arg1)如果参数计数不匹配,Ruby将引发ArgumentError。更新由于一些反对票,我想我应该回答你
我正在构建一个与RubyonRails后端对话的iPhone应用程序。RubyonRails应用程序还将为Web用户提供服务。restful_authentication插件是提供快速和可定制的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户在新列中存储一个由手机的唯一标识符([[UIDevicedevice]uniqueIdentifier])自动创建的帐户。稍后,当用户准备好创建用户名/密码时,帐户将更新为包含用户名和密码,iPhone唯一标识符保持不变。用户在设置用户名/密码之前不能访问该网站。然而,他们可以使用iPhone应用程序,因为该应用程序可以使用它的标识符
最近更新的博客华为OD机试-卡片组成的最大数字(Python)|机试题算法思路华为OD机试-网上商城优惠活动(一)(Python)|机试题算法思路华为OD机试-统计匹配的二元组个数(Python)|机试题算法思路华为OD机试-找到它(Python)|机试题算法思路华为OD机试-九宫格按键输入(Python)|机试算法备考思路华为OD机试-身高排序(Python)|备考思路使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:blog.csdn.net/hihell/catego
我需要将元数据添加到我使用prawn创建的PDF中.该元数据稍后可能会被pdf-reader提取。.此元数据将包含内部文档编号和下游工具所需的其他信息。将元数据与PDF的每一页相关联会很方便。ThePDFspecification声称我可以将每页私有(private)数据存储在“Page-PieceDictionary”中。第14.5节指出:Apage-piecedictionary(PDF1.3)maybeusedtoholdprivateconformingproductdata.ThedatamaybeassociatedwithapageorformXObjectbymeans
我想使用jsonld设置schema.org元数据。例如,以下链接使用ghost,它具有“application/ld+json”元数据。http://blog.ghost.org/distributed-team-tools/我想为我的Rails应用实现类似的功能。我应该如何实现它。有没有什么gem可以做这个等等。谢谢! 最佳答案 有一个JSON-LDgem(http://rubygems.org/gems/json-ld),但它可能不是您要查找的内容。请注意,JSON-LD的要点在于它只是JSON,在本例中使用schema.or
我有一个使用deviseonrails3的应用程序。我想启用http身份验证,以便我可以从iPhone应用程序向我的网络应用程序进行身份验证。如何从我的iPhone应用程序进行身份验证以进行设计?这安全吗?还是我应该进行不同的身份验证? 最佳答案 从设计的角度来看,您有3个选择:1)使用基本的http身份验证:您的iPhone应用程序有一个secretkey-这是在您的iPhone应用程序代码中烘焙的-用于对网络应用程序的每个请求进行身份验证。Google搜索:“设计基本的http身份验证”2)您可以通过在您的iPhone应用程序中