java - 如何在 OpenGL 中将纹理调整到正方形并居中?

标签 java android opengl-es

我需要将 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();
}

我得到的结果:enter image description here

最佳答案

当你进行纹理处理时,我们需要设置 OpenGL。用于设置每个三角形的图像的一部分。这是通过 UV 坐标完成的。

关于java - 如何在 OpenGL 中将纹理调整到正方形并居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663635/

相关文章:

java - 使用 Java 泛型的责任链处理程序

java - 在框架布局中显示 Activity

c++ - OpenglES 2.0 顶点着色器属性

java - 更改窗口标题背景样式

java - 内存中会创建多少个字符串对象?

java - 调整双 JTable 中列大小的问题

java - android - Теextview 不会立即改变

android - ListView 的索引越界异常

ios - Metal API 验证崩溃

java - 安卓。如何沿对象所面对的方向移动对象(使用 Vector3 和四元数)