Group Project Midterm Presentation (due by 11/11) submitted to e-learning
Midterm Project Demonstration (5 minutes)
2~3 page Report (single-space, 10-point font)
HW3
lab6 & lab7 & lab8 & lab9 코드 분석 및 예제를 사용하여 본인만의 3D hierarchical transformation object을 만들어온다. (Due by 11/4)
lab9
lab9-GeometryPositionColorOrientation-src
// Yaw/Pitch/Roll -> Rotation Matrix
glm::yawPitchRoll(yaw, pitch, roll) ;
float yaw, // by y-axis (in radians)
float pitch, // by x-axis (in radians)
float roll // by z-axis (in radians)
// R1 != R2
glm::mat4 R1, R2, Rx, Ry, Rz;
Ry = glm::rotate(glm::mat4(1), 60, glm::vec3(0, 1, 0));
Rx = glm::rotate(glm::mat4(1), 30, glm::vec3(1, 0, 0));
Rz = glm::rotate(glm::mat4(1), 45, glm::vec3(0, 0, 1));
R1 = Ry * Rx * Rz; // world coordinate system에서 rotation
R2 = glm::yawPitchRoll(60, 30, 45); // Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (YXZ). local coordinate system에서 rotation
lab8
lab8
SimpleSa
lab8-GeometryPositionColorHierachicalTransformation-src
-Simple Car (c-key)
-Solar System (s-key)
-Robot (r-key)
-Mobile (m-key)
-Geo (g-key)
-Simple Sa (k-key)
lab7
SimpleCube3D
lab7-GeometryPositionColorTransformationSimpleCube3D
Catmull Rom Spline
https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline
// Loop around the total time if necessary
if (elapsedTime >= endTime) {
if (loop) {
while (elapsedTime > endTime)
elapsedTime -= endTime;
}
else {
position = frames[frames.size() - 1].position;
return;
}
}
int i = 0;
// Find the index of the current frame
while (frames[i+1].time < elapsedTime) i++;
// Find the time since the beginning of this frame
elapsedTime -= frames[i].time;
// Find how far we are between the current and next frame (0 to 1)
float fraction = (float)(elapsedTime / (frames[i + 1].time - frames[i].time));
// Interpolate position and rotation values between frames
position = glm::catmullRom (
frames[wrap(i - 1, frames.size() - 1)].position,
frames[wrap(i, frames.size() - 1)].position,
frames[wrap(i + 1, frames.size() - 1)].position,
frames[wrap(i + 2, frames.size() - 1)].position,
fraction);
template<typename genType>
GLM_FUNC_QUALIFIER genType catmullRom(
genType const& v1,
genType const& v2,
genType const& v3,
genType const& v4,
typename genType::value_type const& s
) {
typename genType::value_type s2 = pow2(s);
typename genType::value_type s3 = pow3(s);
typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s;
typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2);
typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s;
typename genType::value_type f4 = s3 - s2;
return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2);
}
http://www.lighthouse3d.com/tutorials/maths/catmull-rom-spline/
f(x) = [1, x, x^2, x^3] * M * [v1, v2, v3, v4]
/* Coefficients for Matrix M */
#define M11 0.0
#define M12 1.0
#define M13 0.0
#define M14 0.0
#define M21 -0.5
#define M22 0.0
#define M23 0.5
#define M24 0.0
#define M31 1.0
#define M32 -2.5
#define M33 2.0
#define M34 -0.5
#define M41 -0.5
#define M42 1.5
#define M43 -1.5
#define M44 0.5
double catmullRomSpline(float x, float v1,float v2, float v3,float v4) {
double c1,c2,c3,c4;
c1 = M12*v2;
c2 = M21*v1 + M23*v3;
c3 = M31*v1 + M32*v2 + M33*v3 + M34*v4;
c4 = M41*v1 + M42*v2 + M43*v3 + M44*v4;
return(((c4*x + c3)*x +c2)*x + c1);
}
lecture10
lecture10
lecture10-orientation
midterm answer
모두들 수고하셨습니다. 중간고사 답안지입니다.
cg19-2-midterm-answer
HW2
HW2 문제풀이 및 lab4를 이용하여 답을 확인 (submit to e-learning due by 10/20)
hw2-vector-matrix-exercise
lab6
lab6-GeometryPositionColorSimpleCar-src
SimpleCar::SimpleCar()
{
angle = 0.0f; // 0~360
direction = 1.0f; // +/-1
position = glm::vec3(-3.0f, 0.0f, 0.0f);
init();
}
void SimpleCar::init()
{
body = Parallelepiped(glm::vec3(-1.0f, 0.0f, -1.0f), glm::vec3(2.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 2.0f), glm::vec3(0.0f, 1.0f, 0.0f));
body.setColor(glm::vec3(0.0f, 1.0f, 0.0f));
wheel[0] = Torus(glm::vec3(0.0f, 0.0f, .0f), 0.3f, 0.1f, 32, 16);
wheel[0].setColor(glm::vec3(1.0f, 0.0f, 0.0f));
wheel[1] = Torus(glm::vec3(0.0f, 0.0f, .0f), 0.3f, 0.1f, 32, 16);
wheel[1].setColor(glm::vec3(0.0f, 0.0f, 1.0f));
bodyTransform = glm::translate(glm::mat4(1.0f), position); // RHS x+ right
wheelTransform[0] = glm::translate(glm::mat4(1.0f), glm::vec3(-0.5f, 0.0f, -0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[1] = glm::translate(glm::mat4(1.0f), glm::vec3(-0.5f, 0.0f, 0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[2] = glm::translate(glm::mat4(1.0f), glm::vec3(0.5f, 0.0f, -0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[3] = glm::translate(glm::mat4(1.0f), glm::vec3(0.5f, 0.0f, 0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
}
void SimpleCar::draw(Program* p, glm::mat4& projection, glm::mat4& view, glm::mat4& model)
{
p->useProgram();
p->setUniform(“gProjection”, projection);
p->setUniform(“gView”, view);
glm::mat4 carMatrix = model * bodyTransform;
p->setUniform(“gModel”, carMatrix);
body.draw();
glm::mat4 wheelMatrix = model * bodyTransform * wheelTransform[0];
p->setUniform(“gModel”, wheelMatrix);
wheel[0].draw();
wheelMatrix = model * bodyTransform * wheelTransform[1];
p->setUniform(“gModel”, wheelMatrix);
wheel[0].draw();
wheelMatrix = model * bodyTransform * wheelTransform[2];
p->setUniform(“gModel”, wheelMatrix);
wheel[1].draw();
wheelMatrix = model * bodyTransform * wheelTransform[3];
p->setUniform(“gModel”, wheelMatrix);
wheel[1].draw();
}
bool SimpleCar::update(float deltaTime)
{
angle = angle – 180.0f * (float) (deltaTime) * 0.001f * direction;
position[0] = position[0] + (float) (deltaTime) * 0.001f * direction;
//std::cout << “position[0]=” << position[0] << std::endl;
if (position[0] * direction > 3)
direction = -direction;
bodyTransform = glm::translate(glm::mat4(1.0f), position); // RHS x+ right
wheelTransform[0] = glm::translate(glm::mat4(1.0f), glm::vec3(-0.5f, 0.0f, -0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[1] = glm::translate(glm::mat4(1.0f), glm::vec3(-0.5f, 0.0f, 0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[2] = glm::translate(glm::mat4(1.0f), glm::vec3( 0.5f, 0.0f, -0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
wheelTransform[3] = glm::translate(glm::mat4(1.0f), glm::vec3( 0.5f, 0.0f, 0.5f)) * glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));
return true;
}