我正在阅读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
    }

最佳答案

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
    );

关于c++ - 替换glaux功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11092974/

10-13 06:49