|
请各位指教一二吧,问题是这样的
我采用osg和GLSL联合编程,有些数据需要在可编程管线中进行计算,算完了之后得到一个二维的浮点数据,然后把该数据传回到CPU中,做进一步处理。
遇到的问题是:传回来的数据不对,比如在片段着色程序中计算的结果为10.
void main()
{
vec4 color=texture2D(textur,gl_TexCoord[0].st);
gl_FragColor=10.0f;//vec4(255,0,245,255);
}
当进行渲染到纹理操作后,得到的二维浮点图像除了背景为0值以外,其他值都为1.0,而不是我想要的10.0
渲染到纹理的部分代码如下
camera->setRenderOrder(osg::Camera:RE_RENDER);
camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
osg::ref_ptr<osg::Image> image = new osg::Image;
image->allocateImage(100,100,1,GL_LUMINANCE,GL_FLOAT);
camera->attach(osg::Camera::COLOR_BUFFER,image.get());
根据输出结果可以推断,这样得到的二维浮点图像数据范围在(0,1)之间,而不是我想要的浮点范围内所有数据,请问
我该怎么办?我觉得比较关键的一句代码是
image->allocateImage(100,100,1,GL_LUMINANCE,GL_FLOAT);
可是该怎么改呢?
另外一个问题是这句代码
vec4 color=texture2D(textur,gl_TexCoord[0].st);
我想知道这个color的范围是什么,是(0,1)还是(0,255),这里texture纹理采用的是读入了bMP格式的rgb图像。
osg中数据范围变来变去,我都搞不清楚它们的范围了,求清楚的大神指点一下吧,跪谢! |
|