OpenGL笔记(一) 绘制三角形
一、一些概念:
GLTools: 一些有用且可复用的函数
GLEW: OpenGL API的一些扩展机制
GLUT: OpenGL Utility toolkit, OpenGL跨平台相关,隐藏平台相关细节
RC代表渲染环境(Rendering Context),是运行中的OpenGL状态机句柄
固定渲染模式限制了开发者的自由,目前一般都是采用核心模式(Core-profile)。
跨距Stride
可以用2个数组分别描述位置和颜色信息,这样必须保证两个数组中顶点的位置和颜色是否一一对应。
除了这种方式,还可以选择一个数组存储两种信息的方式:“顶点1位置+顶点1颜色+顶点2位置+顶点2颜色+”,这样就引出了跨距的概念,即一个顶点和颜色占用的空间个数之和。
OpenGL的操作方式
由跨距可以看出,OpenGL操作时,一般都是将所需的数据准备好,然后调用glDrawElements函数一次绘制完成,而不是通过某个函数一个顶点一个顶点的去渲染,这是OpenGL渲染的一个特点。
二、开发重点
1. 顶点着色器
每个顶点执行一次,比如我们绘制一个线段,包含了2个顶点,那就是执行2次顶点着色器。我们传递给顶点着色器的数据不仅包含了每个顶点的位置,也包含颜色
2. 片段着色器
3. 将数据传递给着色器
顶点和片段着色器用于描述如何绘制图形图像的环节;
GLSL:OpenGL编写着色器具体实现的编程语言;
三、归一化坐标
顶点的归一化坐标是[-1,1];
纹理的归一化坐标是[0,1],两位维度分别是S、T,一般称为ST纹理坐标或UV坐标;如果设置的纹理坐标小于1,意思是将纹理的一小部分贴到顶点坐标中去;大于1,纹理边界将会拉伸。
纹理坐标方向性在Android上与我们平时熟悉的Bitmap、Canvas等一致,都是顶点在左上角。
四、纹理
1. 纹理:在OpenGL中简单理解就是一张图片
2. 纹理ID:纹理的直接引用
3. 纹理单元:纹理的操作容器,有GL_TEXTURE0、GL_TEXTURE1、GL_TEXTURE2等,纹理单元的数量是有限的,最多16个。所以最多只能同时操作16个纹理。在切换使用纹理单元的使用,使用glActiveTexture方法。
4. 纹理目标:一个纹理单元中包含了多个类型的纹理目标,有GL_TEXTURE_1D,GL_TEXTURE_2D等;
5. 纹理ID与纹理单元的关系
OpenGL要操作一个纹理,那么是将纹理ID装进纹理单元这个容器里,然后再通过操作纹理单元的方式去实现。
OpenGL的大部分纹理一般都只接受RGBA类型的数据,如果不是RGBA,比如YUV420P格式,可以在显卡中进行转换。
五、glDrawArrays顶点法和glDrawElements索引法的绘制区别
1. glDrawArrays只能是依次输入所绘制的每个三角形的每个数据,而glDrawElements需要输入每个定点(无需重复),外加一个绘制时的索引数组。
glDrawArrays传输或指定的数据是最终的真实数据,在绘制时效能更好;
glDrawElements指定的是真实数据的调用索引,在内存/显存占用上更节省;
glDrawArrays的数据空间损耗在顶点定义处;glDrawElements的数据空间损耗在顶点索引的定义处;
2. 适用情况
如果顶点复用情况较少,可以采用glDrawArrays;如果顶点复用情况多,画的图形较多,而且大不相同的时候,优先采用glDrawElements。
顶点法内存计算方式:顶点数 * 顶点属性数 * 顶点数据格式类型;
索引法内存计算方式:顶点数 * 顶点属性数 * 顶点数据格式类型 + 索引数 * 索引数据格式类型
3. 输入坐标时一定要输入完整,比如带.0f。
4. draw mode
比较关键的一个参数,2D绘制一般采用GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN。
GL_TRIANGLE_STRIP:相邻3个点构成一个三角形,不包括首位两个点,例如ABC、BCD、CDE、DEF
GL_TRIANGLE_FAN:第一个点和之后所有相邻的2个点构成一个三角形,例如ABC、ACD、ADE、AEF
六、纹理
1. 环绕方式
GL_CLAMP_TO_EDGE:纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果
GL_REPEAT:对纹理的默认行为。重复纹理图像。
2. 纹理过滤
GL_NEAREST邻近过滤,是OpenGL默认的纹理过滤方式。当设置为GL_NEAREST的时候,OpenGL会选择中心点最接近纹理坐标的那个像素。
GL_LINEAR线性过滤,它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。
OpenGL笔记(一) 绘制三角形的更多相关文章
- Android OpenGL 入门示例----绘制三角形和正方形
Android上对OpenGl的支持是无缝的,所以才有众多3D效果如此逼真的游戏,在Camera的一些流程中也有用到GLSurfaceView的情况.本文记录OpenGL在Android上的入门级示例 ...
- Linux OpenGL 实践篇-3 绘制三角形
本次实践是绘制两个三角形,重点理解顶点数组对象和OpenGL缓存的使用. 顶点数组对象 顶点数组对象负责管理一组顶点属性,顶点属性包括位置.法线.纹理坐标等. OpenGL缓存 OpenGL缓存实质上 ...
- iOS OpenGL ES简单绘制三角形
OpenGL 是用于2D/3D图形编程的一套基于C语言的统一接口. windows,Linux,Unix上均可兼容. OpenGL ES 是在OpenGL嵌入式设备上的版本, android/iOS ...
- Android OpenGL ES(十)绘制三角形Triangle .
三角形为OpenGL ES支持的面,同样创建一个DrawTriangle Activity,定义6个顶点使用三种不同模式来绘制三角形: float vertexArray[] = { -0.8f, - ...
- OpenGL学习(2)——绘制三角形
在创建窗口的基础上,添加代码实现三角形的绘制. 声明和定义变量 在屏幕上绘制一个三角形需要的变量有: 三角形的三个顶点坐标: Vertex Buffer Object 将顶点数据存储在GPU的内存中: ...
- opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Inde ...
- 1.opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO,用于存储顶点状态配置信息,每当界面刷新时,则通过VAO进行绘制. 顶点缓冲对象:Vertex Buffer Object,VBO,通过VB ...
- OpenGL学习(2)——绘制三角形(补)
对上一篇的补充,通过绘制三角形来完成矩形的绘制.此外,完成章节后练习. 绘制矩形 一个矩形由两个三角形组成,因此绘制矩形需要绘制两个三角形,一共6个顶点,其中2个顶点重复画了两次. 为了减小开销,仅储 ...
- CSS学习笔记(8)--纯CSS绘制三角形(各种角度)
纯CSS绘制三角形(各种角度) CSS三角形绘制方法,学会了这个,其它的也就简单. 我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多 ...
- OpenSceneGraph 笔记--如何导出三角形数据
OpenSceneGraph 笔记--如何导出三角形数据 转载:http://blog.csdn.net/pizi0475/article/details/5384389 在OpenSceneGrap ...
随机推荐
- [转]vue数据绑定(数据,样式,事件)
1.mounted 与 methods 与 computed 与 watched区别 From:https://blog.csdn.net/qinlulucsdn/article/details/80 ...
- javaSE——File文件的操作
File文件操作: 在java中,File是文件和文件夹的总称. 在java中也是一个类,可以创建多个file对象. File类的一些API import java.io.File; public c ...
- Solo 博客系统 1.7.0 发布 - 新版 MD 编辑器
本次发布主要是更新了 Markdown 编辑器,加入了全屏.Emoji 自动完成.粘贴时自动转换为 MD 格式的特性.(1.7.0 版本变更记录请看这里) 目前的 Markdown 编辑器有多好用呢? ...
- Myeclipse使用过程配置汇总
1.下载安装及破解方法 myeclipse2014专业版下载地址链接:https://pan.baidu.com/s/1i62YOGt 密码:nlqj : 下载后安装到最后一步先不要打开软件,如 ...
- 安卓脱壳&&协议分析&&burp辅助分析插件编写
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前言 本文以一个 app 为例,演示对 app脱壳,然后分析其 协 ...
- Pwn with File结构体(四)
前言 前面几篇文章说道,glibc 2.24 对 vtable 做了检测,导致我们不能通过伪造 vtable 来执行代码.今天逛 twitter 时看到了一篇通过绕过 对vtable 的检测 来执行代 ...
- web.xml里welcome-file欢迎页面配置及web.xml简介
web项目欢迎页面的配置 <welcome-file-list> <welcome-file>/WEB-INF/index.html</welcome-file> ...
- ubuntu14.04 忘记了登录密码和root密码
由于很久没用自己的ubuntu了,发现刚想用时却忘记了密码,搞了半天终于搞好了,真的.... 在此记录一下自己的新密码:登录密码:1234567:ROOT密码:1234567 下面是整理网上的教程,亲 ...
- 无锁HashMap的原理与实现
转载自: http://coolshell.cn/articles/9703.html 在<疫苗:Java HashMap的死循环>中,我们看到,java.util.HashMap并不能直 ...
- Apache服务器如何通过.htaccess文件设置防盗链?
Apache服务器通过.htaccess文件设置防盗链 用户经常面对的一个问题就是服务器的流量问题,而站点文件被盗链是其中最为主要的部分.所谓盗链,是指其他网站直接链接我们网站上的文件,一般来说,盗链 ...