Показать OptiX sample6 в QGLWidget
Я хочу отобразить sample6 OptixSDK в QGLWidget.
Я читал эту тему на форуме Nvidia OptiX, но я не продвигаюсь вперед, потому что, к сожалению, я понятия не имею, как переопределить метод paintGL().
Сначала я просто попытался прочитать выходной буфер sample6 и сохранил его в QImage
QImage img(m_width,m_height,QImage::Format_RGB32);
QColor color;
int idx;
void* data = m_outputBuffer->map();
typedef struct { float r; float g; float b; float a;} rgb;
rgb* rgb_data = (rgb*)data;
for(unsigned int i=0; i<m_width*m_height; ++i){
std::cout<<rgb_data[i].r<<","<<rgb_data[i].g<<","<<rgb_data[i].b<<std::endl;
float red = rgb_data[i].r; if(red>1.0) red=1.0;
float green = rgb_data[i].g; if(green>1.0) green=1.0;
float blue = rgb_data[i].b; if(blue>1.0) blue=1.0;
float alpha = rgb_data[i].a; if(alpha>1.0) alpha=1.0;
color.setRgbF(red,green,blue,alpha);
idx = floor((float)i/m_height);
img.setPixel(i-(idx*m_height), idx, color.rgb());
}
m_outputBuffer->unmap();
img.save("optixSampleSix.png","PNG");
и метод, упомянутый bei RoboMod на форуме Nvidia OptiX, но в обоих случаях я получаю черную картину чепухи. Тем не менее, если я использую функции, предоставленные sutil, для сохранения вывода в файле.ppm, все кажется правильным.
Поэтому мой вопрос заключается в том, как правильно перейти из выходного буфера OptiX в визуализированную сцену openGL.
1 ответ
Решение
Как насчет создания QImage напрямую?
uchar* data = (uchar *)m_outputBuffer->map();
QImage img(data, m_width, m_height, QImage::Format_ARGB32);
// or maybe Format_RGBA8888 would work for you.. you have to check docs
m_outputBuffer->unmap();
img.save("optixSampleSix.png","PNG");