Java 如何在由六个三角形条组成的矩形上显示纹理(opengl es)
我正在寻找OpenGLES2.0的帮助。每次我尝试对由4个以上三角形组成的矩形进行纹理处理时,第二次和下一次重复的纹理都会被破坏。我的意思是,它被拉伸了。如下图所示 拉伸示例:Java 如何在由六个三角形条组成的矩形上显示纹理(opengl es),java,android,opengl-es,Java,Android,Opengl Es,我正在寻找OpenGLES2.0的帮助。每次我尝试对由4个以上三角形组成的矩形进行纹理处理时,第二次和下一次重复的纹理都会被破坏。我的意思是,它被拉伸了。如下图所示 拉伸示例: 我在互联网上寻找这个问题的解决方案,但没有任何帮助。我想这可能是纹理坐标或绘图的问题 三角形类 public advancedRect(){ 顶点=新浮点[]{ -2, 1, 0, //0 -2, -1, 0, //1 0, -1, 0, //2 0, 1, 0, //3 2, 1, 0, //4 2, -1, 0 /
我在互联网上寻找这个问题的解决方案,但没有任何帮助。我想这可能是纹理坐标或绘图的问题 三角形类
public advancedRect(){
顶点=新浮点[]{
-2, 1, 0, //0
-2, -1, 0, //1
0, -1, 0, //2
0, 1, 0, //3
2, 1, 0, //4
2, -1, 0 //5
};
texCoords=ARECT.texCoords;
texBuffer=setFloatBuffer(新浮点[]{
0,0,
0,1,
1,1,
1,0,
0,0,
1,1
});
orderBuffer=setShortBuffer(新短[]{
0, 1, 3, 2, 4, 5
});
verticesAmount=6;
objBuffer=setFloatBuffer(顶点);
}
我就是这样画画的
public void draw(float[]vPMatrix,int程序)
{
setHandlers(程序);
float[]scratch=rotator.rotate(vPMatrix);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,texDataHandle);
GLES20.GlenableVertexAttributeArray(位置手柄);
GLES20.GlvertexAttribute指针(
位置手柄,
OBJ3D.VERTICEVERTEX,
GLES20.GL_浮动,
OBJ3D.NORMALIZED,
OBJ3D.STRIDE,
奥布布弗
);
GLES20.GlenableVertexAttributeArray(texCoordHandle);
GLES20.GlvertexAttribute指针(
texCoordHandle,
OBJ3D.TEXVERTEX,
GLES20.GL_浮动,
OBJ3D.NORMALIZED,
0,
texBuffer
);
GLES20.glUniform1f(xModifierHandle,xModifier);
GLES20.glUniform1f(yModifierHandle,yModifier);
GLES20.glUniformMatrix4fv(
vPMatrixHandle,
OBJ3D.COUNT,
OBJ3D.TRANSPOSE,
划痕
OBJ3D.OFFSET
);
GLES20.GldUnderElements(
GLES20.GL_三角形_带,
verticesAmount,
GLES20.GL_无符号_短,
订单缓冲区
);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glUniform1i(texUniformHandle,OBJ3D.X);
GLES20.GLDisableVertexAttributeArray(texCoordHandle);
GLES20.GLDisableVertexAttributeArray(位置句柄);
}
注意,中间的点必须与V坐标1相关联,因为它是左纹理的右边界。但它们也必须与v坐标0相关联,因为下一个矩形从该点开始,因此它也是右纹理的左边界
(-2,1)(0,1)(2,1)
+----+----+
| /| /|
| / | / |
| / | / |
|/ |/ |
+----+----+
(-2, -1) (0, -1) (2, -1)
(0,0)(1,0)(0,0)(1,0)
+----+ +----+
| /| | /|
| / | | / |
| / | | / |
|/ | |/ |
+----+ +----+
(0, 1) (1, 1) (0, 1) (1, 1)
要实现所需,还必须增加纹理坐标:
顶点=新浮点[]{
-2, 1, 0, // 0
-2, -1, 0, // 1
0, 1, 0, // 2
0, -1, 0, // 3
2, 1, 0, // 4
2, -1, 0 // 5
};
texBuffer=setFloatBuffer(新浮点[]{
0, 0,
0, 1,
1, 0,
1, 1,
2, 0,
2, 1
});
orderBuffer=setShortBuffer(新短[]{
0, 1, 2, 3, 4, 5
});
注意,现在第一个纹理矩形的v坐标在范围[0,1]内,第二个纹理矩形的v坐标在范围[1,2]内
(0,0)(0,1)(0,2)
+----+----+
| /| /|
| / | / |
| / | / |
|/ |/ |
+----+----+
(0, 1) (1, 1) (1, 2)
纹理参数GL\u texture\u WRAP\T
必须设置为GL\u REPEAT
,才能进行此操作。看
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,texDataHandle);
GLES20.glTexParameteri(GLES20.GL_纹理2D、GLES20.GL_纹理包裹、GLES20.GL_重复);
注意,中间的点必须与V坐标1相关联,因为它是左纹理的右边界。但它们也必须与v坐标0相关联,因为下一个矩形从该点开始,因此它也是右纹理的左边界
(-2,1)(0,1)(2,1)
+----+----+
| /| /|
| / | / |
| / | / |
|/ |/ |
+----+----+
(-2, -1) (0, -1) (2, -1)
(0,0)(1,0)(0,0)(1,0)
+----+ +----+
| /| | /|
| / | | / |
| / | | / |
|/ | |/ |
+----+ +----+
(0, 1) (1, 1) (0, 1) (1, 1)
要实现所需,还必须增加纹理坐标:
顶点=新浮点[]{
-2, 1, 0, // 0
-2, -1, 0, // 1
0, 1, 0, // 2
0, -1, 0, // 3
2, 1, 0, // 4
2, -1, 0 // 5
};
texBuffer=setFloatBuffer(新浮点[]{
0, 0,
0, 1,
1, 0,
1, 1,
2, 0,
2, 1
});
orderBuffer=setShortBuffer(新短[]{
0, 1, 2, 3, 4, 5
});
注意,现在第一个纹理矩形的v坐标在范围[0,1]内,第二个纹理矩形的v坐标在范围[1,2]内
(0,0)(0,1)(0,2)
+----+----+
| /| /|
| / | / |
| / | / |
|/ |/ |
+----+----+
(0, 1) (1, 1) (1, 2)
纹理参数GL\u texture\u WRAP\T
必须设置为GL\u REPEAT
,才能进行此操作。看
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,texDataHandle);
GLES20.glTexParameteri(GLES20.GL_纹理_2D,GLES20.G