Passing Data to the Vertex ShaderVertex AttributesAt the start of the OpenGL pipeline,we use the in keyword to bring inputs into the vertex shader.Bet...
在上一个例子中,我们得到了由mesh组件传递的信息经过数学转换至合适的颜色区间以颜色的形式着色到物体上。这篇文章将要在此基础上研究片段的擦除(discarding fragments)和前面剪裁、后面剪裁(front face culling and back face culling)来达到透明效果。
当一个mesh组件的信息被传递后,我们可以通过代码决定哪些部分渲染(render)出来,而哪些部分不要,这个过程就像把那些不要的部分剔除了,我们看不到他,虽然他的mesh信息还在,但是我们的GPU不会去处理...
分类:
其他好文 时间:
2014-08-19 19:03:25
阅读次数:
304
上一篇文章的例子中我们可以看到顶点着色器的输出参数可以说是直接作为了片段着色器的形参传递过来,那么不由得一个问题浮现出来,顶点着色器的形参是从何处传递过来的?
顶点着色器的形参是gameObject 的meshRenderer组件将所有的mesh数据按每一帧一次传递给OpenGL。
这中间的过程常常被称作一次draw call,往往一次性传输大量mesh信息作为一次draw call 比多次传输少量mesh信息引起多次draw call更加效率。
而在上一个例子中我们只接受了MeshRenderer传递...
分类:
其他好文 时间:
2014-08-19 16:31:04
阅读次数:
212
1. vertex shader 和 fragment shader 通过varying变量传递数据, 如下代码在编译fragment shader时候会提示编译错误vertex shaderFragment shader varying vec4 v_color; ...
分类:
其他好文 时间:
2014-08-19 00:59:03
阅读次数:
355
前提知识点:
1.CG代码必须用
CGPROGRAM
。。。
ENDCG括起来
2.顶点着色器与片段着色器的主函数名称可随意,但需要再#pragma vert 与#pragma fragment中声明并且与主函数名完全匹配,shader才会找到入口
3.float4是一种压缩数组,float4 vert与float vert[4]严格意义上讲不同,虽然都是存放4个float,但float4作为向量类型做点乘、内积等处理更快速
4.语义 :变量除了变量名与数据类型之外,还在:后声明其语义
例子一:RGB立方体...
分类:
其他好文 时间:
2014-08-18 20:32:52
阅读次数:
231
总结:要逆一个程序必须清楚地知道程序的结构和常用的API函数,不清楚一个程序而去逆出结果是不可能滴 首先是glsl脚本运行的全过程,第一步是为shader的运行创建一个容器GLuint glCreateProgram(void),第二步是把编译好的shader附加到程序void glAttachSh...
分类:
移动开发 时间:
2014-08-16 00:56:09
阅读次数:
429
Android应用程序显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量、布局和绘制后的Surface渲染到显示屏幕上。名词解释SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕。Surface:Android应用的每...
分类:
移动开发 时间:
2014-08-15 21:06:59
阅读次数:
358
本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。========================================== 分割线 ==========================================写在前面...
分类:
移动开发 时间:
2014-08-15 17:54:59
阅读次数:
316
Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树。 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如MeshRenderer会关联材质,材质会关联shader和贴图 场景图的一部分可以被保存为一个预设,pr...
分类:
其他好文 时间:
2014-08-10 12:49:30
阅读次数:
326
下面继续看基于surface的shader代码,基本与Vertex&Fragment shader差不多,只是不能写pass,然后只需要声明surface函数,就能处理所有的事情。 1 Shader "T1/Hero/Diffuse" { 2 Properties { 3 _...
分类:
其他好文 时间:
2014-08-10 01:36:59
阅读次数:
321