写一个自己的加载、绑定、设置纹理应用方式的函数

我用的stb_image.h加载图片到程序中,它下载地址和配置方式可见https://blog.csdn.net/derbi123123/article/details/105610298

加载、绑定、设置纹理应用方式的函数:

unsigned int loadTexture(char const * path)
{
	//纹理也是使用ID引用的。让我们来创建一个
	//glGenTextures函数首先需要输入生成纹理的数量,
	//然后把它们储存在第二个参数的unsigned int数组中
	//(我们的例子中只是单独的一个unsigned int)
    unsigned int textureID;
    glGenTextures(1, &textureID);

    int width, height, nrComponents;
    //要使用stb_image.h加载图片,我们需要使用它的stbi_load函数:
    unsigned char *data = stbi_load(path, &width, &height, &nrComponents, 0);
    //首先接受一个图像文件的位置作为输入。
    //接下来它需要三个int变量作为它的第二、第三和第四个参数
    //stb_image.h将会用图像的宽度、高度和颜色通道的个数填充这三个变量。
    //我们之后生成纹理的时候会用到的图像的宽度和高度的。
    if (data)
    {
        GLenum format;
        //根据上面得到颜色通道的个数调整颜色显示方式
        if (nrComponents == 1)
            format = GL_RED;
        else if (nrComponents == 3)
            format = GL_RGB;
        else if (nrComponents == 4)
            format = GL_RGBA;
		//我们需要绑定纹理,让之后任何的纹理指令都可以配置当前绑定的纹理
        glBindTexture(GL_TEXTURE_2D, textureID);
        //生成2D纹理
        glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
        //为当前绑定的纹理自动生成所有需要的多级渐远纹理
        glGenerateMipmap(GL_TEXTURE_2D);
		//纹理环绕方式
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        //纹理过滤
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

        stbi_image_free(data);
    }
    else
    {
        std::cout << "Texture failed to load at path: " << path << std::endl;
        stbi_image_free(data);
    }

    return textureID;
}

关于纹理的函数并不是这里的重点,还有很多设置纹理性质的参数,以及对上面纹理函数的说明还是要自己查并体会。

在程序中,我们只需要:unsigned int 纹理的ID = loadTexture("纹理图片的路径");
当然,别忘了在绘制前绑定相应的纹理让OpenGL知道你要应用哪副纹理到物体上:

glActiveTexture(GL_TEXTURE0);//当前物体上的第0幅纹理
glBindTexture(GL_TEXTURE_2D, 纹理ID);
//如果一个物体要应用多幅纹理接着按顺序开启并绑定就行了

可能在不同情况下要修改一些参数,不过所需要的主要函数就这些了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值