OpenGL ES学习之顶点和着色器的定义
来源:互联网 发布:c语言编程简单的小游戏 编辑:程序博客网 时间:2024/04/29 22:24
1.顶点、直线及三角形介绍
在OpenGL中,只能绘制点、直线和三角形,所有东西的结构都是从一个顶点开始。一个顶点就是一个代表几何对象的拐角的点,它有很多附加属性,其中最终要的属性就是位置,它代表这个顶点在空间中的定位。
- 在代码中定义顶点
如在我们的MyRenderer类的构造函数中添加如下代码构建一个长方形
public MyRenderer(Context context) { this.context = context; float[] tableVertices = { 0f, 0f, 0f, 14f, 9f, 14f, 9f, 0f }; }
- 在代码中构建三角形
在OpneGL中,将单独的点放在一个组里构建出三角形。
public MyRenderer(Context context) { this.context = context; float[] tableVerticesWithTriangles = { // Triangle 1 0f, 0f, 9f, 14f, 0f, 14f, // Triangle 2 0f, 0f, 9f, 0f, 9f, 14f }; }
这里说明下三角形的卷曲顺序:定义三角形时候,总是以逆时针顺序排列顶点,因为这样可以优化性能。
2.OpenGL存取顶点属性数组
利用java一个特殊的类集合分配本地内存块,将java的数据复制到本地内存。本地内存可以被本地环境存取,而不受垃圾回收器管控。
public MyRenderer(Context context) { this.context = context; ········· vertexData = ByteBuffer .allocateDirect(tableVerticesWithTriangles.length * BYTES_PER_FLOAT) .order(ByteOrder.nativeOrder()) .asFloatBuffer(); vertexData.put(tableVerticesWithTriangles); }
使用 ByteBuffer.allocateDirect() 分配一块本地内存,这块内存大小为 tableVerticesWithTriangles.length * BYTES_PER_FLOAT 。调用 order(ByteOrder.nativeOrder()) 保证一个平台使用同样的排序,调用 asFloatBuffer() 得到一个可以反映底层字节的FloatBuffer类实例,之后调用 vertexData.put(tableVerticesWithTriangles) 将数据从Dalvik内存复制到本地内存。
3.使用着色器
将图形结构画到屏幕上之前,在OpenGL管道中传递,需要着色器的子例程。有两种类型的着色器,分别是顶点着色器和片段着色器。
- 创建顶点着色器
在项目中的“res”文件夹下创建“raw”文件夹,并创建如 vertex_shader.glsl文件,代码如下:
attribute vec4 a_Position; void main() { gl_Position = a_Position; gl_PointSize = 10.0;}
- 创建片段着色器
片段着色器的主要目的就是告诉GPU每个片段的最终颜色。
precision mediump float; uniform vec4 u_Color; void main() { gl_FragColor = u_Color; }
4.将颜色映射到显示屏上
OpenGL假定颜色互相之间是线性关系,这些基本颜色值被限定在范围[0,1]内,0代表缺少此种基本颜色,1则代表此颜色的最大强度。
1 0
- OpenGL ES学习之顶点和着色器的定义
- 【OpenGL ES】顶点着色器
- OpenGL ES _ 着色器_顶点着色器和片断着色器详解
- 对用OpenGL ES 2.0实现OpenGL ES 1.1的顶点着色器的研究
- OpenGL ES着色器语言之着色
- OpenGL ES着色器语言之着色
- OpenGL ES 2.0——顶点着色器Vertex Shader
- OpenGL ES 2.0——顶点着色器Vertex Shader
- OpenGL ES 同样的灯光计算在顶点着色器和在片元着色器中计算有什么不同
- opengl顶点着色器
- OpenGL ES着色器语言之变量和数据类型
- OpenGL ES着色器语言之变量和数据类型
- OpenGL ES着色器语言之变量和数据类型
- OpenGL ES 3.0之着色器和程序
- iOS之OpenGL ES【2】:渲染管线和着色器
- OpenGL ES着色器语言之变量和数据类型
- OpenGL ES着色器语言之变量和数据类型
- opengl一个简单的顶点着色器
- GreenDao3使用笔记
- 二叉树的非递归遍历
- python数据结构学习笔记-2016-11-24-01-快速排序
- HTTP协议—详解
- 深度学习-序
- OpenGL ES学习之顶点和着色器的定义
- Aho-Corasick算法的Java实现与分析
- poj3034 Whac-a-Mole
- [LeetCode 309] Best Time to Buy and Sell Stock with Cooldown(动态规划及进一步优化)
- java 小结
- 常用内存泄漏的解决
- HDU-5985-Lucky Coins-2016青岛站D题-数学推导
- HDU2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包经典)
- A - 计算两点间的距离