最近有幸总结了一下kanzi中opengl的东西,实际比较重点的也就是shader部分,对于其他部分,这里也会简单的说,但是具体的功能作用就要自己下来慢慢研究了
一:引言
本文章主要介绍kanzi和opengl之间的一些问题,可能会比较杂,因为很多东西也无法预测他们具体是如何结合,故我们会以kanzi为主,在kanzi的基础上介绍opengl的一些东西。
通过kanzi help doc中的opengl接口,我们可以了解kanzi也是支持modern opengl,故老的opengl接口是不支持的。具体接口可见<system/wrappers/kzs_opengl.h>
这里的东西比较杂,我们不会具体的说,这里会分几个大块来针对性的说明。
二:具体介绍
一:着色器
一:shader(着色器)
着色器(Shader)是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。其中Vertex Shader主要负责顶点的几何关系等的运算,Pixel Shader(Fragment Shader)主要负责片源颜色等的计算。
着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。
目前比较流行的Shader语言除了GLSL之外还有HLSL,RM等,当然,我们目前主要使用GLSL。
Opengl的绘图管线
当然,这部分opengl的部分这里只是简单介绍。我们只需知道整个工作流程即可。
- 准备顶点数据:
在CPU中进行。这里会定义一些VAO和VBO,他们包含了每个一些顶点数据的信息,在shader中的体现即attribute。
在kanzi中,我们定义的EmptyNode2D或者Image2D...在这部分的体现即会准备不重复的4个点即重复的6个点,构成2个三角形。然后会将这些点绑定到VAO或者VBO中,发送给GPU。
- Vertex Processing:
调用Vertex Shader处理顶点数据信息。这个阶段会接受传递过来的attribute数据作为输入,然后通过一些转换后输出。每个顶点都是1对1。
Kanzi中我们可以看到attribute属性的有kzPosition,kzTextureCoordinate0及其他。
- Primitive Assembly
图元装配:即把vertex shader输出的顶点数据集合到一起,并把它组合成一个图元的过程。这个输出的类型由用户决定,一般输出的是三角形,这个取决于你drawcall的类型。
- Geometry Shading: 这个目前不做介绍,它即对Primitive Assembly输出的图元处理后再输出图元。