Android官方开发文档Training系列课程中文版:OpenGL绘图之图形定义

原文地址:http://android.xsoftlab.net/training/graphics/opengl/shapes.html

使用OpenGL绘制图形的第一步就是要定义一个图形。如果不清楚OpenGL如何绘制自定义图形的相关基础知识时,那么使用OpenGL一定要仔细。

这节课将会简单讲述OpenGl ES的坐标系统,及定义图形的基础。本章中以三角形、正方形举例做说明。

定义三角形

OpenGL ES允许用户使用三维空间定义绘制的对象。所以,在绘制三角形之前,必须先定义它的坐标。在OpenGL中,最典型的方式就是以浮点型的数字定义一个顶点坐标数组。为了提高效率,应该将这些数据写入到一个ByteBuffer对象中,它随后会被送入OpenGL ES图形管道中,等待处理。

public class Triangle {private FloatBuffer vertexBuffer;// number of coordinates per vertex in this arraystatic final int COORDS_PER_VERTEX = 3;static float triangleCoords[] = {   // in counterclockwise order:0.0f,  0.622008459f, 0.0f, // top-0.5f, -0.311004243f, 0.0f, // bottom left0.5f, -0.311004243f, 0.0f  // bottom right};// Set color with red, green, blue and alpha (opacity) valuesfloat color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };public Triangle() {// initialize vertex byte buffer for shape coordinatesByteBuffer bb = ByteBuffer.allocateDirect(// (number of coordinate values * 4 bytes per float)triangleCoords.length * 4);// use the device hardware's native byte orderbb.order(ByteOrder.nativeOrder());// create a floating point buffer from the ByteBuffervertexBuffer = bb.asFloatBuffer();// add the coordinates to the FloatBuffervertexBuffer.put(triangleCoords);// set the buffer to read the first coordinatevertexBuffer.position(0);}
}

默认情况下,OpenGL ES的坐标系统将[0,0,0](X,Y,Z)点作为GLSurfaceView的中心。[1,1,0]点是框架的右上角,[-1,-1,0]点是框架的左下角。有关该坐标系统的演示信息,请参见OpenGL ES开发指南。

注意这里定义图形坐标点是以逆时针方向定义的。知道这个绘制顺序是很重要的,因为它决定了图形的哪一面应该是朝着用户的,哪一面应该是被绘制的,以及朝着用户的另一面的绘制信息,它还可以选择不使用OpenGL绘制朝着用户的这一面等功能。有关更多转向及选择绘制的相关信息,请参见OpenGL ES开发指南。

定义正方形

定义一个三角形是很容易的,但是定义一些稍微比较复杂一点的图形会怎么样?比如定义一个正方形?这里提供了几种实现方式,但是典型的方式就是将两个三角形绘制到一起,然后形成一个正方形:

再提醒一次,定义图形的时候应该以逆时针方向定义这两个三角形的顶点。为了避免两个三角形都重复定义两个坐标点,应该使用绘制列表来告诉OpenGL ES绘制管道如何绘制这些顶点。下面是这个图形的代码:

public class Square {private FloatBuffer vertexBuffer;private ShortBuffer drawListBuffer;// number of coordinates per vertex in this arraystatic final int COORDS_PER_VERTEX = 3;static float squareCoords[] = {-0.5f,  0.5f, 0.0f,   // top left-0.5f, -0.5f, 0.0f,   // bottom left0.5f, -0.5f, 0.0f,   // bottom right0.5f,  0.5f, 0.0f }; // top rightprivate short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw verticespublic Square() {// initialize vertex byte buffer for shape coordinatesByteBuffer 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 listByteBuffer 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);}
}

这个示例展现了如何创建复合型图形的方法。一般情况下,会以三角形堆叠的方式来绘制对象。在下节课中,你会学习到如何在屏幕上绘制这些图形。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 765. 情侣牵手(贪心)

1. 题目 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。 人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号…

Python 捕获异常

Python捕获异常 一.常见异常 1.语法错误:SyntaxError:invalid syntax (1)案例: (1)解决方法: ①查看代码有没有红色波浪线 ②熟悉python基本语法 2.变量名不存在:NameError:name b is not defined (1)案例: (2)解决方法: ①检查对应的变量名是否有定义并赋值,是否写错了变量名…

论文浅尝 | WWW2020 - 知识图谱中的实体摘要:算法、评价和应用 (PPT)

本文转载自公众号:专知。知识图谱封装了实体和关系。知识图谱的简洁表示格式和图的特性使得许多新的Web应用程序得以创建,并增强了现有的应用性能。然而,在一个知识图谱中,描述一个实体的几十个或几百个事实可能会超出一个典型用户…

一条互联网广告多少钱?

文 | 申探社本文已获作者授权,禁止二次转载一. 导读互联网广告中的出价模式发展经历了许多变迁。从一开始的CPM,到CPC出价模式,随着Facebook的oCPX (如oCPM/oCPC) 成为了网红,之后的双出价,激活且付费,Face…

