【发布时间】:2019-02-10 08:45:24
【问题描述】:
我的矩形的顶点是这样定义的:
0------1
| |
| |
2------3
这个矩形用以下两个三角形建模:0,2,3 和 0,3,1。
这个六个顶点的列表然后像这样映射到纹理坐标:
0.0f,0.0f
0.0f,1.0f
1.0f,1.0f
0.0f,0.0f
1.0f,1.0f
1.0f,0.0f
但是纹理没有正确映射...
我的纹理图像在那里:
我在屏幕上得到的结果是:
有人知道我在哪里搞砸了吗?
我将纹理传输到 Open GL 的方式:
pointeurSurTexture = GLES31.glGetUniformLocation(programme, "texture");
pointeurSurCoordonnéesTexture = GLES31.glGetAttribLocation(programme, "coordonneesTexture");
GLES31.glActiveTexture(GLES31.GL_TEXTURE0);
GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, pointeursSurTextures[0]);
GLES31.glUniform1i(pointeurSurTexture, 0);
GLES31.glVertexAttribPointer(pointeurSurCoordonnéesTexture, NB_COORDONNEES_PAR_POINT_TEXTURE2D,
GLES31.GL_FLOAT, false,NB_COORDONNEES_PAR_POINT_TEXTURE2D*OCTETS_PAR_FLOAT,
tableauCoordonnéesTextures);
GLES31.glEnableVertexAttribArray(pointeurSurCoordonnéesTexture);
还有我的片段着色器:
precision mediump float;
uniform sampler2D texture;
varying vec4 couleurSommet;
varying vec2 coordonneeTexture;
void main() {
gl_FragColor = couleurSommet * texture2D(texture,coordonneeTexture);
};
以及我如何绘制三角形:
GLES31.glDrawElements(GL_TRIANGLES, triangles.capacity(),GL_UNSIGNED_SHORT, triangles);
triangles 数组包含三角形的坐标,表示为顶点索引(例如 0,2,3,0,3,1)。
【问题讨论】:
-
您应该发布一些代码以帮助人们更好地理解您的代码,但是从外观上看,您的纹理没有任何问题,它似乎是重复/镜像的,因此您需要制作纹理如果您不想要那种效果,请不要重复
-
这几乎不清楚。坐标列表是顶点坐标列表还是纹理坐标列表?你有 4 个顶点坐标和 6 个索引来绘制四边形吗?如果是,那么您也需要 4 个 uv 坐标。按以下顺序:0 -
0.0f,0.0f1 -0.0f,1.0f2 -1.0f,0.0f3 -1.0f,1.0f。但没有任何代码我只能猜测。 -
纹理坐标列表链接到三角形顶点:我的矩形的顶点 0、2 和 3 构成的第一个三角形应该映射到前三个纹理坐标 (0,0; 0,1; 1,1) 和第二个,使用顶点 0,3 和 1 到最后三个纹理坐标 (0,0; 1,1; 1,0)。
-
这不能回答我的问题。你用
glDrawElements还是glDrawArrays? -
添加了一些代码来帮助你。