git clone https://github.com/ssloy/tinyrenderer.git &&
cd tinyrenderer &&
mkdir build &&
cd build &&
cmake .. &&
cmake --build . -j &&
./tinyrenderer ../obj/diablo3_pose/diablo3_pose.obj ../obj/floor.obj
렌더링된 이미지는 framebuffer.tga
에 저장됩니다.
GitHub용 무료 온라인 개발 환경인 Gitpod에서 프로젝트를 열 수 있습니다.
열 때 편집기는 프로그램을 컴파일 및 실행하고 결과 이미지를 편집기 미리보기에서 엽니다. 편집기에서 코드를 변경하고 스크립트를 다시 실행하면(터미널 기록 사용) 업데이트된 이미지를 볼 수 있습니다.
내 소스 코드는 관련이 없습니다. Wiki를 읽고 자신만의 렌더러를 구현해 보세요. 모든 작은 세부 사항을 겪어야만 무슨 일이 일어나고 있는지 알게 될 것입니다.
이 기사 시리즈에서는 OpenGL의 복제본(훨씬 단순화된 것)을 작성하여 OpenGL이 어떻게 작동하는지 보여주고 싶습니다. 놀랍게도 저는 OpenGL/DirectX 학습의 초기 장애물을 극복하지 못하는 사람들을 자주 만납니다. 그래서 나는 짧은 강의 시리즈를 준비했고 그 후에 학생들은 꽤 좋은 렌더러를 보여주었습니다.
따라서 작업은 다음과 같이 공식화됩니다. 타사 라이브러리(특히 그래픽 라이브러리)를 사용하지 않고 다음 그림과 같은 결과를 얻습니다.
경고: 이것은 OpenGL 라이브러리의 구조를 느슨하게 반복하는 교육 자료입니다. 소프트웨어 렌더러가 됩니다. OpenGL용 애플리케이션 작성 방법을 보여주고 싶지는 않습니다. OpenGL이 어떻게 작동하는지 보여주고 싶습니다. 나는 이것을 이해하지 않고서는 3D 라이브러리를 사용하여 효율적인 애플리케이션을 작성하는 것이 불가능하다고 깊이 확신합니다.
최종 코드를 500줄 정도 만들어 보겠습니다. 내 학생들이 그러한 렌더러를 만들기 시작하려면 10~20시간의 프로그래밍 시간이 필요합니다. 입력에서는 다각형 와이어 + 텍스처가 있는 그림이 포함된 테스트 파일을 얻습니다. 출력에서는 렌더링된 모델이 없는 그래픽 인터페이스를 얻게 되며 프로그램은 단순히 이미지를 생성합니다.
목표는 외부 종속성을 최소화하는 것이므로 학생들에게 TGA 파일 작업을 허용하는 수업을 하나만 제공합니다. RGB/RGBA/흑백 형식의 이미지를 지원하는 가장 간단한 형식 중 하나입니다. 따라서 시작점으로 그림을 사용하여 작업하는 간단한 방법을 알아보겠습니다. 맨 처음부터 사용할 수 있는 유일한 기능(이미지 로드 및 저장 외에)은 한 픽셀의 색상을 설정하는 기능입니다.
선분과 삼각형을 그리는 기능은 없습니다. 우리는 이 모든 것을 손으로 해야 합니다. 학생들과 병행하여 작성한 소스 코드를 제공합니다. 그러나 이것은 말이 되지 않기 때문에 사용을 권장하지 않습니다. 전체 코드는 GitHub에서 사용할 수 있으며 여기에서 제가 학생들에게 제공하는 소스 코드를 찾을 수 있습니다.
# include " tgaimage.h "
const TGAColor white = TGAColor( 255 , 255 , 255 , 255 );
const TGAColor red = TGAColor( 255 , 0 , 0 , 255 );
int main ( int argc, char ** argv) {
TGAImage image ( 100 , 100 , TGAImage::RGB);
image. set ( 52 , 41 , red);
image. write_tga_file ( " output.tga " );`
return 0 ;
}
output.tga는 다음과 같아야 합니다.