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