我需要将 png 图像调整到正方形中心,但我不知道如何做到这一点。
我初始化了正方形的顶点字节缓冲区,并为纹理(vertexBuffer)使用了相同的坐标。
这是我的 java 类的一部分:
private int textures[] = new int[1];
float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 0.0f };
static final int COORDS_PER_VERTEX = 3;
public void draw_texture(GL10 gl) {
gl.glBindTexture(GL10.GL_TEXTURE_2D,textures[0]);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glColor4f( // set color:
color[0], color[1],
color[2], color[3]);
gl.glTexCoordPointer(COORDS_PER_VERTEX,GL10.GL_FLOAT,0,vertexBuffer);
gl.glVertexPointer( // point to vertex data:
COORDS_PER_VERTEX,
GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawArrays( // draw shape:
GL10.GL_TRIANGLES, 0,
triangleCoords.length / COORDS_PER_VERTEX);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDeleteTextures(1, textures, 0);
}
public void loadGLTexture(GL10 gl, Context context) {
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.closest);
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GLES32.GL_CLAMP_TO_BORDER);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GLES32.GL_CLAMP_TO_BORDER);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexEnvf( GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE );
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
最佳答案
当你进行纹理处理时,我们需要设置 OpenGL。用于设置每个三角形的图像的一部分。这是通过 UV 坐标完成的。
关于java - 如何在 OpenGL 中将纹理调整到正方形并居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663635/