繁体   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