1
与PyOpenGL.glRotatef使用Quanterion值
我有四元数的值(X,Y,Z,W)=(P0,P1,P2,P3)中pyOpenGl我不能使用,我在Unity
norm=math.sqrt(program_dict['q0']*program_dict['q0'] + program_dict['q1']*program_dict['q1'] + program_dict['q2']*program_dict['q2'] + program_dict['q3']*program_dict['q3'])
glPushMatrix()
if (norm == 0):
pass
else:
program_dict['q0'] = program_dict['q0']/norm
program_dict['q1'] = program_dict['q1']/norm
program_dict['q2'] = program_dict['q2']/norm
program_dict['q3'] = program_dict['q3']/norm
theta = (math.acos(program_dict['q3'])*2)
aNorm = math.sqrt(program_dict['q1'] * program_dict['q1'] + program_dict['q2'] * program_dict['q2'] + program_dict['q0'] * program_dict['q0'])
if (aNorm != 0):
glRotatef(theta*180.0/math.pi, program_dict['q2']/aNorm, -program_dict['q0']/aNorm, program_dict['q1']/aNorm)
else:
glRotatef(theta*180.0/math.pi, program_dict['q2'], -program_dict['q0'], program_dict['q1'])
我首先规范化数据(顺便说一下数据来自原型设备,所以它必须正常化) 我如何在c#Unity中使用它并旋转一个对象?我不知道统一单位是如何工作的?
你是什么意思“我不能使用四元数值”? Unity的变换具有四元数的本地旋转和旋转属性。使用它们时会遇到什么问题? – Bart
我知道它们是四元数,但它不起作用!它旋转,但这些都是非常小的旋转:(我相信数字是团结真的很小。哪个单位,我应该使用在Unity四元?正常工作与OpenGL的 –
glRotatef使用一个轴角。四元数都不是。你可以不要直接从一个值到另一个值,并期望它的工作。但是,您可以使用https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html从轴和角度表示中创建有效的四元数你在找什么? – Bart