传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229
传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/leverage_1229
传送门☞GoF23种设计模式☞转载请注明☞http://blog.csdn.net/leverage_1229
在OpenGLES view上能够定义所绘制图形的形状,是创建高端图形应用杰作的第一步。如果你不懂得OpenGL ES定义图形对象的一些基本知识,那么使用起来可能有一点棘手。
这一节将介绍OpenGL ES相对于Android设备屏幕的坐标系,定义一个形状的基础知识,形状的外观,以及如何定义一个三角形和一个正方形。
一、定义一个三角形
OpenGL ES允许你使用三维空间坐标系来定义绘制对象。所以,在你想要绘制一个三角形之前,必须定义它的坐标。
在OpenGL中,典型的方式是定义一个浮点类型的顶点数组存放各个顶点坐标。为了获得更高的效率,应该将这些坐标都存放到一个ByteBuffer中,ByteBuffer会被传入OpenGL ES图形管道进行处理。
class Triangle {
private FloatBuffer vertexBuffer;
// 设置每个顶点的坐标数
static final int COORDS_PER_VERTEX = 3;
// 设置三角形顶点数组
static float triangleCoords[] = { // 默认按逆时针方向顺序绘制
0.0f, 0.622008459f, 0.0f, // 顶
-0.5f, -0.311004243f, 0.0f, // 左底
0.5f, -0.311004243f, 0.0f // 右底
};
// 设置图形的RGB值和透明度
float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
public Triangle() {
// 初始化顶点字节缓冲区,用于存放形状的坐标,
ByteBuffer bb = ByteBuffer.allocateDirect(
// (每个浮点数占用4个字节)
triangleCoords.length * 4);
// 设置使用设备硬件的原生字节序
bb.order(ByteOrder.nativeOrder());
// 从ByteBuffer中创建一个浮点缓冲区
vertexBuffer = bb.asFloatBuffer();
// 把坐标都添加到FloatBuffer中
vertexBuffer.put(triangleCoords);
// 设置buffer从第一个坐标开始读
vertexBuffer.position(0);
}
}
默认情况下,OpenGL ES 假定GLSurfaceView帧的中心是坐标系[0,0,0](X,Y,Z),[1,1,0]是右上角,[-1,-1,0]是左下角。有关这个坐标系统的说明,请参阅OpenGL ES开发人员指南。
注意这个形状的坐标是按逆时针方向定义的。绘制顺序很重要,因为它定义了哪个面是形状的正面,哪个面是反面。使用OpenGL ES的cullface特性,你可以只画正面不画反面。更多关于faces和culling的信息,请参阅OpenGL ES开发人员指南。
二、定义一个正方形
在OpenGL中定义三角形非常容易,如果想得到一个更为复杂的形状,比如说一个正方形,有很多方法可以做到,其中典型的做法是使用两个三角形集合而成。
在此之后,需要分别为两个三角形按逆时针方向定义这些顶点,并且将这些坐标值都存放到一个ByteBuffer中。为了避免分别为两个三角形定义两个坐标数组,我们使用一个绘制列表来告诉OpenGL ES图形管道如果绘制这些顶点。下面就是这个形状的代码:
class Square {
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
// 设置每个顶点的坐标数
static final int COORDS_PER_VERTEX = 3;
static float squareCoords[] = { -0.5f, 0.5f, 0.0f, // 左上
-0.5f, -0.5f, 0.0f, // 左下
0.5f, -0.5f, 0.0f, // 右下
0.5f, 0.5f, 0.0f }; // 右上
private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // 设置顶点的绘制顺序
public Square() {
// 初始化顶点字节缓冲区,用于存放形状的坐标
ByteBuffer bb = ByteBuffer.allocateDirect(
// (每个浮点数占用4个字节)
squareCoords.length * 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(squareCoords);
vertexBuffer.position(0);
// 初始化字节缓冲区,用于存放绘制列表
ByteBuffer dlb = ByteBuffer.allocateDirect(
// (每个短整型占用2个字节
drawOrder.length * 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(drawOrder);
drawListBuffer.position(0);
}
}
这个例子展示了如何使用OpenGL创建更为复杂的形状。一般来说,都是通过绘制三角形对象集合的方式来达到。在下一节中,你将了解如何在屏幕上画出这些形状。
分享到:
相关推荐
Android 3D游戏开发技术宝典 OpenGL ES2.0学习。
Android平台采集Camera的YUV原始数据后使用OpenGLES2.0显示,内置YV12格式的YUV分量分离。 附件为完整例子,感谢“李狗蛋52635”提供的GLProgram类。
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
同时为了便于读者的学习,《Android 3D游戏开发技术宝典:OpenGL ES 2.0》附赠的光盘中包含了书中所有案例的完整源代码,同时给出了最后3个完整大型3D游戏案例的讲解视频,最大限度地帮助读者快速掌握相应的开发技术...
Android OpenGL ES 2.0 开发教程 从入门到精通和Demo(内容详细、简单,易学)
本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内...
android openGL ES 2.0画等边三角形,正方形
作者: (美) 马鲁基-弗伊诺(Marucchi-Foino, R.) 著 ...原作名: Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 译者: 王净 译. 出版年: 2014-2 页数: 288 装帧: 平装 ISBN: 9787302352303
在android 环境下实现用opengl es 2.0画立方体 并且实现手动触摸旋转 完整代码
android opengles2.0水波纹效果,
使用的例子,讨论各种优化技术,读完本书希望能你能懂的 OpenGL ES 2.0 的核心 API,能够 开发 OpenGL ES 2.0 的应用程序,不要担心技术细节,懂得怎么去工作。 OpenGL ES 2.0 包含两部分:OpenGL ES 2.0 API 说明和 ...
android openGL es2.0简单图形绘制 简单绘制三角形 里面注释很详细
《OpenGL ES 2.0 编程指南 中文版》
OpenGL ES 2.0 编程指南 中文版, 留个备份,好东西。
这儿是有关OpenGL ES 2.0的编程指南,是中文版哦!欢迎下载
如题,Android 3D游戏开发技术宝典:OpenGL ES 2.0书中的全部源代码。该书由浅入深的讲解了OpenGL ES 2.0在3D游戏开发中的各个方面,还给出了BN赛艇、火力篮球、夜鹰行动三个经典游戏的全部源代码。
OpenGL ES 2.0编程的入门基础书籍。适合初学者。
opengl es 2.0 API 网上没提供下载...俺提供! opengl es 2.0全面抛弃了 固定渲染管线.只能说shader的时代越来越近了..先下手为强 哈哈.反正nehe已经老黄历了.shader当道.感觉图形学门槛高了一大截.无论怎么说对很多...
《OpenGL ES 《OpenGL ES 2.0 编程指南 中文版》2.0 编程指南 中文版》