我正在尝试使用3D签名纹理进行体积渲染。问题是当在着色器中访问时,其值为负的所有体素都被钳位为零。 这就是我创建图像和设置3D纹理的方法:
char* volumeData = LoadVolume();
osg::ref_ptr<osg::Texture3D> volumeTexture = new osg::Texture3D;
osg::ref_ptr<osg::Image> volumeImage =new Image; volumeImage->setImage(textureWidth,textureHeight,textureDepth,GL_LUMINANCE16,GL_LUMINANCE ,GL_SHORT,volumeData,Image::AllocationMode::USE_NEW_DELETE);
volumeTexture->setImage(volumeImage);
我尝试了gDebugger来阅读textels值&#39;在GPU内存中,我确认所有负体素都被钳制为零。
答案 0 :(得分:0)
您的问题是您使用的是GL_LUMINANCE,它是规范化的。使用非规范化纹理格式。你可以在这里找到它们 http://www.opengl.org/wiki/Image_Format