位置: 编程技术 - 正文

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 编程)

  • 一般纳税人结转税额怎么做会计分录
  • 设计合同服务期限怎么写
  • 职工薪酬实际金额包括发放往年工资吗
  • 公司把股权转让给个人
  • 合同取得成本如何结转
  • 企业所得税报税日期
  • 同一控制下企业合并取得的长期股权投资
  • 事业支出中的其他支出
  • 购买产品没开发票支付宝支付
  • 小规模纳税人开了3%的专票还能享受1%
  • 法院案件受理费计算器
  • 资产减值损失转回的账务处理
  • 存货质押贷款风险
  • 劳保统筹费用
  • 小企业盈余公积弥补亏损分录
  • 增值税发票可以抵税吗
  • 年内累计增量和年度增量计算公式
  • 期末未缴税额为正是什么意思
  • 未确认融资费用的期初余额
  • 其他应收款需要本月合计吗
  • 资产负债表中的固定资产怎么算
  • 公司抵押贷款的担保人
  • 实收资本可以大于注册资本吗
  • 库乐队是苹果自带的嘛
  • 应付股利属于什么科目
  • 商品流通会计科目
  • 股东分配利润如何入账
  • vue中使用echars
  • win11dev预览版可以升级正式版吗
  • php timestamp
  • 结转销售原材料会计分录
  • 营业利润期末余额怎么算
  • php处理xml
  • 变动成本产品成本包括哪些
  • 收回已确认的坏账准备为什么在贷方
  • 增值税发票校验码在哪个位置
  • 在项目进行过程中,一个开发人员
  • 基于ansible的运维平台
  • vue要怎么学
  • javascript基础书
  • php如何实现
  • 当月计提的公积金怎么取
  • 年终奖是以工资形式发放吗
  • 盘亏的固定资产是资产吗
  • 发票管理人员如何操作
  • 怎么查看python
  • 织梦添加文章如何修改高级参数
  • 增值税发票的认证
  • 人力资源公司开票税目
  • 银行回单应如何打印
  • 失控发票已补交什么意思
  • 存量资金会计处理办法
  • 押金无法收回账怎么办
  • 损益类会计科目有哪些
  • 内部使用的收据可以做原始凭证吗
  • 公司支付给实习生的报酬如何税前扣除?
  • 集装箱发票是否要在备注栏注明地址
  • 小规模纳税人不超过10万免增值税
  • 航天金税盘维护费发票在哪打印
  • 会计工作重点工作
  • 对账簿设置的要求是什么
  • Windows7/2008中批量删除隧道适配器的方法
  • 怎么制作win7系统u盘装系统教程
  • bios各项参数的意义
  • 如何使用windows 10
  • 苹果mac系统怎么更新
  • windows8使用教程
  • windows7如何关闭update
  • window10 360
  • win10提示空闲计时器已过期
  • centos 安装chia
  • linux安装有哪几种方式
  • css如何用
  • 文章标题用几号字体
  • 改变的拼音
  • unity3d摄像机视角
  • jquery attribute
  • [置顶] 安卓手机连接IP100蓝牙打印机实现打印功能
  • jquery点击事件有什么方法显示
  • 注销税控机流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设