2012-08-08 85 views
1

使用帧缓冲 当渲染纹理出现颠倒时,这里是顶点和纹理坐标。 顺便说呈现,而无需创建帧缓冲区呈现质感correctelyOpengl es渲染为纹理出现颠倒

private final float[] mVerticesData = 
    { 
      -1f, 1f, 0.0f, // Position 0 
      0.0f, 0.0f, // TexCoord 0 
      -1f, -1f, 0.0f, // Position 1 
      0.0f, 1.0f, // TexCoord 1 
      1f, -1f, 0.0f, // Position 2 
      1.0f, 1.0f, // TexCoord 2 
      1f, 1f, 0.0f, // Position 3 
      1.0f, 0.0f // TexCoord 3 
    }; 

任何帮助,请... 感谢

回答

4

当将2D纹理图像上传到OpenGL时,即使通常图像从上到下存储在内存中,它仍然希望从下到上指定数据。你似乎颠倒了你的纹理坐标来解决这个问题。

而是应该将它上传到OpenGL的前翻转的纹理数据,并保持你的纹理坐标不变。如果你这样做,相同的纹理坐标适用于图像和FBO纹理。

因此,解决办法是调用GLUtils.texImage2D前翻转的位图和写你的顶点作为

private final float[] mVerticesData = 
    { 
     -1f, 1f, 0.0f, // Position 0 
     0.0f, 1.0f, // TexCoord 0 
     -1f, -1f, 0.0f, // Position 1 
     0.0f, 0.0f, // TexCoord 1 
     1f, -1f, 0.0f, // Position 2 
     1.0f, 0.0f, // TexCoord 2 
     1f, 1f, 0.0f, // Position 3 
     1.0f, 1.0f // TexCoord 3 
    }; 
+0

谢谢@msell。那就是问题,虽然现在我在触摸坐标上遇到了问题。无论用户触摸屏幕,垂直对象像素都会被修改... – Sol 2012-08-09 06:49:51

1

通过渲染方式,而无需创建帧缓冲渲染纹理correctely

我认为它实际上没有。将所有变换设置为与顶点坐标匹配的身份和纹理坐标,即S = X,T = Y,OpenGL假定纹理数据的原点位于左下角(具有不同野兽的立方体贴图的值得注意的例外)。帧缓冲区颜色附件,在你的情况下,你的纹理,就约定达成一致。

你的结构T坐标反平行于Y顶点坐标,这意味着在所有的身份转换设置的情况下,你翻转“倒挂”。

然而,大多数的图像文件格式假设在左上角的起源,如果您上传这些数据为的是一个OpenGL的纹理这增加了一个翻转,并连同您的纹理坐标翻转既抵消。

所以很有可能,你的常规纹理代码路径是“翻转”的。

+0

我可是从位图加载质地:GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0,位图0 ); – Sol 2012-08-08 10:09:56

+0

@ user1429893:那么?位图包含什么。位图在哪里起源? – datenwolf 2012-08-08 12:56:48