2013-06-20 3 views
0

OGRE, Bullet 및 Equalizer를 사용하여 가상 현실 환경을위한 응용 프로그램을 개발 중입니다. 내 렌더링 함수는 다음과 같습니다.머티리얼 스크립트를 사용하지 않고 OGRE 애플리케이션에서 GLSL 셰이더를 어떻게 사용합니까?

root->_fireFrameStarted(); 
    root->_fireFrameRenderingQueued(); 
    root->_fireFrameEnded(); 
    _window->update(false); 

이퀄라이저는 버퍼 스왑을 수행하지 않으므로 창을 버퍼 스왑하지 않습니다. 이 함수는 잘 작동하며, 파티클 시스템과 OGRE가 제공하는 다른 모든 멋진 것들을 사용할 수도 있습니다.

그러나 실험실의 투영 영역이 곡선이므로 GLSL 모듈 (우리는 Warp라고 부름)을 사용하여 모든 응용 프로그램에서 렌더링 출력을 왜곡하여 프로젝션 벽에 맞 춥니 다. 텍스처를 생성하고, 백 버퍼의 내용을 윈도우에 복사하고, 전체 윈도우를 덮는 왜곡 된 텍스처를 렌더링 할 때 워핑 셰이더를 적용하여이를 수행합니다. 소스 코드는 pastebin에서 찾을 수 있습니다. com/TjNJuHtC 이 모듈을 eq :: Window :: frameDrawFinish()라고 부르며 순수 OpenGL 응용 프로그램에서는 잘 작동하지만 OGRE에서는 제대로 작동하지 않습니다. 나는 glBindTexture에 두 통화를 사용하지 않으면 http://s14.directupload.net/images/130620/74qiwgyd.png

그리고 : 나는 모듈을 사용하는 경우 http://s1.directupload.net/images/130620/amr5qh3x.png

, 이것은 오히려 이상한 출력 :

이 모듈과 쉐이더없이 출력 태양 입자 효과 (flare.png)에 사용되는 텍스처가 화면에 렌더링됩니다 (나는 당신에게 보여줄 것이지만 두 개의 링크 만 사용할 수 있습니다).

관련성이 있다고 생각되는 모든 GL 상태 변수는 다른 응용 프로그램에서 동일한 값을가집니다. GL_READ_BUFFER, GL_DRAW_BUFFER, GL_RENDER_MODE, GL_CULL_FACE_MODE 및 GL_DOUBLEBUFFER을 확인했습니다.

다음과 같은 질문이 제기됩니다. 왜 glTexCopySubImage2D()에 대한 호출이 전혀 효과가없는 것 같습니까? 그리고 왜 모든 조각을 빨간색으로 만들겠다고해도 쉐이더는 아무 것도하지 않습니까?

보충 설명 : 전체 쉐이더를 머티리얼 스크립트에 넣고 OGRE가 처리하게하는 것은 옵션이 아닙니다.

+0

glCopyTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 0, 0, _width, _height)를 대체했습니다. glCopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 0,0, _width, _height, 0); 이제 버퍼의 내용을 텍스처로 가져옵니다. 그러나, 매우 간단한 조각 쉐이더 (gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0;)는 여전히 무시됩니다. 텍스처는 그대로 렌더링됩니다 ... – Sebastian

답변

0

해결 된 문제 : 오거 :: 루트가 내 창을 만들기 전에 셰이더를 만들었습니다. 주문을 변경했는데 이제는 작동합니다.