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,所以不用设置了。

 

posted on 2018-10-12 17:51  mimido  阅读(163)  评论(0)    收藏  举报

导航