更换glaux功能

时间:2012-06-19 00:43:23

标签: c++ opengl

我正在阅读NeHe的教程,当涉及到凹凸贴图时,我遇到了一个问题。到目前为止,我一直在使用SOIL库将图像文件加载到OpenGL中,效果很好。但凹凸贴图教程使用指向图像数据的指针来逐像素地修改图像的颜色。据我所知,我不能用SOIL库做到这一点。现在有一个很好的方法来解决这个问题,因为不推荐使用glaux吗?显然我们试图将alpha通道设置为像素颜色的红色分量的值。另外需要注意的是我们将这些加载到一个char数组中,因为c ++并不关心字节和char之间的区别(它们的大小是相同的吗?)还是还有其他一些东西我都缺少这个?

// Load The Logo-Bitmaps
if (Image=auxDIBImageLoad("Data/OpenGL_ALPHA.bmp")) {
    alpha=new char[4*Image->sizeX*Image->sizeY];
    // Create Memory For RGBA8-Texture
    for (int a=0; a<Image->sizeX*Image->sizeY; a++)
        alpha[4*a+3]=Image->data[a*3];               // Pick Only Red Value As Alpha!
    if (!(Image=auxDIBImageLoad("Data/OpenGL.bmp"))) status=false;
    for (a=0; a<Image->sizeX*Image->sizeY; a++) {
        alpha[4*a]=Image->data[a*3];             // R
        alpha[4*a+1]=Image->data[a*3+1];         // G
        alpha[4*a+2]=Image->data[a*3+2];         // B
    }

1 个答案:

答案 0 :(得分:1)

SOIL_load_image()应该为您提供原始图像位:

/**
    Loads an image from disk into an array of unsigned chars.
    Note that *channels return the original channel count of the
    image.  If force_channels was other than SOIL_LOAD_AUTO,
    the resulting image has force_channels, but *channels may be
    different (if the original image had a different channel
    count).
    \return 0 if failed, otherwise returns 1
**/
unsigned char*
    SOIL_load_image
    (
        const char *filename,
        int *width, int *height, int *channels,
        int force_channels
    );