1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| GLuint texture; // 参数1生成几个,参数2是OpenGL中生成的纹理的标识符。 glGenTextures(1, &texture); // 绑定当前的纹理对象,后面的操作都是针对这个对象。 // PS:到这了的认知是OpenGL中都是先用API确定一个对象,然后后面的操作都是针对这个确定的对象的。 glBindTexture(GL_TEXTURE_2D, texture); // 设置texture参数, // 参数说明:设置的是2d纹理,当一个纹理被放大时(128的图放到512的多边形上面)采用什么算法来采用,采用线性过滤 // GL_NEAREST是采样是取最近的像素点的值,如果有多个应该是有个策略取的。 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 一样,只不过设置的是当一个大图放到小的多边形上时如何过滤 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 如果模型uv坐标超出1.0怎么采样, // GL_CLAMP设置的是到纹理坐标为1.0的位置取 // GL_REPEAT时,是uv.u取小数部分,比如1.1,那么采样就是0.1的位置。 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // 2d, 用mipmap哪个层级,纹理数据在显卡上是什么格式,宽、高、0、纹理数据在内存是什么格式,像素中每个分量(rgba)是什么格式,像素数据源 glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, pixelData); // 当前纹理重绑定,等于上面设置的不要再改了。 glBindTexture(GL_TEXTURE_2D, 0);
|