澳洲门户网 首页 热点资讯 查看内容

安卓 OpenGL ES 2.0 完全入门(二):矩形、图片、读取显存等

2022-11-22 12:20| 发布者: 摄影数码| 查看: 1542| 评论: 0

文章来源:ImaginationTech


本文是 Piasy 原创,发表于 ,请阅读原文支持原创


在中,我主要分析了坐标系、基本绘制流程、绘制三角形、投影变换和相机视觉的参数意义,在本篇中,我将分析绘制矩形、绘制图片纹理、读取显存的内容,以及一些注意事项,完整代码可以在 。


1. 绘制矩形


上篇中有提到,三角形是基本形状,利用三角形我们可以“拼出”其他的任何形状,例如矩形。


根据 ,我们使用 glDrawElements 来绘制矩形。


绘制矩形时,我们除了需要一个数组保存顶点数据之外,还需要一个数组保存顶点的绘制顺序:


// ...privatestaticfinalfloat[]VERTEX={// in counterclockwise order:1,1,0,// top right-1,1,0,// top left-1,-1,0,// bottom left1,-1,0,// bottom right};privatestaticfinalshort[]VERTEX_INDEX={0,1,2,0,2,3};MyRenderer(){mVertexBuffer=ByteBuffer.allocateDirect(VERTEX.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer().put(VERTEX);mVertexBuffer.position(0);mVertexIndexBuffer=ByteBuffer.allocateDirect(VERTEX_INDEX.length*2).order(ByteOrder.nativeOrder()).asShortBuffer().put(VERTEX_INDEX);mVertexIndexBuffer.position(0);}// ...


在上面的代码中,VERTEX 保存了 4 个顶点的坐标,VERTEX_INDEX 保存了顶点的绘制顺序。0 -> 1 -> 2绘制的是 右上 -> 左上 -> 左下 上半个三角形,逆时针方向,而 0 -> 2 -> 3 则绘制的是 右上 -> 左下 -> 右下下半个三角形,也是逆时针方向,这两个三角形则“拼接”成了一个矩形。


顶点的绘制顺序重不重要?由于这里绘制的是纯颜色,看不出区别,在下面绘制图片纹理的时候,我发现,调换顺序似乎并没有影响,绘制的图片没有变化。


shader 代码、投影变换和相机视觉的逻辑都不需要更改,我们只需要改一下绘制时调用的函数即可:


@OverridepublicvoidonDrawFrame(GL10unused){GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT);GLES20.glUseProgram(mProgram);GLES20.glEnableVertexAttribArray(mPositionHandle);GLES20.glVertexAttribPointer(mPositionHandle,3,GLES20.GL_FLOAT,false,0,mVertexBuffer);GLES20.glUniformMatrix4fv(mMatrixHandle,1,false,mMVPMatrix,0);// 用 glDrawElements 来绘制,mVertexIndexBuffer 指定了顶点绘制顺序GLES20.glDrawElements(GLES20.GL_TRIANGLES,VERTEX_INDEX.length,GLES20.GL_UNSIGNED_SHORT,mVertexIndexBuffer);GLES20.glDisableVertexAttribArray(mPositionHandle);}



文章来源:ImaginationTech

转载声明:
本文为转载发布,仅代表原作者或原平台观点或立场,不代表我方观点。亚太菁英传媒及旗下澳洲门户网(ozportal.tv)仅提供信息发布平台,文章或有适当删改。对转载有异议和删稿要求的原著方,可联络info@ozportal.tv。

鲜花

握手

雷人

路过

鸡蛋

最新评论

扫码关注微信公众号

扫码下载澳洲门户APP

© 澳洲门户网 版权所有

返回顶部