[英]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.