opengl学习3
今天主要谈谈opengl的纹理使用方法。研究了一下,纹理的出现是为了对于大面积的像素进行渲染,而不必每次渲染时指定具体的像素。感觉更像是日常中精确的算术与统计学之间的关系一样。
在OpenGL中纹理的使用主要需要如下步骤:
1、 创建纹理对象;
2、 绑定纹理对象;
3、 对纹理对象属性进行设置;
4、 设置纹理对象数据;
5、 设置纹理坐标
6、 绘制
在下面将就如上6个步骤依次展开进行讲述。
1、 创建纹理对象
创建纹理通过函数glGenTextures来进行创建。例如:
glGenTextures(2, texture);
2、 绑定纹理对象,使用glBindTexture函数
glBindTexture(GL_TEXTURE_2D, texture[0]);
3、 对纹理对象属性进行设置;
设置环绕方式:
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);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4、 设置纹理对象数据;
纹理对象数据主要是读取图片等数据,然后将其与纹理对象对应起来
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
5、 设置纹理坐标
纹理坐标则通过VBO进行指定即可
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
glEnableVertexAttribArray(2);
6、 绘制
绘制时先激活纹理,再绑定纹理即可
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);
如果使用了多个纹理,则需要分别对纹理的ID进行指定:
glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0);
glUniform1i(glGetUniformLocation(ourShader.ID, "texture2"), 1);
如果是一个纹理,则对其使用默认的第一个texture1,所以不用设置了。
浙公网安备 33010602011771号