shader

cocos2d-x—使用shader使图片背景透明

本小妞迷上赌 提交于 2020-03-26 06:05:05
这里用shader处理了像素,使黑色背景透明,直接上代码 ShaderSprite.h [cpp] view plain copy print ? #ifndef __TestShader__ShaderSprite__ #define __TestShader__ShaderSprite__ #include "cocos2d.h" USING_NS_CC; class ShaderSprite : public CCSprite { public : static ShaderSprite* create( const char * pszFileName); virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect); virtual void draw( void ); }; #endif /* defined(__TestShader__ShaderSprite__) */ ShaderSprite.cpp [cpp] view plain copy print ? #include "ShaderSprite.h" static CC_DLL const GLchar *transparentshader = #include "tansparentshader.h"

shader常用

百般思念 提交于 2020-03-26 05:56:41
1 模型空间转裁剪空间 UnityObjectToClipPos(v.vertex) 2 模型空间转世界空间 mul( unity_ObjectToWorld, v.vertex ) 3 雾三件套 UNITY_FOG_COORDS(3) UNITY_TRANSFER_FOG(o,o.pos); UNITY_APPLY_FOG(i.fogCoord, c);    4 环境光 UNITY_LIGHTMODE_AMBIENT 5 灯光世界方向 _WorldSpaceLightPos0.xyz 6 摄像机世界坐标 _WorldSpaceCameraPos.xyz 7 方向光颜色 _LightColor0.rgb 8 lightdir = normalize( _WorldSpaceLightPos0.xyz )  入射光方向 -lightdir  viewdir = normalize( _WorldSpaceCameraPos.xyz - worldPos )  反射方向 r = reflect( _lightdir, worldnormal )  半角向量 h = normalize(lightdir + viewdir)   光照模型: blinnphone: c = ambient * diffuse + diffuse * saturate( dot( worldnormal

Vertex Shader

拜拜、爱过 提交于 2020-03-26 05:53:05
uniform mat4 mvp_matrix; //透视矩阵 * 视图矩阵 * 模型变换矩阵 uniform mat3 normal_matrix; //法线变换矩阵(用于物体变换后法线跟着变换) uniform vec3 ec_light_dir; //光照方向 attribute vec4 a_vertex; // 顶点坐标 attribute vec3 a_normal; //顶点法线 attribute vec2 a_texcoord; //纹理坐标 varying float v_diffuse; //法线与入射光的夹角 varying vec2 v_texcoord; //2d纹理坐标 void main(http://www.amjmh.com) { //归一化法线 vec3 ec_normal = normalize(normal_matrix * a_normal); //v_diffuse 是法线与光照的夹角.根据向量点乘法则,当两向量长度为1是 乘积即cosθ值 v_diffuse = max(dot(ec_light_dir, ec_normal), 0.0); v_texcoord = a_texcoord; gl_Position = mvp_matrix * a_vertex; } --------------------- 来源: https:/

Shader编程学习笔记(九)—— Cg语言入门1 - 输入输出和语义

元气小坏坏 提交于 2020-03-24 07:17:20
Cg入门一:输入输出和语义   本小节对Cg语言进行一个入门了解。   在以前的课程中,我们了解了渲染管线、顶点和片段程序和颜色计算等,在本小结中来了解一个简单的shader的顶点和片段程序的输入输出以及常用语义。   编写一个简单的顶点和片段着色器,代码如下: Shader "Lesson/vertex&fragment"{ SubShader{ pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag void vert(in float2 objPos:POSITION, out float4 pos:POSITION){ pos = float4(objPos,0,1); } void frag(out float4 col:COLOR){ col = float4(1,0,0,1); } ENDCG } } } vertex&fragment   Surface Shader没有pass通道,Vertex & Frament Shader至少有一个pass通道。其中,Cg是一个镶嵌的代码段,在ShaderLab语法中需要使用关键词“CGPROGRAM”和“ENDCG”将Cg代码段包含起来才能编译使用,需要注意的是这两个关键词都是大写的。   顶点程序会对顶点做一系列的处理,如几何变换

Unity Shader之TRANSFORM_TEX方法

谁说我不能喝 提交于 2020-03-23 20:36:04
3 月,跳不动了?>>> TRANSFORM_TEX方法比较简单,就是将模型顶点的uv和Tiling、Offset两个变量进行运算,计算出实际显示用的定点uv。 该方法可以在UnityCG.cginc文件中找到,内容也很简单: // Transforms 2D UV by scale/bias property #define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw) 配合使用时的代码: o.uv = TRANSFORM_TEX (v.texcoord, _MainTex); 其中 v是appdata_base类型,v.texcoord就是模型顶点的uv数据。 _MainTex是使用的图片。 name##_ST实际上就是_MainTex_ST。 name##_ST.xy就是Tiling的xy值。 name##_ST.zw就是Offset的xy值。 学海无涯,继续努力。 ———————————————— 版权声明:本文为CSDN博主「HelloMingo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u010133610/article/details/78789940 来源: oschina 链接:

GDC2017【神秘海域 4】中所使用的顶点着色器技术

99封情书 提交于 2020-03-21 17:02:25
原文链接 http://game.watch.impress.co.jp/docs/news/1047802.html 会場:San Francisco Moscone Convention Center Naughty Dog的Lead Technical Artist、Andrew Maximov氏 在 GDC 2017的最后一天, Naughty Dog在题为【 Technical Art Techniques of Naughty Dog: Vertex Shaders and Beyond 】的分享会上,对公司的人气动态做冒险游戏【神秘海域4( Uncharted 4 )】的Vertex Shader(顶点着色器)的使用实现的要素做了解说。 登场解说的,是 Naughty Dog的 技术美术组长( Lead Technical Artist) Andrew Maximov。 Maximov所列举的【 神秘海域 4 】的粒子着色器所做的内容,相当的丰富和有意思。 这次是基本上是沿袭 SIGGRAPH 2016上的内容,不过因为是 GDC 2017最后一天最后的一个主题,会场里包含站着听的开发者完全的满员,不得不进行入场的限制。 所谓的 Vertex Shader是什么呢 ,在最近GPU上的支持了没有分工区别的统一渲染架构的Unified-Shader的同时

osg中使用geometry shader方式

烈酒焚心 提交于 2020-03-21 14:01:27
可以参考osg示例代码osggeometryshaders 它用glsl版本比较老#version 120 #extension GL_EXT_geometry_shader4 : enable 使用gl_PositionIn[],而不能使用gl_in[],这个需要更高版本 类似以下代码: #version 150 layout(triangles) in; layout(triangle_strip, max_vertices=3) out;vec4 p0_3d = gl_in[0].gl_Position;vec4 p1_3d = gl_in[1].gl_Position;vec4 p2_3d = gl_in[2].gl_Position; 需要使用osg::Program* p; p->setParameter(GL_GEOMETRY_VERTICES_OUT_EXT ,3);//对应 max_vertices=3 p->setParameter(GL_GEOMETRY_INPUT_TYPE_EXT ,GL_TRIANGLES);//对应 layout(triangles) p->setParameter(GL_GEOMETRY_OUTPUT_TYPE_EXT ,GL_TRIANGLE_STRIP);//对应 layout(triangle_strip 来源: https:/

shader-3

孤街浪徒 提交于 2020-03-17 12:15:21
shader语义:语义实际就是一个赋予shader输入输出的字符串;语义可以让shader知道从哪里读取数据,并把数据输出到哪里。但是并不一定需要特殊的意义。 系统数值语义:SV代表的含义就是系统数值。在渲染流水线中具有特殊的寓意。SV_POSITION(大多数平台与POSITION等义,索尼除外)语义修饰顶点着色器的输出变量pos。 锯齿参数调整。 经量使用较低精度,可以优化shader性能。 Shader Model等级决定了shader中各个特性的能力,体现在shader能够使用的运算符指令数目、寄存器个数等各个方面。 避免使用分支和循环语句,大大降低性能,将一些计算向cpu中进行预运算。 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/2" { SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag //引用cginc文件 #include "UnityCG.cginc" struct v2f { float4 pos : SV_POSITION;//描述着色器输出的顶点位置 fixed4 color : COLOR0; }; /

Unity Shader (1)

a 夏天 提交于 2020-03-16 18:32:34
1、OpenGL的窗口坐标原点位于左下角,DirectX的窗口坐标原点位于左上角。 2、常见的着色器语言HLSL(High Level Shading Language)是微软在DirectX基础上提供的,着色器的编译器完全由微软提供,因此只要微软系统支持的硬件,使用相同的编译器编译出来的结果是一样的;GLSL(OpenGL Shading Language)是OpenGL提供的,它的编译器不由Khronos小组提供而是由各个实现OpenGL API的硬件厂商提供,因此不同机器编译后得到的结构可能不同;CG(C for Graphic)是NVIDIA提供的,意义上来说它是跨平台硬件无关的,但是因为微软硬件市场的占有率,它收到了HLSL的影响。 3、Unity可以使用 "CG/HLSL"或者"GLSL" 编写着色器,当然会有一些语法糖等内容的修改,因为较为繁琐但是这种方法较为少用,为此Unity提供了一种更为简便的使用方法。 4、Unity使用Shader的一般流程 1)创建一个材质(Material) 2)创建目标Shader 3)将Shader挂载到Material上 4)将Material挂载到目标渲染对象,并在Shader属性面板上调节效果知道满意为止 5、Unity 提供了几种shader的模板供使用者选择,通过Assets->Create->Shader可以看到这些模板