LeetCode 100. 相同的树(二叉树遍历)

1. 题目 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 2. 解题 2.1 递归 class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(!p &&am…

Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方开发文档Training系列课程中文版:OpenGL绘图之图形定义。 在定义了图形之后,你…

Python之极验滑动验证码的识别(教程+案例)+识别豆瓣登录滑动验证码(附源码)

Python之极验滑动验证码的识别(教程案例) def get_tracks(distance, rate0.6, t0.2, v0):"""将distance分割成小段的距离:param distance: 总距离:param rate: 加速减速的临界比例:param a1: 加速度:param a2: 减速度:param t: 单位时间…

论文浅尝 | ICLR 2020 - 一文全览知识图谱研究

本文转载自公众号:AI科技评论 作者 | Michael Galkin编译 | 贾伟ICLR 2020 正在进行,但总结笔记却相继出炉。我们曾对 ICLR 2020 上的趋势进行介绍,本文考虑的主题为知识图谱。作者做波恩大学2018级博士生 Michael Galkin,研究方…

Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图

原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投影相机View可以将所绘制的图形模拟成现实中所看到的物理性状。这种物理模拟是通过改变对象的数字坐标实现的: 投影 - 这基…

算法工程师怎样提升业务理解能力?

文 | 桔了个仔知乎本文已获作者授权,禁止二次转载我刚转做金融风控时,觉得自己写代码多年了,对金融风控的业务不上心,公司让我做什么我就用自认为及其优雅的编码方式解决,但对为什么要做这个事,做了对业务上…

强化学习在美团“猜你喜欢”的实践

1 概述 “猜你喜欢”是美团流量最大的推荐展位,位于首页最下方,产品形态为信息流,承担了帮助用户完成意图转化、发现兴趣、并向美团点评各个业务方导流的责任。经过多年迭代,目前“猜你喜欢”基线策略的排序模型是业界领先的流式更…

论文浅尝 | CoRR - 面向复杂知识问答的框架语义解析方法

论文笔记整理:谭亦鸣,东南大学博士。来源:CoRR abs/2003.13956 (2020)链接:https://arxiv.org/pdf/2003.13956.pdfKBQA任务中的语义解析目标是将自然语言问题转化为标准查询,而后用于构建知识库查询。现有的方法主要依…

全栈深度学习第1期:如何启动一个机器学习项目?

一 起 追 剧 鸭 !简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目,通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。1. Berkeley深度学习追剧群目前已有1000小伙伴加入,公众号后台回复口令…

超详细中文注释的GPT2新闻标题生成项目

超详细中文注释的GPT2新闻标题生成项目:https://zhuanlan.zhihu.com/p/338171330 笔者开源了一个带有超详细中文注释的GPT2新闻标题生成项目。该项目参考了GPT2-Chinese、GPT2-chitchat、CDial-GPT、GPT2等多个GPT2开源项目(感谢大佬们的开源&#xff09…

构建时预渲染:网页首帧优化实践

前言 自JavaScript诞生以来,前端技术发展非常迅速。移动端白屏优化是前端界面体验的一个重要优化方向,Web 前端诞生了 SSR 、CSR、预渲染等技术。在美团支付的前端技术体系里,通过预渲染提升网页首帧优化,从而优化了白屏问题&…

论文浅尝 | 利用指针生成网络的知识图谱自然语言生成

论文笔记整理:谭亦鸣,东南大学博士,研究方向为知识图谱问答。来源:Neurocomputing 382: 174-187 (2020)链接:https://www.sciencedirect.com/science/article/abs/pii/S0925231219316820?via%3Dihub指针生成网络在自然…

学术工业界大佬联合打造:ML产品落地流程指南

文 | 白鹡鸰给小铁比了个心编 | 小轶给白鸟鸟比了个赞卖萌屋原创出品,本文禁止转载前言现在已经有了许多现成的ML开发部署工具,所以想要完成一个ML产品并不困难。但在实际开发过程中,人多手杂,免不了一顿兵荒马乱。相比之下&#…

基于GAN的个性化短标题生成在1688平台的实践应用

原文链接:https://developer.aliyun.com/article/770631 基于GAN的个性化短标题生成在1688平台的实践应用 在电商情境下,卖家为了吸引买家兴趣,也为了提高商品被搜索引擎检索命中的概率,通常趋向于写过于冗长的商品标题。如何从过…

LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)

1. 题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums [-1,2,1,-4], 和 …

领域应用 | 2020 年中国知识图谱行业分析报告

本文转载自公众号:艾瑞咨询。 核心摘要:人工智能本质是解决生产力升级的问题,人类生产力可以归类为知识生产力和劳动生产力,人工智能走入产业后,可以分为感知智能、认知智能和行为智能,后两者更与生产力相…