Skip to content

Commit e9f3757

Browse files
committed
no glm
1 parent af4466b commit e9f3757

File tree

1 file changed

+144
-10
lines changed

1 file changed

+144
-10
lines changed

src/camera.cpp

Lines changed: 144 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,139 @@
33
#include "Frustum.h"
44

55
#include <Rcpp.h>
6+
#include <cmath>
67

78
#include <GL/glu.h>
89

9-
#include <cmath>
10+
static bool InvertMatrix(const GLfloat m[16], GLfloat invOut[16])
11+
{
12+
GLfloat inv[16], det;
13+
int i;
14+
15+
inv[0] = m[5] * m[10] * m[15] -
16+
m[5] * m[11] * m[14] -
17+
m[9] * m[6] * m[15] +
18+
m[9] * m[7] * m[14] +
19+
m[13] * m[6] * m[11] -
20+
m[13] * m[7] * m[10];
21+
22+
inv[4] = -m[4] * m[10] * m[15] +
23+
m[4] * m[11] * m[14] +
24+
m[8] * m[6] * m[15] -
25+
m[8] * m[7] * m[14] -
26+
m[12] * m[6] * m[11] +
27+
m[12] * m[7] * m[10];
28+
29+
inv[8] = m[4] * m[9] * m[15] -
30+
m[4] * m[11] * m[13] -
31+
m[8] * m[5] * m[15] +
32+
m[8] * m[7] * m[13] +
33+
m[12] * m[5] * m[11] -
34+
m[12] * m[7] * m[9];
35+
36+
inv[12] = -m[4] * m[9] * m[14] +
37+
m[4] * m[10] * m[13] +
38+
m[8] * m[5] * m[14] -
39+
m[8] * m[6] * m[13] -
40+
m[12] * m[5] * m[10] +
41+
m[12] * m[6] * m[9];
42+
43+
inv[1] = -m[1] * m[10] * m[15] +
44+
m[1] * m[11] * m[14] +
45+
m[9] * m[2] * m[15] -
46+
m[9] * m[3] * m[14] -
47+
m[13] * m[2] * m[11] +
48+
m[13] * m[3] * m[10];
49+
50+
inv[5] = m[0] * m[10] * m[15] -
51+
m[0] * m[11] * m[14] -
52+
m[8] * m[2] * m[15] +
53+
m[8] * m[3] * m[14] +
54+
m[12] * m[2] * m[11] -
55+
m[12] * m[3] * m[10];
56+
57+
inv[9] = -m[0] * m[9] * m[15] +
58+
m[0] * m[11] * m[13] +
59+
m[8] * m[1] * m[15] -
60+
m[8] * m[3] * m[13] -
61+
m[12] * m[1] * m[11] +
62+
m[12] * m[3] * m[9];
63+
64+
inv[13] = m[0] * m[9] * m[14] -
65+
m[0] * m[10] * m[13] -
66+
m[8] * m[1] * m[14] +
67+
m[8] * m[2] * m[13] +
68+
m[12] * m[1] * m[10] -
69+
m[12] * m[2] * m[9];
70+
71+
inv[2] = m[1] * m[6] * m[15] -
72+
m[1] * m[7] * m[14] -
73+
m[5] * m[2] * m[15] +
74+
m[5] * m[3] * m[14] +
75+
m[13] * m[2] * m[7] -
76+
m[13] * m[3] * m[6];
77+
78+
inv[6] = -m[0] * m[6] * m[15] +
79+
m[0] * m[7] * m[14] +
80+
m[4] * m[2] * m[15] -
81+
m[4] * m[3] * m[14] -
82+
m[12] * m[2] * m[7] +
83+
m[12] * m[3] * m[6];
1084

11-
#include <glm/glm.hpp>
12-
#include <glm/gtc/matrix_inverse.hpp>
13-
#include <glm/gtc/type_ptr.hpp>
85+
inv[10] = m[0] * m[5] * m[15] -
86+
m[0] * m[7] * m[13] -
87+
m[4] * m[1] * m[15] +
88+
m[4] * m[3] * m[13] +
89+
m[12] * m[1] * m[7] -
90+
m[12] * m[3] * m[5];
91+
92+
inv[14] = -m[0] * m[5] * m[14] +
93+
m[0] * m[6] * m[13] +
94+
m[4] * m[1] * m[14] -
95+
m[4] * m[2] * m[13] -
96+
m[12] * m[1] * m[6] +
97+
m[12] * m[2] * m[5];
98+
99+
inv[3] = -m[1] * m[6] * m[11] +
100+
m[1] * m[7] * m[10] +
101+
m[5] * m[2] * m[11] -
102+
m[5] * m[3] * m[10] -
103+
m[9] * m[2] * m[7] +
104+
m[9] * m[3] * m[6];
105+
106+
inv[7] = m[0] * m[6] * m[11] -
107+
m[0] * m[7] * m[10] -
108+
m[4] * m[2] * m[11] +
109+
m[4] * m[3] * m[10] +
110+
m[8] * m[2] * m[7] -
111+
m[8] * m[3] * m[6];
112+
113+
inv[11] = -m[0] * m[5] * m[11] +
114+
m[0] * m[7] * m[9] +
115+
m[4] * m[1] * m[11] -
116+
m[4] * m[3] * m[9] -
117+
m[8] * m[1] * m[7] +
118+
m[8] * m[3] * m[5];
119+
120+
inv[15] = m[0] * m[5] * m[10] -
121+
m[0] * m[6] * m[9] -
122+
m[4] * m[1] * m[10] +
123+
m[4] * m[2] * m[9] +
124+
m[8] * m[1] * m[6] -
125+
m[8] * m[2] * m[5];
126+
127+
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
128+
129+
if (det == 0)
130+
return false;
131+
132+
det = 1.0 / det;
133+
134+
for (i = 0; i < 16; i++)
135+
invOut[i] = inv[i] * det;
136+
137+
return true;
138+
}
14139

