簡體   English   中英

OpenSceneGraph和GLSL 330陰影

[英]OpenSceneGraph and GLSL 330 light and shadows

我寫了很多

#version 330 core

我想與OpenSceneGraph(OSG)3.2.0框架一起重用的GLSL着色器,並嘗試弄清楚如何從需要通過制服傳遞的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框架填充它已經為“ Drawables”維護的vbo,或者至少使用API​​調用自己完成。

另外,我想通過場景圖和訪客來填充燈光和陰影貼圖的制服。 SG中的“某處”和“不知何故”必須匯總燈光和esp陰影信息以用於默認陰影,因此我只想使用此數據並將其調整為適合我的自定義着色器的位置。

所以根本的問題是

如何用OSG內部的數據填充任意 GLSL 330着色器,而不必重新發送冗余的統一分配-除了OSG設置的“ osg _ [...]”統一外,手動提供我的“ u [.. Matrix]”-或更改着色器源中的屬性名稱?

我只是偶然發現了這一點 ,事實證明,如果您只是指定布局位置,那么您畢竟可以使用自己的名稱(到目前為止,我僅嘗試將其用於頂點位置,因此您可能必須注意使用正確的布局osg會指定位置,即頂點位置為0,法線位置為1(盡管鏈接示例未完成)

layout (location = 0) in vec3 vertex;

這足以在着色器中使用名為vertex的變量。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM