QTラッパーを使用してOpenCV 3Dマトリックスからテクスチャをアップロードしようとしています。QTラッパーを使用して3Dテクスチャを正しくアップロードする
これは(テストを含む)私のコードです:
unsigned char * buffer = new unsigned char[m_vol_data.total()];
for (int i = 0; i < m_vol_data.size[0]; i ++)
for (int j = 0; j < m_vol_data.size[1]; j ++)
for (int k= 0; k < m_vol_data.size[2]; k ++)
{
buffer[i + m_vol_data.size[0] * (j + m_vol_data.size[2] * k)] = m_vol_data.at<uint8_t>(i, j, k);
// printf("%d, %d \n", m_vol_data.at<uint8_t>(i, j, k),buffer[i + m_vol_data.size[0] * (j + m_vol_data.size[2] * k)]);
}
m_texture = new QOpenGLTexture(QOpenGLTexture::Target3D);
m_texture->setSize(m_vol_data.size[0], m_vol_data.size[1], m_vol_data.size[2]);
m_texture->allocateStorage(QOpenGLTexture::Luminance, QOpenGLTexture::UInt8);
m_texture->setData(QOpenGLTexture::Luminance, QOpenGLTexture::UInt8, buffer);
m_vol_uploaded = true;
unsigned char * check = new unsigned char[m_vol_data.total()];
glGetTexImage(GL_TEXTURE_3D, 0, GL_RED, GL_UNSIGNED_BYTE, check);
for (int i = 0; i < 100; i++)
printf("%d\n", check[i]);
std::cout << m_vol_data.total() << std::endl;
最初に(コメント)プリントはすべての値が255(ダミーテスト)されて、私が期待したものを私に示しています。しかし、私のキューブはすべて黒で画面に表示されています。
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, "#version 410 core\n"
"in vec4 vPosition;\n"
"uniform mat4 pMatrix;\n"
"uniform mat4 mvMatrix;\n"
"smooth out vec3 uv;\n"
"void main() {\n"
" gl_Position = pMatrix * mvMatrix * vPosition;\n"
" uv = (vPosition.xyz + vec3(1.0, 1.0, 1.0))/2.0;\n"
"}");
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, "#version 410 core\n"
"in vec3 uv;\n"
"uniform sampler3D tex;\n"
"out vec4 fragColor;\n"
"void main(){\n"
" vec3 color = texture(tex, uv).rrr;\n"
" fragColor.rgb = color;\n"
"};");
ノー成功を収めて、問題をそれを理解しようとしている:第二の印刷は
0から255までの範囲、予期しない値を示し、これらは、シェーダです。どんな手がかりもありがたいです。ありがとう。