1
에 PyOpenGL.glRotatef 사용할 Quanterion 값을 사용할 수
난이 값 쿼터니언 (X, Y, Z, W) I 내가 유니티
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'])
pyOpenGl에서 = (P0, P1, P2, P3) 데이터를 먼저 정규화합니다 (btw 데이터는 프로토 타입 장치에서 가져온 것이므로 정규화해야합니다) 어떻게 이것을 C# Unity에서 사용할 수 있고 객체를 회전시킬 수 있습니까? 나는 Unity unit이 어떻게 작동 하는지를 모른다.
"쿼터니언 값을 사용할 수 없습니까?"라는 것은 무엇을 의미합니까? Unity의 Transform에는 Quaternions 인 localRotation 및 rotation 속성이 있습니다. 그것들을 사용할 때 어떤 문제가 발생합니까? – Bart
그들은 쿼터니언이지만 작동하지 않는다는 것을 압니다! 그것은 회전하지만 이것들은 매우 작은 회전이다. (나는 단위가 정말 작다고 믿는다. 유니티에서 쿼터니온을 사용해야하는 단위는 무엇인가?) opengl로 잘 작동한다. –
glRotatef는 축각 표현을 사용한다. 쿼터니언은 그렇지 않다. 하나의 값을 다른 하나의 값으로 직접 넣고 작동하도록하십시오. 그러나 https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html을 사용하여 축 및 각도 표현에서 유효한 Quaternion을 만들 수 있습니다. 당신이 찾고있는 무엇입니까? – Bart