C++ opengl 纹理过滤之GL_REPEAT

源码还是这个博文里面的

https://blog.csdn.net/qq78442761/article/details/81228557

程序运行截图如下:

repeat犹如字面意思那样会重复,当几何纹理坐标大于1.0的时候,他取的纹理坐标的值位于纹理坐标减去1.0的位置,如纹理坐标是1.1的时候,他取的颜色的值是0.1。所以1.0和2.0一样,1.1和0.1一样,所以就会重复,就向字面意思那样。

修改的源码如下:

GLuint CreateTexture2D(unsigned char*pixelData, int width, int height, GLenum type) {
	GLuint texture;
	glGenTextures(1, &texture);
	glBindTexture(GL_TEXTURE_2D, texture);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, pixelData);
	glBindTexture(GL_TEXTURE_2D, 0);
	return texture;
}
void Draw() {
	glClearColor(0.1f, 0.4f, 0.6f, 1.0f);
	glClear(GL_COLOR_BUFFER_BIT);
	glEnable(GL_TEXTURE_2D);	//开启2D纹理
	glBindTexture(GL_TEXTURE_2D, texture);//将当前纹理设置为新创建的纹理对象
	glBegin(GL_QUADS);
	glColor4ub(255, 255, 255, 255);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(-0.1f, -0.1f, -0.4f);
	glTexCoord2f(2.0f, 0.0f);
	glVertex3f(0.1f, -0.1f, -0.4f);
	glTexCoord2f(2.0f, 2.0f);
	glVertex3f(0.1f, 0.1f, -0.4f);
	glTexCoord2f(0.0f, 2.0f);
	glVertex3f(-0.1f, 0.1f, -0.4f);
	glEnd();
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81229432