Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 是否可以使用四元数围绕任意原点旋转对象?_Opengl Es_Three.js_Glsl - Fatal编程技术网

Opengl es 是否可以使用四元数围绕任意原点旋转对象?

Opengl es 是否可以使用四元数围绕任意原点旋转对象?,opengl-es,three.js,glsl,Opengl Es,Three.js,Glsl,我想知道是否有可能定义一个对象的旋转,而不是围绕它自己,而是围绕一个任意的原点,从而有效地消除了将XYZ位置向量传递给GPU的需要。因此,我们不需要使用XYZ位置+XYZW四元数,而是可以预先计算一个四元数,该四元数将单独定义对象的位置和旋转,这完全是由它自己决定的。使用纯四元数是不可能的。四元数只有四个自由度。如果将其用于变换,则旋转角度为三度,缩放角度为一度。四元数再也不能提供什么了 但是,可以表示平移(因此也可以表示围绕任意轴的旋转)。这需要额外存储四个数字,通常不值得费心。对偶四元数的优

我想知道是否有可能定义一个对象的旋转,而不是围绕它自己,而是围绕一个任意的原点,从而有效地消除了将XYZ位置向量传递给GPU的需要。因此,我们不需要使用XYZ位置+XYZW四元数,而是可以预先计算一个四元数,该四元数将单独定义对象的位置和旋转,这完全是由它自己决定的。

使用纯四元数是不可能的。四元数只有四个自由度。如果将其用于变换,则旋转角度为三度,缩放角度为一度。四元数再也不能提供什么了

但是,可以表示平移(因此也可以表示围绕任意轴的旋转)。这需要额外存储四个数字,通常不值得费心。对偶四元数的优点是,刚体变换可以在良好的代数背景下以统一的方式表示。它通常用于动画以一致的方式在多个变换之间插值


在大多数情况下,对偶四元数的优点并不超过其复杂性。因此,在大多数情况下,使用简单的偏移向量更为合理。

使用纯四元数是不可能的。四元数只有四个自由度。如果将其用于变换,则旋转角度为三度,缩放角度为一度。四元数再也不能提供什么了

但是,可以表示平移(因此也可以表示围绕任意轴的旋转)。这需要额外存储四个数字,通常不值得费心。对偶四元数的优点是,刚体变换可以在良好的代数背景下以统一的方式表示。它通常用于动画以一致的方式在多个变换之间插值


在大多数情况下,对偶四元数的优点并不超过其复杂性。因此,在大多数情况下,使用简单的偏移向量更合理。

@WestLangley,为什么要删除OpenGL和GLSL标记?因为问题不在于这些主题。我感到惊讶和困惑。若不是关于GLSL或OpenGL,那个么为什么更多的是关于three.js?这是一个公平的问题。我假设您使用的是three.js,并在该上下文中提问。抱歉,如果不正确。抱歉垃圾邮件,但在使用OpenGL兼容的抽象层时,可以问完全相同的问题,比如java中的JMunKEngEngor或者C++中的GLUT或者C语言中的SharpGL。如果我必须删除标记,我会删除三个.js,其中一个可能属于其中较少的,不是吗?我的意思是,通过剪切OpenGL和GLSL标记,你可以取消很多没有搜索threejs标记的人,但是有谁会看到这个寻找OpenGL四元数实现的线程。还是我在这里遗漏了什么?我很抱歉为此感到不安。@WestLangley,你为什么要删除OpenGL和GLSL标签?因为问题不是关于这些主题。我感到惊讶和困惑。若不是关于GLSL或OpenGL,那个么为什么更多的是关于three.js?这是一个公平的问题。我假设您使用的是three.js,并在该上下文中提问。抱歉,如果不正确。抱歉垃圾邮件,但在使用OpenGL兼容的抽象层时,可以问完全相同的问题,比如java中的JMunKEngEngor或者C++中的GLUT或者C语言中的SharpGL。如果我必须删除标记,我会删除三个.js,其中一个可能属于其中较少的,不是吗?我的意思是,通过剪切OpenGL和GLSL标记,你可以取消很多没有搜索threejs标记的人,但是有谁会看到这个寻找OpenGL四元数实现的线程。还是我在这里遗漏了什么?我很抱歉对此感到不安。我们的目标是在应用程序中减少发送到GPU的向量数量,如果有大量的向量,那么双四元数就无法达到我所想的目的。感谢您的澄清。我们的目标是在应用程序中减少发送到GPU的向量数量,如果有大量向量,那么双四元数就无法达到我所想的目的。谢谢你的澄清。