Cg入门21:Fragment shader - 2D纹理采样

体纹理:是啥?

tex2D 以前只能在Fragment程序中纹理采样

UV坐标系:其实点为左下角,范围为【0,1】,U为x轴,V为y轴

Texture.wrapMode 循环模式:

TextureWrapMode.Clamp:设置纹理充满拉伸使用

TextureWrapMode.Repeat:纹理重复平铺使用

如果采用Repeat,那么等于U>=1的情况就会用纹理图在右边在平铺一张图

Texture.filterMode 过滤模式:

Point:像素过滤(不进行过滤 )

Bilinear:双线性

Trilinear:三线的

UV纹理采样:

UV 纹理

贴图后效果:立体空间的UV坐标为左上角,U为水平向右方向,V为垂直向下方向 ,默认范围[0,1]

源代码:

Shader "Sbin/TexShader"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_U("U",range(-0001,0.001)) = 0
		_V("V",range(0,1)) = 0
	}
	SubShader
	{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			sampler2D _MainTex;
			float _U;
			float _V;

			struct v2f{
				float4 pos:POSITION;
				float2 uv:TEXCOORD0;
			};

			v2f vert (appdata_base v)
			{
				v2f o;
				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
				o.uv = v.texcoord.xy;
				return o;
			}

			fixed4 frag (v2f v) : COLOR
			{
				fixed4 col = tex2D(_MainTex, v.uv);//第一个参数:纹理,第二个参数UV向量
				return col;
			}
			ENDCG
		}
	}
}

纹理平铺缩放和偏移:

Tiling :缩放模型UV纹理采样坐标;比如:Tiling x=2,表示把模型UV坐标的U扩大2倍,U范围值变成2,纹理如果WrapMode选择Repeat,那么U轴方向就会纹理采样两次。V轴同理

Offset:偏移模型UV纹理采样坐标;比如:Offset x = 0.1,表示把模型UV坐标往左编译,然后再采样UV纹理贴图。

以上两种操作导致如下效果:

时间: 03-23

Cg入门21:Fragment shader - 2D纹理采样的相关文章

【Unity Shaders】Vertex & Fragment Shader入门

写在前面 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface Shader中实现描边效果的弊端,也就是只对表面平缓的模型有效.这是因为我们是依赖法线和视角的点乘结果来进行描边判断的,因此,对于那些平整的表面,它们的法线通常是一个常量或者会发生突变(例如立方体的每个面),这样就会导致最后的效果并非如我们所愿.如下图所示: 因此,我们有一个更好的方法来实现描边效果,也就是通过两个pass进行渲染--首先渲染对象的背面,用黑色略微向外扩展一点,就是我们的描边效果:然后正常渲染正

火云开发课堂 - 《Shader从入门到精通》系列 第五节:在Shader中将纹理色与颜色值混合

<Shader从入门到精通>系列在线课程 第五节:在Shader中将纹理色与颜色值混合 视频地址:http://edu.csdn.net/course/detail/1441/22669?auto_start=1 交流论坛:http://www.firestonegames.com/bbs/forum.php 工程下载地址:请成为正式学员获取工程 课程截图:   版权声明:本文为博主原创文章,未经博主允许不得转载.

UnityShader之顶点片段着色器Vertex and Fragment Shader【Shader资料】

顶点片段着色器 V&F Shader:英文全称Vertex and Fragment Shader,最强大的Shader类型,也是我们在使用ShaderLab中的重点部分,属于可编程管线,使用的是CG/HLSL语法.分为vertex顶点部分和Fragment像素部分. 本篇的末尾讲述顶点函数传入的结构体类型的参数appdata_base. Shader "Custom/Exam1" { Properties { _MainTex ("Texture", 2D

Unity cg vertex and fragment shaders(一)

cg片段 Cg程序片段写CGPROGRAM和ENDCG之间 开始时的片段可以作为#pragma语句编译指令 Pass { // ... the usual pass state setup ... CGPROGRAM // compilation directives for this snippet, e.g.: #pragma vertex vert #pragma fragment frag // the Cg/HLSL code itself ENDCG // ... the rest

Unity3D教程宝典之Shader篇:第三讲Vertex&amp;Fragment Shader

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Vertex and Fragment Shader:最强大的Shader类型,也是本系列的重点,下文中简称V&F Shader,属于可编程渲染管线. 使用的是CG/HLSL语法.分为2个部分vertex顶点部分和Fragment像素部分.下面依然通过写几个简单的Shader来学习. 例一:显示一张贴图 新建Unity工程,新建一个Cube立方体,新建一个名为Exam1的Shader(Project视图->Create->Sh

DirectX11--深入理解与使用2D纹理资源

前言 写教程到现在,我发现有关纹理资源的一些解说和应用都写的太过分散,导致连我自己找起来都不方便.现在决定把这部分的内容整合起来,尽可能做到一篇搞定所有2D纹理相关的内容,其中包括: 2D纹理的一般创建方法 DDSTextureLoader和WICTextureLoader 2D纹理数组的一般创建方法 2D纹理立方体的一般创建方法(未完工) 纹理子资源 纹理资源的完整复制(未完工) 纹理子资源指定区域的复制(未完工) 纹理从GPU映射回CPU进行修改 使用内存初始化纹理 你必须要先了解纹理映射,

3D Computer Grapihcs Using OpenGL - 07 Passing Data from Vertex to Fragment Shader

上节的最后我们实现了两个绿色的三角形,而绿色是直接在Fragment Shader中指定的. 这节我们将为这两个三角形进行更加自由的着色--五个顶点各自使用不同的颜色. 要实现这个目的,我们分两步进行,首先 在顶点数组里增加数据用来表示颜色 修改sendDataToOpenGL()函数中的verts数组: 1 GLfloat verts[] = 2 { 3 +0.0f, +0.0f, //Vertex 0 4 +1.0, +0.0, +0.0f, //Color 0 5 +1.0f, +1.0f

Unity牛逼的2D纹理功能

[Unity牛逼的2D纹理功能] 1.可直接将贴图生成成为Cubemap. 2.自动生成Mipmap. 3.查看纹理被当前场景哪些对象引用.在Project窗口中,右击图像,选择 参考:file:///C:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/html/en/Manual/class-TextureImporter.html

Opengl 2D纹理实现

步骤如下: 1. 首先启用2D纹理, 不启用会发现纹理区域是黑色的 glEnable(GL_TEXTURE_2D) 2. 生成纹理 glGenTextures( 1, &m_nTextureID ) glBindTexture(1, &m_nTextureID) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_nWidth, m_nHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pData); m_pData 像素数据 还