2012-07-02 3 views
2

저는 현재 C++에서 광선 추적을 배우려고합니다. 저는 두 권의 책에서 도움을 얻고 있습니다 : 하나는 Ray Tracing from the Ground Up by Kevin Suffern이고, 다른 하나는 Physically Based Rendering by Matt Pharr입니다. 이 두 권의 책은 기초 학습에 도움이되며, 나중에는 고급 학습 자료로도 활용할 수 있습니다.C++에서 광선 추적을위한 픽셀을 그리는 방법은 무엇입니까?

Suffern의 저서 사용자 인터페이스를 사용하여 기본 모양을 만들 수있었습니다. 그러나 모든 코드를 직접 작성하려고 할 때 상황이 너무 복잡해졌습니다. 나는 창문을 열어 픽셀을 채우는 법조차 모른다는 것을 깨달았다. 나에게 C++로 드로잉의 기초를 가르쳐 줄 수있는 좋은 리소스가 있으십니까?

답변

3

Windows로 그리는 대신 이미지 파일을 생성 할 수 있습니다. PPM 형식은 생성하기 가장 간단한 형식입니다. 브라우저는 일반적으로 PPM을 표시 할 수 있습니다. 사파리는 그렇다.

PNG 파일을 생성하려면 libpng을 사용하십시오. , http://www.libsdl.org/

+0

, PPM가하는 -

template<class T> class image_rgba { unsigned m_rows, m_cols; T *m_data; public: image_rgba(unsigned rows, unsigned columns) : m_rows(rows) , m_cols(columns) , m_data(new T[rows*columns*4]) {} ~image_rgba() { delete[] m_data; } typedef T pixel[4]; pixel index_pixel_ref(unsigned row, unsigned col) { assert(row<m_rows && col<m_cols); return m_data + (m_cols*row+col)*4; } } 

(... 최고의 의사로 치료 나는 위의 테스트를하지 않은 점에 유의) : 나는이 다음과 같은 일을 RGBA 픽셀 포맷을 추천 할 것입니다 .PNG 또는 .JPEG 파일을 지원하지 않습니다. 그 중 하나를 만들고 싶다면 어떻게해야합니까? –

+0

@MertToka, 내 대답을 편집했습니다. – lhf

+0

나는 그것을 보았다. 그러나 그것은 나에게 너무 복잡해 보인다. 그렇지 않으면 즐거운 밤을 보내야한다. 고마워, 나는 가까운 장래에 그것을 이해하려고 노력할 것이다. 그러나 libpng에 대한 간단한 소스를 알고 있다면 여전히 많은 도움을받을 수 있습니다. –

1

SDL은 당신을 위해 일한다 수도 있습니다. 필자는 Pharr 책이 Literate Programming의 호의적 인 어딘가에 자리 잡고있는 이것의 버전을 가지고있을 것으로 기대한다.

보다 구체적으로 : GUI API 및 이미지 파일 형식 라이브러리는 일반적으로 행 주요 배열 순서로 저장된 간단한 이미지 버퍼 데이터를 읽을 수 있습니다. 내가 알 수있는 바와 같이

0

당신은 당신의 자신의 이미지 버퍼를 할당 할 수 있습니다 그것은 당신의 픽셀을 작성한 다음/파일을 필요에 따라 창으로 그리는 저장 :

관련 문제