Esfog_UnityShader教程_前言

[亡魂溺海] 提交于 2020-03-12 03:25:39
   很多人在学习Unity的时候对Shader都是一知半解,作为刚入职半年的新人接触Shader的时间也并不长,正因为是新人才能体会到学习Shader时候所遇到的困难和迷茫,无奈于资料不好找,网上难得的几篇教程讲的又不够完善或者太浅太短,所以我一直以来就想写一系列UnityShader的学习教程,现在终于快过年公司放假了, 抽空准备开始着手写这个系列的教程了,在Unity这个圈子里我还是一只很菜很菜的菜鸟,感谢这半年来一路上帮助过我的人,书,以及在网上无私奉献宝贵知识的前辈们,仅以此系列向他们致敬.   这个系列的教程会不定期的更新,由于笔者工作繁忙,有时可能会一段时间不更新,还望各位谅解,本人才疏学浅,可能在大神们面前班门弄斧了,写这系列教程一来是想帮助那些准备接触Shader却不知如何入门的同学们分享自己的经验,二来是借由自己写教程来锻炼自己写技术文章的文笔和巩固自己学习的知识,查缺补漏,只有你能把你学到的知识透彻的讲给别人听的时候,你才完全掌握了它.由于我接触Unity时间并不长,接触Shader时间更短,难免会有所纰漏和错误,还望各位看官不吝赐教,批评指正. 前言    前言部分主要是讲述一下个人对学习UnityShader的一些建议,以及描述一下图形渲染的大概模型和UnityShader的工作方式.   首先要说明一点