繁体   English   中英

在运行时更改纹理参数

[英]Changing texture parameters at runtime

我是OpenGL的初学者,并且为通用课程构建了一个小型引擎。 现在,我需要实现的一个约束/功能是在运行时更改纹理质量(插值)。

因此,而不是例如:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

它应该更改为mipmaps

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)

现在,我有一个Texture类,将其抽象化并加载图像并为纹理等创建ID。

我会做的:我会一一绑定游戏中的所有纹理,然后再次设置参数。

或者,如果我想影响所有纹理,是否有更高级或更快速的方法来实现?

在OpenGL 3.2和更高版本中,有纹理采样器对象,可以覆盖纹理本身中的采样参数。 您可以在这里使用它们。

如果希望所有纹理都使用相同的采样参数,将特别方便。 然后,您可以只创建一个采样器:

GLuint samplerId = 0;
glGenSamplers(1, &samplerId);
glSamplerParameteri(samplerId, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

然后,在进行纹理化时,除了常规的纹理绑定外,您还可以始终绑定此单个采样器对象。 如果您真的只有一个,并且想一直使用它,甚至可以一直保持它的绑定:

glBindSampler(GL_TEXTURE_2D, samplerId);

然后,您可以通过一次调用更改采样属性:

glSamplerParameteri(samplerId, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

如果绑定了采样器,则其参数将覆盖当前绑定的纹理中的相应值。 或用规范的话来说:

当采样器对象绑定到纹理单元时,其状态将取代绑定到该纹理单元的纹理对象的状态。 如果采样器名称零绑定到纹理单元,则当前绑定的纹理的采样器状态将变为活动状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM