5

我需要在单个元素中重复纹理。在 WebGL 中甚至有可能吗?

我尝试了以下任一方法,但没有运气。

ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.CLAMP_TO_EDGE);
ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.CLAMP_TO_EDGE);

ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.REPEAT);
ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.REPEAT);

谢谢你的帮助!

4

2 回答 2

6

重要的是要知道这些参数是您必须在每个纹理上设置的东西,它们不是全局设置。所以你的代码应该看起来像这样:

gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
// Set up more texture state, like filter modes...

当然,调用 teximage2D 时不必这样做,重要的是你已经先绑定了合适的纹理。如果您以这种方式设置换行但仍然无法正常工作,则您可能正在查看驱动程序错误。

也就是说,我记得默认的纹理环绕模式应该是 REPEAT,所以我不确定你为什么会遇到问题。

于 2011-10-10T02:40:20.443 回答
2

一些浏览器-操作系统-GPU 组合只允许您在二次幂纹理上设置 gl.REPEAT。截至 2016 年,Safari-El Capitan-HD4000 的情况仍然如此。

于 2016-02-28T00:05:06.873 回答