glTexImage2D显示强度图像

时间:2015-07-21 22:33:43

标签: arrays multidimensional-array access-violation

我正在使用glTexImage2D在OpenGL中显示图像,但是在数据类型方面遇到了一些麻烦......

我抓取的图像是一个较大的3D体积片段,而VolSize_pix结构只是给出了用于索引的体积尺寸:

unsigned _int8 *OrthoPlane;
OrthoPlane = new unsigned _int8[VolSize_pix.depth * VolSize_pix.length];
int OrthoPlaneIdx = 0;
int Halfway = (int)floor(VolSize_pix.width / 2);

///printf("Halfway: %d, VolSize_pix.length: %d\n", Halfway, VolSize_pix.length);

for (int VX = 0; VX < VolSize_pix.depth; VX++)
{
    for (int VY = 0; VY < VolSize_pix.length; VY++)
        {
            OrthoPlane[OrthoPlaneIdx] = (unsigned _int8)floor(Volume[VX][VY][Halfway]);
            OrthoPlaneIdx++;
        }
}

所以,正如你所看到的,它只是一个强度图像,而不是RGB。我试图将其传递到纹理OpenGL以显示2D图像,如下所示:

// Load texture
GLuint tex2;
glGenTextures(1, &tex2);
glActiveTexture(GL_TEXTURE0);
// tell opengl to use the generated texture name
glBindTexture(GL_TEXTURE_2D, tex2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
GLsizei width2 = VolSize_pix.length; GLsizei height2 = VolSize_pix.depth;
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width2, height2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, (GLvoid *)OrthoPlane);

由于某种原因,屏幕总是呈黑色。

我能够看到图像的唯一方法是我为OrthoPlane分配RGB数组(使用与R / G / B相同的强度值)作为浮点值。当我尝试使用无符号的_uint8时,我什么也得不到。如果我把它保持为浮动并尝试做强度,它也会失败。

有什么想法吗?

0 个答案:

没有答案