2013-06-20 13 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無關。

這是沒有的模塊及其着色器輸出: http://s1.directupload.net/images/130620/amr5qh3x.png

如果我啓用該模塊,這是相當奇怪的輸出: http://s14.directupload.net/images/130620/74qiwgyd.png

如果我禁用兩次調用glBindTexture,太陽粒子效果(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

解決這個問題:我創建了着色器之前食人魔::根創建我的窗戶。我已經改變了順序,現在它的工作。

相關問題