1

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

1 回答 1

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
    );
于 2012-06-19T16:25:57.233 回答