2014-11-29 1 views
1

OpenGL 및 glsl에서 광선 추적을 구현하여 .obj 파일에서 모델을 불러오고 싶습니다. 그러나 정확히 어떻게하는지 이해하지 못합니다. 전에 obj 파일을 사용했지만 래스터 화를 사용하여 렌더링했습니다. 지금까지 간단한 쉐이더 (평면, 구, 상자)를 렌더링하는 조각 쉐이더를 사용하여 간단한 광선 추적기를 구현했습니다. 문제는 광선 추적에서 객체와 교차점을 계산하고 있지만 조각 쉐이더에서도 정의됩니다.opengl/glsl에서 raytracing obj 파일

이것은 래스터 화를 사용하여 렌더링 한 방법입니다. 정점 데이터 (위치, 일반, uvs)를로드 한 후이를 VBO에 저장하고 VAO에 바인딩합니다. 이것들은 버텍스 쉐이더에 보내고 MVP 행렬과 곱해서 변환합니다. 그런 다음 음영 처리시 변형 된 정점을 프래그먼트 셰이더로 보냅니다. 그러나 이것이 광선 추적에 의해 구현하는 방법을 이해하지 못하는 부분입니다. 왜냐하면 이제는 꼭지점을 프래그먼트 셰이더의 입력으로 변환했기 때문에 메쉬 삼각형을 사용하여 광선 교차를 계산하는 방법을 모르겠습니다. 그럼 어떻게하는 거지?

+0

[장면 형상으로 텍스처를 사용하는 조각의 GLSL 광선 추적기] (https://stackoverflow.com/a/45140313/2521214)를 참조하십시오. – Spektre

답변

1

기본적으로 모든 조각에 대해 전체 장면과 광선 교차 테스트를 수행합니다. 따라서 조각 쉐이더에서 액세스 할 수 있고 충분한 공간을 제공하는 일부 데이터 구조로 장면을 인코딩하는 것이 문제입니다. 즉각적인 선택은 같은 크기의 3 개 구성 요소로 된 3 개의 1D 텍스처가 될 것입니다. 각 텍셀 인덱스에 대해 세 텍스처 중 세 개가 삼각형을 나타냅니다. 그런 다음 장면으로 캐스팅 된 각 광선 (즉, 모든 단편)에 대해 삼각형을 반복합니다.

좀 더 애호가를 원한다면 3 개의 3D 텍스처를 대신 사용할 수 있습니다. 삼각형 데이터를 텍스처의 오른쪽 영역에 배치하여 텍셀을 반복하도록 제한하고 LOD에 밉맵 레벨을 사용하고 스파 스 텍스처 저장소를 사용합니다 메모리 사용 공간을 줄입니다.