zoukankan      html  css  js  c++  java
  • Android OpenGL ES: Textured Triangle

     1 public class MyRenderer implements Renderer 
    2 {
    3 FloatBuffer verticesBuffer;
    4 private final int VERTEX_SIZE = (2 + 2) * 4;
    5 private AssetManager asset;
    6 private int textureID;
    7
    8 public MyRenderer(Context context)
    9 {
    10 asset = context.getAssets();
    11 }
    12
    13 @Override
    14 public void onDrawFrame(GL10 gl)
    15 {
    16 gl.glViewport(0, 0, 320, 480);
    17 gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    18 gl.glMatrixMode(GL10.GL_PROJECTION);
    19 gl.glLoadIdentity();
    20 gl.glOrthof(0, 320, 0, 480, 1, -1);
    21
    22 gl.glEnable(GL10.GL_TEXTURE_2D);
    23 gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);
    24
    25 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    26 gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    27
    28 verticesBuffer.position(0);
    29 gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, verticesBuffer);
    30 verticesBuffer.position(2);
    31 gl.glTexCoordPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, verticesBuffer);
    32 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
    33
    34 }
    35
    36 @Override
    37 public void onSurfaceChanged(GL10 gl, int width, int height)
    38 {
    39
    40 }
    41
    42 @Override
    43 public void onSurfaceCreated(GL10 gl, EGLConfig config)
    44 {
    45 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * 4 * 4);
    46 byteBuffer.order(ByteOrder.nativeOrder());
    47 verticesBuffer = byteBuffer.asFloatBuffer();
    48 verticesBuffer.put(new float[] {0, 0, 0, 0,
    49 320, 0, 1, 0,
    50 160, 480, 0.5f, 1});
    51 verticesBuffer.flip();
    52
    53 try {
    54 Bitmap bitmap = BitmapFactory.decodeStream(asset.open("bobargb8888.png"));
    55 int textureIds[] = new int[1];
    56 gl.glGenTextures(1, textureIds, 0);
    57 textureID = textureIds[0];
    58 gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);
    59 GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    60 gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    61 gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
    62 }
    63 catch (IOException e)
    64 {
    65 e.printStackTrace();
    66 }
    67 }
    68 }

     整理了一下:

    public class MyRenderer implements Renderer 
    {
    FloatBuffer verticesBuffer;
    private final int VERTEX_SIZE = (2 + 2) * 4;
    private AssetManager asset;
    private int textureID;

    public MyRenderer(Context context)
    {
    asset = context.getAssets();
    }

    @Override
    public void onDrawFrame(GL10 gl)
    {
    gl.glViewport(0, 0, 320, 480);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrthof(0, 320, 0, 480, 1, -1);

    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    verticesBuffer.position(0);
    gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, verticesBuffer);
    verticesBuffer.position(2);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, verticesBuffer);
    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height)
    {

    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    {
    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * 4 * 4);
    byteBuffer.order(ByteOrder.nativeOrder());
    verticesBuffer = byteBuffer.asFloatBuffer();
    verticesBuffer.put(new float[] {0, 0, 0, 0,
    320, 0, 1, 0,
    160, 480, 0.5f, 1});
    verticesBuffer.flip();

    textureID = loadTexture(gl, "bobargb8888.png");
    }

    public int loadTexture(GL10 gl, String fileName)
    {
    int id = 0;
    try {
    Bitmap bitmap = BitmapFactory.decodeStream(asset.open(fileName));
    int textureIds[] = new int[1];
    gl.glGenTextures(1, textureIds, 0);
    id = textureIds[0];
    gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    return id;
    }
    }
  • 相关阅读:
    简单的远程控制软件
    VS集成环境中的JavaScript脚本语法检查
    vs2022安装
    有关httpContext.Current.Session[值] 取值的问题
    【python3.7】文件操作
    148. 排序链表
    11. 盛最多水的容器
    23. 合并K个升序链表
    147. 对链表进行插入排序
    146. LRU 缓存机制
  • 原文地址:https://www.cnblogs.com/xiaobo68688/p/2291145.html
Copyright © 2011-2022 走看看