15140
Camera::Camera()
16141
{
@@ -255,13 +380,22 @@ void Camera::look()
255380
GLfloat viewMatrix[16];
256381
glGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);
257382

258-
glm::mat4 ConversionMatrix = glm::make_mat4(viewMatrix);
259-
glm::vec4 cameraPos4 = glm::inverse(ConversionMatrix) * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
260-
glm::vec3 CameraPos = glm::vec3(cameraPos4);
383+
/*glm::mat4 ConversionMatrix = glm::make_mat4(viewMatrix);
384+
glm::vec4 cameraPos4 = glm::inverse(ConversionMatrix) * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
385+
glm::vec3 CameraPos = glm::vec3(cameraPos4);*/
386+
387+
/*GLfloat CameraPos[4];
388+
CameraPos[0] = invMatrix[0] * 0.0f + invMatrix[4] * 0.0f + invMatrix[8] * 0.0f + invMatrix[12] * 1.0f;
389+
CameraPos[1] = invMatrix[1] * 0.0f + invMatrix[5] * 0.0f + invMatrix[9] * 0.0f + invMatrix[13] * 1.0f;
390+
CameraPos[2] = invMatrix[2] * 0.0f + invMatrix[6] * 0.0f + invMatrix[10] * 0.0f + invMatrix[14] * 1.0f;
391+
CameraPos[3] = invMatrix[3] * 0.0f + invMatrix[7] * 0.0f + invMatrix[11] * 0.0f + invMatrix[15] * 1.0f;*/
392+
393+
GLfloat invMatrix[16];
394+
InvertMatrix(viewMatrix, invMatrix);
261395

262-
x = CameraPos[0];
263-
y = CameraPos[1];
264-
z = CameraPos[2];
396+
x = invMatrix[12];
397+
y = invMatrix[13];
398+
z = invMatrix[14];
265399
}
266400

267401
bool Camera::see(float px, float py, float pz, float hsize)

0 commit comments

Comments
 (0)