Computer Graphics/HumanGL

HumanGL - 1. 초기 설정, 상자 띄우기

surkim 2024. 10. 17. 10:34

https://github.com/ksro0128/OpenglTuto

 

GitHub - ksro0128/OpenglTuto

Contribute to ksro0128/OpenglTuto development by creating an account on GitHub.

github.com

기존에 OpenGL을 공부하던 코드를 가져와 과제에 맞게 초기 설정을 해주었다. 이번 과제에서는 텍스처 적용을 하지 않을 계획이라 불필요한 라이브러리들을 제거했다. assimp, stb, glm과 같은 라이브러리를 모두 날리고, 상자만 띄우는 데 집중했다.

필요 없는 요소들을 정리하고 상자만 띄운 모습은 다음과 같다.

 

 

SCOP 과제에서 사용하던 sglm 라이브러리를 그대로 썼는데, 여기서 문제가 생겼다. 바로 lookat 계산식에서 오류가 발생했기 때문이다. 열 우선 연산을 해야 하는데, 실수로 행 우선 연산으로 계산된 식을 사용해 문제가 생긴 것이었다. 이 문제를 찾는 데 많은 시간이 걸렸고, 기본적인 수학 라이브러리에서 오류가 발생할 경우 얼마나 큰 문제가 생길 수 있는지를 직접 경험했다.

// mat4 lookAt(const vec3& eye, const vec3& center, const vec3& up) {
//     vec3 f = (center - eye).normalize();
//     vec3 s = cross(f, up).normalize();
//     vec3 u = cross(s, f);

//     mat4 result(1.0f);
//     result.m[0][0] = s.x;
//     result.m[0][1] = s.y;
//     result.m[0][2] = s.z;
//     result.m[1][0] = u.x;
//     result.m[1][1] = u.y;
//     result.m[1][2] = u.z;
//     result.m[2][0] = -f.x;
//     result.m[2][1] = -f.y;
//     result.m[2][2] = -f.z;
//     result.m[3][0] = -dot(s, eye);
//     result.m[3][1] = -dot(u, eye);
//     result.m[3][2] = dot(f, eye);
//     return result;
// }

mat4 lookAt(const vec3& eye, const vec3& center, const vec3& up) {
    vec3 f = (center - eye).normalize();
    vec3 s = cross(f, up).normalize();  
    vec3 u = cross(s, f);                 

    mat4 result(1.0f);
    result.m[0][0] = s.x;
    result.m[0][1] = u.x;
    result.m[0][2] = -f.x;

    result.m[1][0] = s.y;
    result.m[1][1] = u.y;
    result.m[1][2] = -f.y;

    result.m[2][0] = s.z;
    result.m[2][1] = u.z;
    result.m[2][2] = -f.z;

    result.m[3][0] = -dot(s, eye);
    result.m[3][1] = -dot(u, eye);
    result.m[3][2] = dot(f, eye);

    return result;
}

 

'Computer Graphics > HumanGL' 카테고리의 다른 글

HumanGL - 5. transform 행렬 계산식 변경  (0) 2024.10.18
HumanGL - 4. 문제 발견  (0) 2024.10.17
HumanGL - 3. 사람 그리기  (0) 2024.10.17
HumanGL - 2. Scale 적용 해보기  (1) 2024.10.17
HumanGL - 0. 과제 해석  (0) 2024.10.16