位置: 编程技术 - 正文

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

  • 已认证进项税额怎么结转
  • 购销合同印花税按70%
  • 环保税的纳税义务人是施工方还是建设方安徽
  • 注册税务师考试科目
  • 使用权资产和租赁负债的计税基础
  • 固定资产未转固属于什么风险
  • 股权转让所得如何申报个税
  • 什么情况下用资本公积科目
  • 工会基金是扣个人还是扣企业的
  • 附加税退税申请书怎么写
  • 结转以前的其他业务成本如何做会计分录呢?
  • 固定资产属于净资产的哪一项
  • 长期股权投资初始成本
  • 社保企业二次扣款怎么扣
  • 成本核算会计科目包括
  • 客户把发票弄丢了,红冲重新开了会有什么风险
  • 公司用现金发放工资在税法上合规吗
  • 建安企业预缴个税怎么算
  • 公司有出账没有进账怎么办
  • 盐酸编号
  • 增值税专用发票验票
  • 代收款项属于收入范围吗
  • 营业部门人员工资用什么会计科目
  • 其他应付款可以用其他应收款代替吗
  • 征信证明怎么开啊
  • 小规模所得税表格模板
  • 免费样品销售给客户计入什么科目
  • 房屋租赁发票需要什么资料
  • 个人取得经济补偿金个人所得税计算
  • 华为鸿蒙系统如何关闭hd通话
  • 办理出口退税的流程
  • 如何在vue项目中导入外部的包
  • 捐赠支出税前扣除票据
  • 基于php开发
  • 税点款怎么算
  • 以前年度损益调整借贷方向
  • 工程完工后有关工作总结
  • 股权转让个人所得税优惠政策
  • 二连浩特老照片
  • 微信接口开发平台
  • thinkphp框架怎么用
  • 项目折现率计算公式
  • 出租车计入什么费
  • 非营利组织如何才能获得持续稳定的公益捐赠
  • 以房租入股股份怎么计算
  • 扶贫款分红怎么做账
  • 认证一般纳税人之后,之前开的发票作废重新填开的税率
  • 普票不能抵扣要他干嘛
  • 异地托收承付结算ppt
  • 小规模季度交税分录怎么做
  • 关联方计提坏账准备如何规定
  • 不征税收入怎么申报增值税
  • 收到返还工会经费大于管理费用
  • 研发支出怎么结转到管理费用
  • 一般纳税人增值税减免政策2023
  • 因产品质量问题造成的损失怎么赔偿
  • win10系统环境设置
  • 电脑开机怎么设置默认系统
  • Win7系统连接vpn失败且提示错误代码868的2种解决方法
  • xp系统内存不足怎么办
  • U盘安装centos8
  • Ubuntu 8.10 Intrepid Ibex Alpha4 官方正式版下载
  • 如何修改windows默认语言
  • mac idle
  • 2016年Win10 RedStone将重大改版 微软小娜可以浮动
  • 红石cpu教程
  • cocos2dx视频教程
  • shader cull
  • 实现高性能化 两个字表达
  • Unity3D游戏开发培训课程大纲
  • 用jquery制作网页
  • 浅谈会计诚信与职业道德论文
  • jquery中绑定事件
  • javascript定律
  • jquery实现点击按钮
  • 房屋维修是什么职业
  • 小规模开票税金怎么算
  • 税务社保费是什么意思
  • 乡土中国出版社不同内容一样吗
  • 婚育证明可以开假的吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设