첫 3번의 평가를 마쳤다. 결과는 아쉽게도 Fail이다. 구현 자체는 잘 되었으나, obj
파일 파싱 부분에서 기본적인 실수를 범했다 ㅠㅠ. 그로 인해 중요한 오류들이 발생했다.
1. f 인덱스 에러 처리 문제
첫 번째 문제는 obj
파일의 f
인덱스가 정상적인 범위를 벗어나는 경우에 대한 에러 처리를 하지 않았다는 점이다. 인덱스가 v
(버텍스 개수)를 초과하거나 음수값이 들어올 때 에러를 처리해주지 않아서, 나중에 벡터에서 해당 인덱스를 참조하려 할 때 segmentation fault가 발생했다.
이것은 아주 치명적인 실수였다. 분명 인덱싱하는 과정에서 한 번쯤 고려했어야 했는데 깜빡하고 처리하지 않았다.
2. 파일 확장자 확인 오류
두 번째 실수는 완전히 놓친 부분이었다. 아래와 같은 코드로 .obj
파일 여부를 확인하는 과정에서 문제가 발생했다:
auto result = LoadTextFile(filename);
if (!result.has_value())
return false;
size_t lastOfPointIndex = filename.find_last_of(".");
std::string obj = filename.substr(lastOfPointIndex);
if (obj != ".obj") {
std::cerr << "failed to load model: " << filename << " is not a Wavefront OBJ file" << std::endl;
return false;
}
파일이 존재하는 것을 확인한 후 확장자가 .obj
인지 검사했는데, 파일 경로에 점(.)이 없는 경우 segmentation fault 가 발생했다.
처음엔 경로명이 항상 ./folder/file.obj
처럼 올 것이라 가정했고, 경로에 점이 없을 수 있다는 점을 고려하지 않았다. 이는 완벽한 테스트 부족에서 비롯된 실수다. 경로에 점이 없는 상황을 전혀 테스트하지 않았기 때문에 이 오류가 발생했다.
앞으로의 개선 방향
그래도 다행히 정상적인 파일이 주어졌을 때는 기능상 큰 문제가 없었다. 단지 이번에 드러난 파싱 에러 처리 부분만 수정하면, 다음 평가에서는 무난히 통과할 수 있을 것 같다.
이론적인 부분에서의 아쉬움
또한, 내가 실무적인 부분에 너무 집중한 나머지 이론적인 부분에서 질문을 받았을 때 명확한 답변을 하지 못한 점도 아쉬웠다. 특히 GLAD 라이브러리 사용에 관해 "왜 GLAD를 사용하는가?"라는 질문에 충분히 설명하지 못했다. 그냥 GL 함수를 사용하려면 GLAD가 필요하다는 것만 알고 있었고, 그 이상의 깊이 있는 설명은 부족했다.
이번 과제는 그래픽스의 첫 번째 과제이기 때문에 이론적으로도 더 탄탄하게 공부하고 넘어가야겠다는 생각이 들었다. 앞으로는 실무뿐만 아니라 이론적인 부분도 꼼꼼히 준비해서 더 완벽한 프로젝트를 만들 수 있도록 해야겠다.
다음 평가는 무난하게 통과될 것으로 예상되어, 사실상 SCOP 프로젝트에 대한 포스팅은 여기서 마무리하도록 하겠다.
다음 그래픽스 과제하러 가야지
'Computer Graphics > SCOP' 카테고리의 다른 글
SCOP - 6. glm 대체하는 sglm 만들기 (0) | 2024.10.04 |
---|---|
SCOP - 5. stb 대체하는 bmp 로더 만들기 (0) | 2024.09.29 |
SCOP - 4. assimp 대체 라이브러리 만들기 (1) (0) | 2024.09.29 |
SCOP - 3. assimp 대체 라이브러리 만들기 (0) (0) | 2024.09.29 |
SCOP - 2. 랜덤한 vertex 색 적용 및 texture 적용 (0) | 2024.09.25 |