0
我想在QGLWidget中顯示OptixSDK的sample6。在QGLWidget中顯示OptiX sample6
我讀過的Nvidia OptiX Forum的話題,但我沒有獲得成功,因爲unfortunalety我不知道我應如何重寫paintGL() 方法。
起初我只是試圖讀取sample6的OutputBuffer中,並在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");
保存它和方法在Nvidia OptiX Forum提到貝RoboMod,但在這兩種我得到廢話的黑色畫面。不過,如果我使用提供的功能sutil將輸出保存在.ppm文件中,一切似乎都正確。
所以我的問題是如何正確地從OptiX輸出緩衝區獲取openGL場景。
通過直接構建QImage和你的QImage :: Format_ARGB32,我得到了正確的結果。 –