OpenGL
文章平均质量分 91
李元静
专注移动开发10年,对Android、鸿蒙、Python以及Flutter均有涉猎。最近更新Python爬虫与鸿蒙专栏,著有《Flutter App开发从入门到实战》一书,感兴趣的读者加微极客学编程,实时掌握博主的更新动态。
展开
-
Android OpenGL ES(一)----必备知识
1.手机的坐标空间我们都知道要想在手机上随心所欲的绘制图形,就必须了解手机的坐标体系。下图就是将坐标映射到手机屏幕的坐标。 图1手机屏幕基本坐标系2.OpenGL基本图形在OpenGL里,只能绘制点,直线以及三角形。三角形是最基本的图形,因为它的结构如此稳定,它随处可见,比如桥梁的结构化构件,它有三条边用来连接它的三个顶点,如果我们拿掉其原创 2015-06-21 20:35:32 · 7548 阅读 · 5 评论 -
Android OpenGL ES(三)----编程框架
首先当然是创建Android项目,你可以选择最新的Android Studio也可以选择eclipse都是一样的。我们重点讲解开发OpenGL ES的流程1.定义顶点着色器和片段着色器第一节我们讲解的已经很细致了,为了便于理解在这里在详细的说明一下。并且换一种方式定义着色器。我们知道第一篇定义的顶点的坐标和颜色是分开的,这样可以但如果把它们放在一起会方便许多。假设我们要绘制一个长方原创 2015-06-23 21:00:49 · 5444 阅读 · 0 评论 -
Android OpenGL ES(二)----平滑着色
直线或者三角形上的每个片段混合后的颜色可以用一个varying生成。我们不仅能混合颜色,还可以给varying传递任何值,OpenGL会选择属于那条直线的两个值,或者属于那个三角形的三个值,并平滑地在那个基本图元上混合这些值,每个片段都会有一个不同的值,并平滑地在那个图元上混合这些值,每个片段都会有一个不同的值。这种混合是使用线性插值实现的。要了解它是怎么工作的,让我们首先以一条直线为例开始讲解。原创 2015-06-22 19:53:38 · 4321 阅读 · 0 评论 -
Android OpenGL ES(四)----调整屏幕的宽高比
1.宽高比问题我们现在相当熟悉这样一个事实,在OpenGL里,我们要渲染的一切物体都要映射到X轴和Y轴上[-1,1]的范围内,对于Z轴也一样。这个范围内的坐标被称为归一化设备坐标,其独立于屏幕实际尺寸或形状。不幸的是,因为它们独立于实际的屏幕尺寸,如果直接使用它们,我们就会遇到问题,例如在横屏模式下被压扁的桌子。假设实际的设备分辨率以像素为单位是1280*720,这原创 2015-06-24 20:02:00 · 7121 阅读 · 0 评论 -
Android OpenGL ES(五)----进入三维正交投影和透视投影推导
在3D图形程序的基本矩阵变换中,投影矩阵是其中比较复杂的。平移和缩放浏览一下就能理解,旋转矩阵只要掌握了三角函数知识也可以理解,但投影矩阵有点棘手。如果你曾经看过投影矩阵,你会发现你的常识不足以告诉你它是怎么来的。而且,我在网上还未看到许多关于如何推导投影矩阵的教程资源。本文的话题就是如何推导投影矩阵。 对于刚刚开始接触3D图形的人,我应该指出,理解投影矩阵如何推转载 2015-06-25 19:32:23 · 7755 阅读 · 4 评论 -
Android OpenGL ES(七)----理解纹理与纹理过滤
1.理解纹理 OpenGL中的纹理可以用来表示图像,照片,甚至由一个数学算法生成的分形数据。每个二维的纹理都由许多小的纹理元素组成,它们是小块的数据,类似于我们前面讨论过的片段和像素。要使用纹理,最常用的方式是直接从一个图像文件加载数据。 每个二维纹理都有其自己的坐标空间,其范围是从一个拐角的(0,0)到另一个拐角的(1,1)。按照惯例,一个维度叫做S,而另一个称为T。当我们想要把原创 2015-06-27 20:05:37 · 6432 阅读 · 0 评论 -
Android OpenGL ES(九)----构建几何物体
1.三角形扇一个三角形扇以一个中心顶点作为起始,使用相邻的两个顶点创建第一个三角形,接下来的每个顶点都会创建一个三角形,围绕起始的中心点按扇形展开。为了使这个扇形闭合,我们只需要在最后重复第二个点。(以长方形为例)构建三角形扇的步骤,如下图所示:要使用OpenGL绘制这个三角形扇,需要在渲染类的onDrawFrame()中,使用如下方法:GLES20.g原创 2015-07-01 20:30:33 · 4307 阅读 · 0 评论 -
Android OpenGL ES(八)----纹理编程框架
1.把纹理加载进OpenGL中,2.创建新的着色器集合,3.为顶点数据创建新的类结构,4.为着色器程序添加类,5.绘制纹理。我们的第一个任务就是把一个图像文件的数据加载到一个OpenGL的纹理中。作为开始,让我们重新舍弃第二篇的框架,重新创建一个程序,新建一个util工具包,在该包下创建一个新类TextureHelper,我们将以下面的方法签名开始这个方法会把Android上下文,和资源ID作为输入参数,并返回加载图像的OpenGL纹理的ID。开始时,我们会使用创建其他OpenGL对象时一样的模式生成一个新原创 2015-06-28 20:50:13 · 4676 阅读 · 1 评论 -
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
我们现在准备好在代码中添加透视投影了。Android的Matrix类为它准备了两个方法------frustumM()和perspectiveM()。不幸的是,frustumM()的个缺陷,它会影响某些类型的投影,而perspectiveM()只是从Android的ICS版本开始才被引入,在早期的Android版本里并没有这个方法。我们可以简单地支持ICS及其以上的版本,但是这样会丢掉很大一部分市原创 2015-06-26 19:39:33 · 8486 阅读 · 4 评论