簡體   English   中英

動態數組作為紋理GLSL

[英]Dynamic arrays as texture GLSL

我已經使用C ++ / OpenSceneGraph / GLSL集成,需要在着色器上處理動態數組。

我將vec3動態數據數組轉換為1D紋理,以uniform地傳遞給片段(我正在使用GLSL 1.3),如下所示:

osg::ref_ptr<osg::Image> image = new osg::Image; 
image->setImage(myVec3Array->size(), 1, 1, GL_RGBA8, GL_RGBA, GL_FLOAT, (unsigned char*) &myVec3Array[0], osg::Image::NO_DELETE);

// Pass the texture to GLSL as uniform
osg::StateSet* ss = scene->getOrCreateStateSet();
ss->addUniform( new osg::Uniform("vertexMap", texture) ); 

現在,我想在片段着色器上檢索vec3原始數組。 我該如何做? texture2D函數僅返回歸一化的值嗎?

Texture2D函數僅返回歸一化的值嗎?

否。它返回根據紋理的內部格式指定的值。

 image->setImage(myVec3Array->size(), 1, 1, GL_RGBA8, GL_RGBA, GL_FLOAT, (unsigned char*) &myVec3Array[0], osg::Image::NO_DELETE); ^^^^^^^^ 

GL_RGBA8是無符號歸一化整數格式(簡稱“ UNORM”)。 因此,紋理中的值是每通道8位的無符號整數,並且在對紋理進行采樣時, [0,255]映射為[0,1]

如果要使用非規范的浮點數,則必須使用某種適當的格式,例如GL_RGBA32F

暫無
暫無

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

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