Computer Graphics/SCOP

SCOP - 7. 평가 피드백

surkim 2024. 10. 9. 09:05

첫 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 프로젝트에 대한 포스팅은 여기서 마무리하도록 하겠다.

 

다음 그래픽스 과제하러 가야지