-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path3DObject.cpp
More file actions
90 lines (75 loc) · 1.37 KB
/
Copy path3DObject.cpp
File metadata and controls
90 lines (75 loc) · 1.37 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "stdafx.h"
#include "3DObject.h"
C3DObject::C3DObject()
{
m_colR = 0.0;
m_colG = 1.0;
m_colB = 0.0;
m_alpha = 1.0;
}
C3DObject::~C3DObject()
{
}
void C3DObject::Clear()
{
m_vecVertices.clear();
}
bool C3DObject::IsVisible(I3DProjector* pProjector) const noexcept
{
ATLASSERT(pProjector);
for (const auto& v : m_vecVertices)
{
if (pProjector->IsVisible(v))
{
return true;
}
}
return false;
}
glm::dvec3 C3DObject::GetBoundingBox() const
{
const glm::dvec3 r(1);
return r;
}
void C3DObject::RotateX(double lfDegree)
{
const glm::dvec3 myRotationAxis(1, 0, 0);
const glm::dmat4 c = glm::rotate((glm::dvec3::value_type)glm::radians(lfDegree), myRotationAxis);
for (auto& v : m_vecVertices)
{
v = c * v;
}
}
void C3DObject::MoveX(double lfTrans)
{
const glm::dvec3 vecTrans(lfTrans, 0, 0);
Move(vecTrans);
}
void C3DObject::MoveZ(double lfTrans)
{
const glm::dvec3 vecTrans(0, 0, lfTrans);
Move(vecTrans);
}
void C3DObject::Move(const glm::dvec3& vecTrans)
{
const glm::dmat4 c = glm::translate(vecTrans);
for (auto& v : m_vecVertices)
{
v = c * v;
}
}
void C3DObject::Move(const glm::dmat4& matTrans)
{
for (auto& v : m_vecVertices)
{
v = matTrans * v;
}
}
void C3DObject::Scale(double lfFactor)
{
const glm::mat4 matScaling = glm::scale(glm::dvec3(lfFactor, lfFactor, lfFactor));
for (auto& v : m_vecVertices)
{
v = matScaling * v;
}
}