Подписанные отрицательные значения текстуры обнуляются
Я пытаюсь использовать 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'в памяти GPU, и я подтвердил, что все отрицательные вокселы ограничены до нуля.
1 ответ
Ваша проблема в том, что вы используете GL_LUMINANCE, который нормализован. Используйте ненормализованные форматы текстур. Вы можете найти их здесь http://www.opengl.org/wiki/Image_Format