位置: 编程技术 - 正文

Android OpenGL ES绘图教程之二 : 定义形状(android skia opengl)

编辑:rootadmin
在OpenGL ES view中可以定义要绘制图形的形状,是你创建高端图形杰作的第一步。在不知道一些基础的情况下来绘制会有点棘手,比如OpenGL ES是如何定义图形对象的。 本教程解释了OpenGL ES坐标系统与Android设备屏幕的关系,如果定义基础的形状,比如三角形和四边形。 1. 定义一个三角形 OpenGL ES允许你在三维坐标系统中定义绘制对象,所以在绘制三角形之前,必须定义它的坐标。在OpenGL里面,定义坐标的典型方式是定义一个浮点型的顶点坐标数组,为了最大化效率,将这些坐标写进一个ByteBuffer里,它将被传递给OpenGL ES的图形管线里进行处理。public class Triangle { private FloatBuffer vertexBuffer; // 数组中每个顶点坐标的维数 static final int COORDS_PER_VERTEX = 3; static float triangleCoords[] = { // 逆时针方向: 0.0f, 0.f, 0.0f, // top -0.5f, -0.f, 0.0f, // bottom left 0.5f, -0.f, 0.0f // bottom right }; // Set color with red, green, blue and alpha (opacity) values float color[] = { 0.f, 0.f, 0.f, 1.0f }; public Triangle() { //为形状坐标初始化顶点buffer ByteBuffer bb = ByteBuffer.allocateDirect( //坐标数组的长度 * 每个float所占的字节数 triangleCoords.length * 4); // 使用设备硬件的字节顺序 bb.order(ByteOrder.nativeOrder()); // create a floating point buffer from the ByteBuffer // 从ByteBuffer中创建一个浮点型的buffer vertexBuffer = bb.asFloatBuffer(); // add the coordinates to the FloatBuffer vertexBuffer.put(triangleCoords); // set the buffer to read the first coordinate // 设置buffer指向第一个坐标 vertexBuffer.position(0); }} 默认的,OpenGL ES假定一个[0,0,0](x,y,z)位于GLSurfaceView框架中心位置的坐标系统,[1,1,0](x,y,z)位于框架的右上角,[-1,-1,0]位于框架的左下角,对于坐标系统的说明,请查看OpenGL ES开发向导。

推荐整理分享Android OpenGL ES绘图教程之二 : 定义形状(android skia opengl),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android view opengl,android opengl yuv,android view opengl,opengl es api,android opengles2.0教程,android opengles2.0教程,android opengles2.0教程,安卓opengl es3.0安装,内容如对您有帮助,希望把文章链接给更多的朋友!

Android OpenGL ES绘图教程之二 : 定义形状(android skia opengl)

需要注意的是,形状的坐标是以逆时针的顺序定义的,绘制的顺序是非常重要的,因为它决定了哪一边是形状的前面(front face)和后面(back face),使用OpenGL ES的cull face特性,前面是应该被绘制的,背面应该不绘制。关于face和culling的更多信息,请查看OpenGL ES开发向导。

2. 定义一个正方形 在OpenGL中定义三角形是比较简单的,但是如果你想定义一个比较复杂点的形状呢?比如正方形?有几种方法可以实现这个需求,但是一个通常的绘制正方形的方法是使用两个三角形: 同样的,你应该为组成正方形的两个三角形以逆时针的顺序定义顶点,将这些数&#;放进ByteBuffer,为了避免定义两个三角形公用的坐标两次,使用一个绘制列表来告诉OpenGL ES管线如何绘制这些顶点,下面是定义正方形的代码:public class Square { private FloatBuffer vertexBuffer; private ShortBuffer drawListBuffer; // number of coordinates per vertex in this array //数组中每个顶点坐标的维数 static final int COORDS_PER_VERTEX = 3; static float squareCoords[] = { -0.5f, 0.5f, 0.0f, // top left -0.5f, -0.5f, 0.0f, // bottom left 0.5f, -0.5f, 0.0f, // bottom right 0.5f, 0.5f, 0.0f }; // top right private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices绘制顶点的顺序 public Square() { // initialize vertex byte buffer for shape coordinates ByteBuffer bb = ByteBuffer.allocateDirect( // (# of coordinate values * 4 bytes per float) squareCoords.length * 4); bb.order(ByteOrder.nativeOrder()); vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(squareCoords); vertexBuffer.position(0); // initialize byte buffer for the draw list ByteBuffer dlb = ByteBuffer.allocateDirect( // (# of coordinate values * 2 bytes per short) drawOrder.length * 2); dlb.order(ByteOrder.nativeOrder()); drawListBuffer = dlb.asShortBuffer(); drawListBuffer.put(drawOrder); drawListBuffer.position(0); }} 这个例子给你展示了在OpenGL中如何创建复杂的形状,通常的,你使用三角形的集合来绘制对象,在下一节中,你将会学习如何在屏幕上绘制这些形状。

OpenGL编程逐步深入(六)平移变换 准备知识从这一节我们开始接触3D对象各种各样的变换,使其显示在屏幕上看起来有深度的感觉。通常每一种变换都是通过矩阵来实现的,把这些变换矩

Android OpenGL ES绘图教程之四 :投影和相机视图变换 在OpenGLES环境中,投影和相机视图可以使被绘制的对象在某种方式上看起来更像实际的物体,这个模拟实际对象的场景是通过被绘制对象坐标的数学转换

Android OpenGL ES绘图教程之五 :加入运动 在屏幕上面绘制对象是OpenGL的一个非常好的基本功能,但是你也可以在其他的Android图形框架上面实现这些功能,比如Canvas和Drawable对象。OpenGLES提供了额

标签: android skia opengl

本文链接地址:https://www.jiuchutong.com/biancheng/369571.html 转载请保留说明!

上一篇:OpenGL--环境映射(opengl环境配置)

下一篇:OpenGL编程逐步深入(六)平移变换(opengl 编程)

  • 生产成本和销售费用是对应账户吗
  • 资产负债表中的固定资产是原值还是净值
  • 水利基金申报表减除项填什么
  • 100万劳务费发票多少税
  • 合伙企业对外长期股权投资收到分红 怎么处理
  • 企业向个人借款合同模板
  • 进项税额计入其他应付款是什么意思
  • 营改增后电力行业非正常损失怎么做会计处理?
  • 打折销售商品会计分录
  • 开票确定收入分录
  • 多计提的销售费用冲销
  • 公司购买商业险多少钱
  • 什么是前期差错
  • 企业收入进私户怎么做账
  • 股票回购后多久注销
  • 公司网站建设费入什么明细科目里
  • 红字发票需要做什么科目
  • 办公室租赁合同需要交哪些税额?
  • 车船使用税是否必须交
  • 不合规进项税如何账务处理
  • 小规模纳税人的企业所得税怎么算
  • 科技研发政策
  • 成本费用包括哪些包括外购材料吗
  • 银行利息所得税调整方案
  • 企业为什么要缴纳增值税
  • 在建工程抵工程款
  • 应收和预收怎么算
  • 合并报表中营业利润不等于
  • 如何修复电脑上qq对话过期视频
  • bios报警声是怎样的
  • 其他费用的账务处理
  • phpfopen
  • 蚊子叮咬怎么办手抄报
  • 工业企业如何纳税
  • opencv焊点缺陷检测
  • 应届生优势大吗
  • vmstat命令 监视系统资源状态
  • 电脑培训网络教学
  • 餐饮小微企业优惠政策2021
  • 个人综合所得汇算申报流程
  • 换货公司是否可信?
  • 公司入股方式有哪几种
  • 入伙和退伙的法律效力
  • 财政借钱给预算单位的会计处理
  • MySQL默认字符集修改
  • 个体户怎么计算养老金
  • 进项转出转到哪里去
  • 租赁行业出租方要交税吗
  • 员工工伤申请流程
  • 利润表中资产减值损失为正数是什么原因
  • 没有计提坏账准备的情况下,应收账款的计税基础
  • 主播工资不发应该到哪里投诉
  • 注销公司复杂吗?
  • 工资费用核算的原始记录有
  • 工资达不到5000个人所得税
  • 认缴制下实收资本可以一直为零吗
  • sql server中的权限包括哪三种类型
  • 一个 sql 查询很慢,从哪些地方进行优化?
  • Python MySQL进行数据库表变更和查询
  • mysql 5.7.28安装
  • 怎么防止win10
  • win10企业版20h2和1909
  • WIN7系统如何恢复出厂系统
  • win8.1无法更新
  • win10系统如何设置锁屏壁纸图片
  • cocos2dx开发的游戏
  • unity best fit
  • jquery对动态生成的进行操作
  • node 获取当前时间
  • unity3d bim
  • node stream(流)有哪些?
  • [置顶]马粥街残酷史
  • jquery中用onclick绑定点击事件
  • android view类
  • android app安全
  • 浙里办怎么给小孩子缴医保费
  • 公司自有房屋装修费用入什么料目
  • 个人经营所得申报时间
  • 常州市三免卡
  • 地方财政税收的组成
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设