Webgl奇怪的渲染与简单的纹理

时间:2013-02-28 15:33:58

标签: javascript opengl-es webgl textures

我在自定义3D形状上渲染纹理时遇到了问题。

使用以下参数:

gl.bindTexture(gl.TEXTURE_2D, texture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);

它给了我这个结果:

result

更改以下参数:

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);

它给了我这个:

result2

使用以下参数:

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);

result3

我尝试更改纹理坐标,但没有成功,每个面部使用的是:     0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 10.0, 0.0

任何想法为什么一个三角形(实际上是平行面上的那个三角形)表现得很奇怪?

1 个答案:

答案 0 :(得分:0)

问题在于您使用的是具有不同点数的面孔 - 但仍然使用固定数量(4)的纹理坐标作为面部。由于一些面部有5个点,在某些时候纹理坐标会“移位”。

相反,您应该像顶点一样添加它们:

for (var j=0; j < face.length; j++){
    vertices...

     //generate texture coords, they could also be stored like the points
     textureCoords.push(points[face[j]][0] / 4);
     textureCoords.push((points[face[j]][1]+points[face[j]][2]) / 4);

http://jsfiddle.net/bNTkK/9/