百度网站建设流程,如何创建目录wordpress,seo推广的特点有,百度网页无法访问如何解决Semantics语义词#xff1a; 定义#xff1a;GPU工作时#xff0c;数据通常暂存在寄存器#xff0c;那么在Cg中#xff0c;语义词就指定了输入/输出数据和图形硬件寄存器之间的映射关系。 原理#xff1a;根据输入语义#xff0c;图形处理器从某个寄存器取数据 定义GPU工作时数据通常暂存在寄存器那么在Cg中语义词就指定了输入/输出数据和图形硬件寄存器之间的映射关系。 原理根据输入语义图形处理器从某个寄存器取数据然后再将处理好的数据根据输出语义放到指定的寄存器。 VS中绑定语义的输出数据会传递到PS中绑定相同语义的输入参数。 语义只对VS和PS入口函数的输入/输出参数有意义是VS/PS输入输出和寄存器之间的桥梁。 VS输入语义词POSITION BLENDWEIGHT NORMAL TANGENT BINORMAL PSIZE BLENDINDICES TEXCOORD0-TEXCOORD7 VS输出语义POSITION PSIZE FOG COLOR0-COLOR1 TEXCOORD0-TEXCOORD7 VS的输出中必须包含POSITION语义变量该值不能在PS中直接使用它只被用于光栅化。 VS的输出中的自定义数据可以使用TEXCOORD系列的语义词来表示。 PS输入语义词除POSITION外VS的输出语义也是VP的输入语义 PS输出语义通常只有一个输出COLOR最终颜色值。 VS输入参数的定义 VS的输入参数可以是通用类型appdata_base也可以是自定义结构体并在其中指定需要的参数。 [UnityGC.cginc]VS预定义输入参数 appdata_base包含顶点的position、normal、one texture coordinate appdata_tan包含顶点的position、tangent、normal、one texture coordinate appdata_full包含顶点的position、tangent、normal、tow texture coordinate、color 自定义输入结构示例 struct vertexInput {float4 vertex : POSITION;float4 texcoord0 : TEXCOORD0;fixed4 color : COLOR;}; Unity中顶点只能包含以下这些数据所以自定义输入结构中的成员也必须在此范围内具体类型可以不一样比如fixed4 color float4 vertex/float3 normal/float4 texcoord/float4 texcoord1/float4 tangent/float4 color 注意其中没有副法向量binoraml它可以通过noraml和tangent计算得出来公式如下所示 // binormal的计算公式float3 binormal cross( v.normal, v.tangent.xyz ) * v.tangent.w; Cg访问属性定义 Cg访问Properties块中定义的变量的方式声明同名并匹配类型的变量。 Color/Vector -- float4/half4/fixed4 Range/Float -- float/half/fixed 2D -- sampler2D 3D -- sampler3D Cube -- samplerCUBE 可以看下面的例子 属性 _MyColor (Some Color, Color) (1,1,1,1) _MyVector (Some Vector, Vector) (0,0,0,0) _MyFloat (My float, Float) 0.5 _MyTexture (Texture, 2D) white {} _MyCubemap (Cubemap, CUBE) {} Cg变量 fixed4 _MyColor; // low precision type is enough for colorsfloat4 _MyVector;float _MyFloat; sampler2D _MyTexture;samplerCUBE _MyCubemap shader中的Cg片段会被Unity编辑器编译成low-level shader assembly并被包含在生成的版本的data files里面。因为Cg片段需要被预编译所以不能在运行时动态创建Cg shader。 #pragma glsl_no_auto_normalization 当给移动平台编译GLSL时不自动normalize法向量和切线向量。在IOS/Android平台noramls和tangents会在vertex shader中自动noramize。 #pragma exclude_renderers d3d11 xbox360 在DX11和Xbox360平台上不渲染 常用预定义和Cg函数 [Cg]采样2dtexture: tex2D(_MainTex, i.texcoord0); [Cg]frac函数取小数部分 [Cg]any函数输入参数只要有其中一个不为0则返回true [Cg]saturate函数如果小于0则返回0如果大于1则返回1否则返回原值 [Cg]语义词VPOS表示像素的屏幕坐标至少需要支持target 3.0。 [UnityCG.cginc]_ScreenParam表示屏幕的宽和高。 [UnityCG.cginc]ComputeScreenPos(MVP_pos)该函数返回像素的屏幕坐标不需要target 3.0的支持。 一些代码片段 // 3D坐标转换到2D Window坐标return mul(UNITY_MATRIX_MVP, v.vertex); // 计算像素的屏幕坐标 方法一vertOut vert(appdata_base v) {vertOut o;o.pos mul (UNITY_MATRIX_MVP, v.vertex);o.scrPos ComputeScreenPos(o.pos);return o;// PS中转化[0-1]float2 wcoord (i.scrPos.xy/i.scrPos.w);}// 计算像素的屏幕坐标 方法二fixed4 frag(float4 sp:VPOS) : SV_Target {float2 wcoord sp.xy/_ScreenParams.xy...}// 判断uv是否在[0-1]返回内可用来做uv检查if (any(saturate(i.uv) - i.uv))... 转载于:https://www.cnblogs.com/sifenkesi/p/4707991.html