我有四元数的值(x,y,z,w)=(p0,p1,p2,p3) 在pyOpenGl中
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中使用它并旋转对象?我不知道团结部队是怎么运作的。。。你知道吗
这里混淆的是轴角表示法和四元数。您使用的glRotatef使用前者,而Unity的
rotation
和localRotation
是后者。你知道吗但是,您可以在两者之间转换。^{} 就是这样。它采用轴角度表示法并将其转换为相应的四元数。例如,您可以将其输入到
localRotation
。你知道吗相关问题 更多 >
编程相关推荐