OpenGL 入门基础知识
2016-10-16 22:52
204 查看
环境
Android Studio
使用JAVA 学习 OpenGLES
参考书籍
《OpenGL es 2.0 上卷》
大二下学期的时候,因为计算机图形学这门课,短暂接触了OpenGL,但是使用的都是一些简单的API,如 GLBegin,GLEnd,GLVertex等方法去进行绘图,在接触 Open GL ES 2.0 后,发现原本的GLBegin,GLEnd的 绘图方式已经被弃用了,新的绘图方式将在 着色器中进行 也就是Shader.
先上一张 OpenGL ES 2.0的渲染管线~~,注意,VertexShader FragmentShader, 简单的来说,VertexShader(顶点着色器) 应当顶点输出最后映射在屏幕上的坐标!! FragmentShader (片元着色器)则负责对每个片元进行着色,也就是说负责输出颜色
以上是OpenGL ES2.0中最重要的概念,因为我们将不再采取GLBegin GLEnd的方法绘图~~,而是通过把顶点的数据,传入VertexShader,将颜色数据传入 FragmentShader 来进行绘图。
先来看一份普遍的 vertexShader , gl_Position 是 内置变量,意思是 该变量 即是 该顶点最后输出在 屏幕的位置,基本每个 顶点着色器,我们都可以看到
Mvp矩阵 (同样是程序中传进来)右乘 aVertexPos (是从 程序中传来的顶点 )
大家都知道MVP 即是 总变换矩阵,为什么呀?
想想,在进行 绘图之前我们都要做些什么,
1.初始化 变换矩阵,进行一些列的 平移变换,缩放,旋转
2.设置摄像机的位置
3.设置投影的参数(正交投影?,透视投影?)
在这里就涉及了3个空间坐标,1 世界空间坐标 2.观察空间坐标 3.投影空间坐标
很容易理解,在输入顶点数据的时候,我们给了一些列的顶点坐标,但是这些顶点的坐标最后都不是显示在屏幕上的坐标。。
而MVP矩阵,则是记录了 所有变换的矩阵。。。
也就是说,我们一般会记录 3个矩阵,
模型矩阵(Model) 是专门用来进行平移,缩放,旋转的。
观察矩阵(View)是专门用来进行设置摄像机的参数的
投影矩阵(Projection) 是专门用来进行 设置投影参数的
所以每个输出的顶点最后 都要与MVP矩阵相乘。
接下来看看片元着色器
varyring 是从顶点着色器 中传过来的颜色参数, gl_FragColor 是片元着色器的内置变量,意思是最后该片元的输出颜色
需要注意的有3点
1.一个片元,并不完全等于一个像素~~但有时候却可以这么理解。。
2.片元着色器是每个片元执行一次~,那顶点着色器自然就是每顶点执行一次啦
3.因为顶点的数量一般都是小于片元的,所以从顶点着色器传过来的颜色值,是经过了插值计算后的颜色值~~
~在了解完上述的知识点后,很明显,我们只需要将 数据从程序中传入 着色器的代码中,既可以完成绘图。
本人之前一直学习Unity3D,最近开始学习OpenGL ES,希望可以理解更多没接触过的领域。。。写的不好的地方,请多多指教
Android Studio
使用JAVA 学习 OpenGLES
参考书籍
《OpenGL es 2.0 上卷》
大二下学期的时候,因为计算机图形学这门课,短暂接触了OpenGL,但是使用的都是一些简单的API,如 GLBegin,GLEnd,GLVertex等方法去进行绘图,在接触 Open GL ES 2.0 后,发现原本的GLBegin,GLEnd的 绘图方式已经被弃用了,新的绘图方式将在 着色器中进行 也就是Shader.
先上一张 OpenGL ES 2.0的渲染管线~~,注意,VertexShader FragmentShader, 简单的来说,VertexShader(顶点着色器) 应当顶点输出最后映射在屏幕上的坐标!! FragmentShader (片元着色器)则负责对每个片元进行着色,也就是说负责输出颜色
以上是OpenGL ES2.0中最重要的概念,因为我们将不再采取GLBegin GLEnd的方法绘图~~,而是通过把顶点的数据,传入VertexShader,将颜色数据传入 FragmentShader 来进行绘图。
uniform mat4 uMvpMatrix;
attribute vec3 aVertextPos;
attribute vec4 aColor;
varying vec4 vColor;
void main()
{
gl_Position = uMvpMatrix * vec4( aVertextPos,1); // 4维,是因为齐次坐标
vColor = aColor;
}
先来看一份普遍的 vertexShader , gl_Position 是 内置变量,意思是 该变量 即是 该顶点最后输出在 屏幕的位置,基本每个 顶点着色器,我们都可以看到
gl_Position = uMvpMatrix * vec4( aVertextPos,1);
Mvp矩阵 (同样是程序中传进来)右乘 aVertexPos (是从 程序中传来的顶点 )
大家都知道MVP 即是 总变换矩阵,为什么呀?
想想,在进行 绘图之前我们都要做些什么,
1.初始化 变换矩阵,进行一些列的 平移变换,缩放,旋转
2.设置摄像机的位置
3.设置投影的参数(正交投影?,透视投影?)
在这里就涉及了3个空间坐标,1 世界空间坐标 2.观察空间坐标 3.投影空间坐标
很容易理解,在输入顶点数据的时候,我们给了一些列的顶点坐标,但是这些顶点的坐标最后都不是显示在屏幕上的坐标。。
而MVP矩阵,则是记录了 所有变换的矩阵。。。
也就是说,我们一般会记录 3个矩阵,
模型矩阵(Model) 是专门用来进行平移,缩放,旋转的。
观察矩阵(View)是专门用来进行设置摄像机的参数的
投影矩阵(Projection) 是专门用来进行 设置投影参数的
所以每个输出的顶点最后 都要与MVP矩阵相乘。
接下来看看片元着色器
precision mediump float;
varying vec4 vColor;
void main()
{
gl_FragColor = vColor;
}
varyring 是从顶点着色器 中传过来的颜色参数, gl_FragColor 是片元着色器的内置变量,意思是最后该片元的输出颜色
需要注意的有3点
1.一个片元,并不完全等于一个像素~~但有时候却可以这么理解。。
2.片元着色器是每个片元执行一次~,那顶点着色器自然就是每顶点执行一次啦
3.因为顶点的数量一般都是小于片元的,所以从顶点着色器传过来的颜色值,是经过了插值计算后的颜色值~~
~在了解完上述的知识点后,很明显,我们只需要将 数据从程序中传入 着色器的代码中,既可以完成绘图。
本人之前一直学习Unity3D,最近开始学习OpenGL ES,希望可以理解更多没接触过的领域。。。写的不好的地方,请多多指教
相关文章推荐
- OpenGl入门基础知识-叩开3D的心扉
- Java基础知识——Java入门与加深
- linux操作系统下c语言编程入门 -- (1)基础知识
- linux程序设计入门----基础知识:linux下C语言编程基础知识
- MySQL入门基础知识简介
- Java初学者入门基础知识
- OpenGL基础知识
- Windows通用克隆系统入门基础知识简介
- Windows API-GDI入门基础知识详解 来源: PConline.com.cn
- linux操作系统下c语言编程入门--基础知识
- 入门:PHP编程“数组”的基础知识
- 1)Linux程序设计入门--基础知识
- Java基础知识——Java入门与加深
- 解密基础知识入门
- 脱壳基础知识入门和提高----第三课 识壳
- Java基础知识——JNI入门介绍
- 1Linux程序设计入门--基础知识
- Linux程序设计入门--基础知识
- Windows API-GDI入门基础知识详解
- 入门:PHP编程“数组”的基础知识