2014-10-18 2 views
0

GLSL에 쉐이더를 작성하여 OpenGL을 레이 트레이서로 전환 할 수 있습니까? 다음과 같은 것.일반적인 방법으로 OpenGL을 사용하면서 GLSL로 광선 추적이 가능합니까?

glUseProgram(rayTracer); 
//than do anything you do in OpenGL normally 
glEnable(GL_LIGHT0); 
gl....//Set light parameters 
... 
//Draw The theme 
glDrawArray(.......); 

결과가 raytracing보다 렌더링됩니다. 예 : 물리적으로 정확한 조명

나는 이것을 시도했다. 그러나 레이 트레이싱을하기 위해 버텍스/프래그먼트 쉐이더에서 모든 삼각형 버텍스와 컬러/텍스처를 얻을 수는 없습니다.

이런 종류의 셰이더를 만들 수 있습니까? 가능하다면 어떻게 시작해야합니까?

+0

한마디로 : 아니요. OpenGL을 사용하여 광선 추적기를 구현하는 것이 가능하지만 어쨌든 상상할 수있는 방식으로 작동하지는 않습니다. – Damon

답변

1

아니요, 불가능합니다. Raytracing은 golbal 조명 모델입니다. 즉, 명백한 이유로 모든 물체와 광원으로 전체 장면에 액세스해야합니다. OpenGL이 구현하는 렌더링 피플 라인은 한 번에 하나의 프리미티브 이상을 볼 수 없습니다. GPU에서 raytricing을 할 수는 있지만 렌더링 알고리즘의 나머지 부분은 동일하게 유지하면서 드롭 인 대체로 사용할 수있는 셰이더를 작성하는 것과는 완전히 다릅니다. 데이터를 완전히 다시 정의해야하며 GL 그리기 기능이 더 이상 전혀 사용되지 않습니다.

0

OpenGl에서이 예제를 확인하십시오. http://www.openglsuperbible.com/example-code/

"raytracer"라는 예가 있습니다. 제대로 실행할 수 있도록 윈도우/비주얼 스튜디오 익스프레스에

, 당신은 "load_shaders()"기능 대신 "/" 의 "\\"디렉토리 구분 기호, 절대로 경로를 변경 할 수 있습니다.

그런 다음 +/- 키는 재귀 깊이, 소스 코드에서 찾을 수있는 다른 컨트롤 키를 변경합니다.

아마 예가 예상했던 것처럼 간단하지 않을 수도 있습니다. ... 여기에서 시작할 수 있습니다.

관련 문제