2014-06-18 123 views
2

我已經寫了大量的 OpenSceneGraph的和GLSL 330光線和陰影

#version 330 core 

GLSL着色器,我想用OSG的(OSG)3.2.0架構重用一起,並嘗試找出如何從我需要通過制服傳入的OSG中獲得狀態,以及如何設置它們而不必更改經過充分測試的着色器代碼,以及如何填充任意命名的屬性。

此(140版本時,OpenGL 3.1) http://trac.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/examples/osgsimplegl3/osgsimplegl3.cpp

和這個(版本400) http://trac.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/examples/osgtessellationshaders/osgtessellationshaders.cpp

例如引起混疊某些屬性和均勻的名稱爲 「osg_」 的概念,但我倒是喜歡用任意名字制服,

uniform mat4 uMVMatrix; 
/*...*/ 

,並指,還是讓OSG參考,由他們的號碼屬性而已,所以某事像這樣

/*...*/ 
layout(location = 0) in vec4 aPosition; 
layout(location = 1) in vec3 aNormal; 
layout(location = 2) in vec2 aST; 
在我的遺產着色器使用

,我想了OSG框架,它已經維持了「可繪製區域」,或VBO來填充,至少,使用API​​調用並自己做。

另外,我想通過場景圖和訪客填充燈光和shawdowmaps的制服, SG中的「某處」和「某種程度」必須將light和esp陰影信息彙總爲默認陰影,所以我只想簡單地使用這些數據並根據自己的自定義着色器進行調整。

因此,根本的問題是

如何從OSG內填充任意 GLSL 330個着色器與數據,而不必重新發送到冗餘均勻分配 - 提供我的「U [..]黑客帝國」手動除到由OSG設置的「osg _ [...]」統一 - 或更改着色器源中的屬性名稱?

回答

0

我只是偶然發現了this,事實證明,你可以用你自己的名字畢竟,如果你只是指定佈局位置(到目前爲止我只試了頂點位置,所以你可能有照顧使用正確的佈局位置爲OSG將指定,在0即頂點位置,在1正常(未完成the example of the link雖然))的

layout (location = 0) in vec3 vertex; 

這就夠用了着色器命名爲頂點的變量。

該鏈接還提供了一個使用矩陣自定義名稱的示例:您創建一個osg :: Uniform :: Callback類,將矩陣上傳到統一。當你創建osg :: Uniform對象時,你指定你選擇的名字並添加回調。