forked from fire-archive/go-ogre3d
/
quaternion.go
51 lines (38 loc) · 1.05 KB
/
quaternion.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package ogre
/*
#cgo LDFLAGS: -lllcoi
#include "llcoi/ogre_interface.h"
*/
import "C"
type Quaternion struct {
cptr C.QuaternionHandle
}
func CreateQuaternion() Quaternion {
var result Quaternion
result.cptr = C.quaternion_create()
return result
}
func (quat *Quaternion) FromRotationMatrix(mat Matrix3) {
m := C.coiMatrix3(mat.cmat)
C.quaternion_from_rotation_matrix(quat.cptr, &m)
}
func (quat *Quaternion) FromValues(w, x, y, z float32) Quaternion {
var result Quaternion
result.cptr = C.quaternion_from_values(C.coiReal(w), C.coiReal(x), C.coiReal(y), C.coiReal(z))
return result
}
func (quat *Quaternion) ToRotationMatrix(mat *Matrix3) {
C.quaternion_to_rotation_matrix(quat.cptr, &mat.cmat)
}
func (quat *Quaternion) W() float32 {
return float32(C.quaternion_get_w(quat.cptr))
}
func (quat *Quaternion) X() float32 {
return float32(C.quaternion_get_x(quat.cptr))
}
func (quat *Quaternion) Y() float32 {
return float32(C.quaternion_get_y(quat.cptr))
}
func (quat *Quaternion) Z() float32 {
return float32(C.quaternion_get_z(quat.cptr))
}