53#include <srCamera.hpp>
54#include <srMeshModel.hpp>
74 obj->setLocation(tm[0][3], tm[1][3], tm[2][3]);
76 srtm[0][0] = tm[0][0];
77 srtm[0][1] = tm[0][1];
78 srtm[0][2] = tm[0][2];
80 srtm[1][0] = tm[1][0];
81 srtm[1][1] = tm[1][1];
82 srtm[1][2] = tm[1][2];
84 srtm[2][0] = tm[2][0];
85 srtm[2][1] = tm[2][1];
86 srtm[2][2] = tm[2][2];
88 obj->setRotation(srtm);
107 srVector3 pos = obj->getLocation();
109 obj->getRotation(rot);
115 tm[0][0] = rot[0][0];
116 tm[0][1] = rot[0][1];
117 tm[0][2] = rot[0][2];
119 tm[1][0] = rot[1][0];
120 tm[1][1] = rot[1][1];
121 tm[1][2] = rot[1][2];
123 tm[2][0] = rot[2][0];
124 tm[2][1] = rot[2][1];
125 tm[2][2] = rot[2][2];
147 obj->setLocation(tm[0][3], tm[1][3], tm[2][3]);
149 srtm[0][0] = tm[0][0];
150 srtm[0][1] = tm[0][1];
151 srtm[0][2] = -tm[0][2];
153 srtm[1][0] = tm[1][0];
154 srtm[1][1] = tm[1][1];
155 srtm[1][2] = -tm[1][2];
157 srtm[2][0] = tm[2][0];
158 srtm[2][1] = tm[2][1];
159 srtm[2][2] = -tm[2][2];
161 obj->setRotation(srtm);
181 tm[0][3] = obj->getLocationX();
182 tm[1][3] = obj->getLocationY();
183 tm[2][3] = obj->getLocationZ();
186 obj->getRotation(srtm);
188 tm[0][0] = srtm[0][0];
189 tm[0][1] = srtm[0][1];
190 tm[0][2] = -srtm[0][2];
192 tm[1][0] = srtm[1][0];
193 tm[1][1] = srtm[1][1];
194 tm[1][2] = -srtm[1][2];
196 tm[2][0] = srtm[2][0];
197 tm[2][1] = srtm[2][1];
198 tm[2][2] = -srtm[2][2];
219 gerd->matrixMode(srGERD::MODELVIEW);
223 gerd->pushMultMatrix(srtm);
229 (*set_sr_tm)[0][0] = tm[0][0];
230 (*set_sr_tm)[0][1] = tm[0][1];
231 (*set_sr_tm)[0][2] = tm[0][2];
232 (*set_sr_tm)[0][3] = tm[0][3];
234 (*set_sr_tm)[1][0] = tm[1][0];
235 (*set_sr_tm)[1][1] = tm[1][1];
236 (*set_sr_tm)[1][2] = tm[1][2];
237 (*set_sr_tm)[1][3] = tm[1][3];
239 (*set_sr_tm)[2][0] = tm[2][0];
240 (*set_sr_tm)[2][1] = tm[2][1];
241 (*set_sr_tm)[2][2] = tm[2][2];
242 (*set_sr_tm)[2][3] = tm[2][3];
244 (*set_sr_tm)[3][0] = 0.0f;
245 (*set_sr_tm)[3][1] = 0.0f;
246 (*set_sr_tm)[3][2] = 0.0f;
247 (*set_sr_tm)[3][3] = 1.0f;
252 (*set_sr_tm)[0][0] = wtm[0][0];
253 (*set_sr_tm)[0][1] = wtm[0][1];
254 (*set_sr_tm)[0][2] = wtm[0][2];
255 (*set_sr_tm)[0][3] = wtm[0][3];
257 (*set_sr_tm)[1][0] = wtm[1][0];
258 (*set_sr_tm)[1][1] = wtm[1][1];
259 (*set_sr_tm)[1][2] = wtm[1][2];
260 (*set_sr_tm)[1][3] = wtm[1][3];
262 (*set_sr_tm)[2][0] = wtm[2][0];
263 (*set_sr_tm)[2][1] = wtm[2][1];
264 (*set_sr_tm)[2][2] = wtm[2][2];
265 (*set_sr_tm)[2][3] = wtm[2][3];
267 (*set_sr_tm)[3][0] = 0.0;
268 (*set_sr_tm)[3][1] = 0.0;
269 (*set_sr_tm)[3][2] = 0.0;
270 (*set_sr_tm)[3][3] = 1.0;
275 (*set_sr_tm)[0][0] = wtm[0][0];
276 (*set_sr_tm)[0][1] = wtm[0][1];
277 (*set_sr_tm)[0][2] = wtm[0][2];
278 (*set_sr_tm)[0][3] = wtm[0][3];
280 (*set_sr_tm)[1][0] = wtm[1][0];
281 (*set_sr_tm)[1][1] = wtm[1][1];
282 (*set_sr_tm)[1][2] = wtm[1][2];
283 (*set_sr_tm)[1][3] = wtm[1][3];
285 (*set_sr_tm)[2][0] = wtm[2][0];
286 (*set_sr_tm)[2][1] = wtm[2][1];
287 (*set_sr_tm)[2][2] = wtm[2][2];
288 (*set_sr_tm)[2][3] = wtm[2][3];
293 (*set_sr_tm)[0][0] = wtm[0][0];
294 (*set_sr_tm)[0][1] = wtm[0][1];
295 (*set_sr_tm)[0][2] = wtm[0][2];
296 (*set_sr_translation)[0] = wtm[0][3];
298 (*set_sr_tm)[1][0] = wtm[1][0];
299 (*set_sr_tm)[1][1] = wtm[1][1];
300 (*set_sr_tm)[1][2] = wtm[1][2];
301 (*set_sr_translation)[1] = wtm[1][3];
303 (*set_sr_tm)[2][0] = wtm[2][0];
304 (*set_sr_tm)[2][1] = wtm[2][1];
305 (*set_sr_tm)[2][2] = wtm[2][2];
306 (*set_sr_translation)[2] = wtm[2][3];
311 (*set_sr_tm)[0][0] = wtm[0][0];
312 (*set_sr_tm)[0][1] = wtm[0][1];
313 (*set_sr_tm)[0][2] = wtm[0][2];
314 (*set_sr_tm)[0][3] = wtm[0][3];
316 (*set_sr_tm)[1][0] = wtm[1][0];
317 (*set_sr_tm)[1][1] = wtm[1][1];
318 (*set_sr_tm)[1][2] = wtm[1][2];
319 (*set_sr_tm)[1][3] = wtm[1][3];
321 (*set_sr_tm)[2][0] = wtm[2][0];
322 (*set_sr_tm)[2][1] = wtm[2][1];
323 (*set_sr_tm)[2][2] = wtm[2][2];
324 (*set_sr_tm)[2][3] = wtm[2][3];
326 (*set_sr_tm)[3][0] = wtm[3][0];
327 (*set_sr_tm)[3][1] = wtm[3][1];
328 (*set_sr_tm)[3][2] = wtm[3][2];
329 (*set_sr_tm)[3][3] = wtm[3][3];
334 (*set_w3d_tm)[0][0] = srtm[0][0];
335 (*set_w3d_tm)[0][1] = srtm[0][1];
336 (*set_w3d_tm)[0][2] = srtm[0][2];
337 (*set_w3d_tm)[0][3] = srtm[0][3];
339 (*set_w3d_tm)[1][0] = srtm[1][0];
340 (*set_w3d_tm)[1][1] = srtm[1][1];
341 (*set_w3d_tm)[1][2] = srtm[1][2];
342 (*set_w3d_tm)[1][3] = srtm[1][3];
344 (*set_w3d_tm)[2][0] = srtm[2][0];
345 (*set_w3d_tm)[2][1] = srtm[2][1];
346 (*set_w3d_tm)[2][2] = srtm[2][2];
347 (*set_w3d_tm)[2][3] = srtm[2][3];
352 (*set_w3d_tm)[0][0] = srtm[0][0];
353 (*set_w3d_tm)[0][1] = srtm[0][1];
354 (*set_w3d_tm)[0][2] = srtm[0][2];
355 (*set_w3d_tm)[0][3] = srtm[0][3];
357 (*set_w3d_tm)[1][0] = srtm[1][0];
358 (*set_w3d_tm)[1][1] = srtm[1][1];
359 (*set_w3d_tm)[1][2] = srtm[1][2];
360 (*set_w3d_tm)[1][3] = srtm[1][3];
362 (*set_w3d_tm)[2][0] = srtm[2][0];
363 (*set_w3d_tm)[2][1] = srtm[2][1];
364 (*set_w3d_tm)[2][2] = srtm[2][2];
365 (*set_w3d_tm)[2][3] = srtm[2][3];
370 srtm_d[0].make(m[0][0]*n[0][0] + m[0][1]*n[1][0] + m[0][2]*n[2][0],
371 m[0][0]*n[0][1] + m[0][1]*n[1][1] + m[0][2]*n[2][1],
372 m[0][0]*n[0][2] + m[0][1]*n[1][2] + m[0][2]*n[2][2],
373 m[0][0]*n[0][3] + m[0][1]*n[1][3] + m[0][2]*n[2][3] + m[0][3]);
375 srtm_d[1].make(m[1][0]*n[0][0] + m[1][1]*n[1][0] + m[1][2]*n[2][0],
376 m[1][0]*n[0][1] + m[1][1]*n[1][1] + m[1][2]*n[2][1],
377 m[1][0]*n[0][2] + m[1][1]*n[1][2] + m[1][2]*n[2][2],
378 m[1][0]*n[0][3] + m[1][1]*n[1][3] + m[1][2]*n[2][3] + m[1][3]);
380 srtm_d[2].make(m[2][0]*n[0][0] + m[2][1]*n[1][0] + m[2][2]*n[2][0],
381 m[2][0]*n[0][1] + m[2][1]*n[1][1] + m[2][2]*n[2][1],
382 m[2][0]*n[0][2] + m[2][1]*n[1][2] + m[2][2]*n[2][2],
383 m[2][0]*n[0][3] + m[2][1]*n[1][3] + m[2][2]*n[2][3] + m[2][3]);
385 srtm_d[3].make(m[3][0]*n[0][0] + m[3][1]*n[1][0] + m[3][2]*n[2][0],
386 m[3][0]*n[0][1] + m[3][1]*n[1][1] + m[3][2]*n[2][1],
387 m[3][0]*n[0][2] + m[3][1]*n[1][2] + m[3][2]*n[2][2],
388 m[3][0]*n[0][3] + m[3][1]*n[1][3] + m[3][2]*n[2][3] + m[3][3]);
424 points[0].
Set(vpmin.
X, vpmax.
Y, 1.0);
425 points[4] = points[0];
428 points[1].
Set(vpmax.
X, vpmax.
Y, 1.0);
429 points[5] = points[1];
432 points[2].
Set(vpmin.
X, vpmin.
Y, 1.0);
433 points[6] = points[2];
436 points[3].
Set(vpmax.
X, vpmin.
Y, 1.0);
437 points[7] = points[3];
443 for (
int i = 0; i < 8; i++) {
467 Vector3 points[8],
float minz,
float maxz)
478 if (minz > zfar || maxz < znear) {
481 float startz = minz > znear ? minz : znear;
482 float endz = maxz < zfar ? maxz : zfar;
489 points[0].
Set(vpmin.
X, vpmax.
Y, 1.0);
490 points[4] = points[0];
493 points[1].
Set(vpmax.
X, vpmax.
Y, 1.0);
494 points[5] = points[1];
497 points[2].
Set(vpmin.
X, vpmin.
Y, 1.0);
498 points[6] = points[2];
501 points[3].
Set(vpmax.
X, vpmin.
Y, 1.0);
502 points[7] = points[3];
508 for (i = 0; i < 8; i++) {
void Get_View_Plane(Vector2 &set_min, Vector2 &set_max) const
void Get_Clip_Planes(float &znear, float &zfar) const
static WWINLINE void Transform_Vector(const Matrix3D &tm, const Vector3 &in, Vector3 *out)
const Matrix3D & Get_Transform(void) const
WWINLINE void Set(float x, float y, float z)
void Push_Multiply_Westwood_Matrix(srGERD *gerd, const Matrix3D &tm)
void Convert_Westwood_Matrix(const Matrix3D &wtm, srMatrix4 *set_sr_tm)
bool Get_ZClamped_Camera_Frustum_Corners(const CameraClass *camera, Vector3 points[8], float minz, float maxz)
void Multiply_Westwood_And_Surrender_Matrix(const Matrix3D &w3d_tm, const srMatrix4 &srtm_s, srMatrix4 &srtm_d)
void Get_Camera_Frustum_Corners(const CameraClass *camera, Vector3 points[8])
void Set_SR_Camera_Transform(srCamera *obj, const Matrix3D &transform)
void Convert_Surrender_Matrix(const srMatrix4 &srtm, Matrix3D *set_w3d_tm)
void Set_SR_Transform(srNode *obj, const Matrix3D &tm)
Matrix3D Get_SR_Camera_Transform(srCamera *obj)
Matrix3D Get_SR_Transform(srNode *obj)