1. 程式人生 > >4.計算機圖形學之 Shader 紋理定址(片段著色器)

4.計算機圖形學之 Shader 紋理定址(片段著色器)

第二點:片段 著色器詳細講解:

貼紋理原理:

提問:大小跟顯示區域不匹配怎麼辦?(有以下三種情況)

  1. 紋理跟顯示區域相等(紋理就是貼圖圖片,顯示區域是要放置材質球的物體,例如Cube)
    顯示區域 100 * 100 紋理大小 100 * 100
    在這裡插入圖片描述

  2. 紋理大於顯示區域
    顯示區域 100 * 100 紋理大小 1024 * 512
    在這裡插入圖片描述
    處理有兩種方法:
    (1)採用等比例對映
    上面的圖用2維角度分析如下:
    在這裡插入圖片描述
    UV(座標系)如下分析:
    在這裡插入圖片描述
    (2)Unity提供的(貼圖選單裡的 Filter Mode選項)

    • Point : 就近取樣
    • Bliinear: 就近 周圍 4個畫素的平均 (上+中+下+左+右)/5
    • Trilinear: 就近 周圍 8個畫素的平均 (左上+上+右上+右+右下+下+左下+左+中)/9
  3. 紋理小於顯示區域
    顯示區域 100 * 100 紋理大小
    在這裡插入圖片描述
    出現鋸齒、 馬賽克等問題。
    處理也可用 Unity提供的 Filter Mode選項裡的解決該問題。

Shader 1.0 紋理設定:

  1. 格式: SetTexture [TextureName] {Texture Block}

  2. combine 關鍵字:
    combine Texture * Primary : 表示兩個畫素的乘法 // (1,0,0.1) (0.5,0,0,1)
    總結規則 :兩個畫素,越乘越暗,越加越亮

  3. 配合 combine的 4種運算關鍵字 :
    Privious :表示前面一個 SetTexture 出來以後的畫素
    Primary:表示頂點計算出來的顏色
    Texture:等於 SetTexture 當前的紋理變數
    Constant:表示一個固定的顏色。(1,1,1,1)

  4. lerp()插值運算:combine src1 lerp(src2) src3
    lerp: 表示讓 src1 和 src3 進行混合,混合的方式取決於 src2 的 alpha 值。

    lerp 插值運算公式(原理):(1-t)A+tB
    t 是 src2的alpha[0,1]
    A 是 src1
    B 是 src3

設定 constantColor 兩種方式:

//1.constantColor(0,1,0,1)
SetTexture[_MainTex]    
{
	constantColor(0,1,0,1) 
    combine    Texture *Constant 
}

//2.Property 設定:
_ConsColor("Color",Color)=(1,0,0,1)

SetTexture[_MainTex]    
{
	constantColor[_ConsColor] 
	combine    Texture *Constant 
}

Shader 1.0 適應 所有的 顯示卡 。(能用1.0寫的shader 用1.0寫比較好)

Shader "Custom/SetTexture"
{
	Propertles
	{
		_MainTex("Texture",2D) = "white"()
		_BleandTex("Texture",2D) = "white"()
	}
	
	SubShader
	{
		Pass
		{
			Color(1,0,0,1)
			
			SetTexture[_MainTex]
			{
				//combine 關鍵字 (可執行 +-*/)
				combine  Texture * Primary      
				// (頂點顏色 與 當前貼圖顏色 相乘)
			}
			
			SetTexture[_BleandTex]
			{
				combine Previous * Texture   
				//(前一張 SetTexture 和 當前 SetTexture 混合)
				//這裡的 Previous 是  SetTexture[_MainTex]  
				//(前一張 SetTexture )
			}
			
			SetTexture[_BleandTex]
			{
				combine Previous lerp(Previous) Texture   
				//(前一張 SetTexture 和 當前 SetTexture 插值混合 lerp())
			}
			
			SetTexture[_BleandTex]
			{
				ConstantColor(1,0,0,1)
				combine Texture  *  Constant   
				//(當前 SetTexture 與 Constant 混合)
			}
		}
	}
}

相關推薦

4.計算機圖形 Shader 紋理片段著色

第二點:片段 著色器詳細講解: 貼紋理原理: 提問:大小跟顯示區域不匹配怎麼辦?(有以下三種情況) 紋理跟顯示區域相等(紋理就是貼圖圖片,顯示區域是要放置材質球的物體,例如Cube) 顯示區域 10

5.計算機圖形 Shader 2.0 結構與語義

Shader1.0 和 Shader2.0 的區別: 不同點: 2.0 可以實現程式設計 相同點: 渲染管線一樣 Shader 2.0 編寫詳解: Shader "Hidden/NewImageEffe

2.計算機圖形 Shader 結構

shader 語言 opengl: SGI公司研發,跨平臺。GLSL: Opengl shader language. dx(DirectX):微軟研發。非跨平臺,效能非常好。HLSL: hight

計算機圖形計算相交線段交點

老師佈置了一道題 判斷已知四點的兩個線段,先判斷是否相交  若相交求交點 題解:之前寫了一篇 51nod的一道題判斷線段交點 現在只需要求交點就好 首先一般我們都傾向於用一般式 y=k*x+b,但是這種式子需要判斷k是否存在 又要分情況  所以用 直線一般方程式a*

6.計算機圖形 Shader2.0 矩陣變換

Shader2.0 頂點著色器: 計算頂點的位置變換 計算頂點的顏色。 Unity3d 裡面的矩陣是左乘(左手座標系) 將 物體座標系 轉換到 世界座標系 P(世界) = M(物體到世界)*P(

7.計算機圖形 Shader2.0 波動

波動例項: 波動函式 :y=Asin(ωx+φ) φ:決定波形 與 X軸位置關係或橫向移動距離(左加右減) ω:決定週期(最小正週期T=2π/∣ω∣) A:決定峰值(即縱向拉伸壓縮的倍數) 頂點著色器 : 計算頂點 位置 矩陣轉換 片段著色器: 紋理定址

計算機圖形畫線(DDA、Bresenham、中點畫線) 針對各種斜率

      為什麼寫這篇文章?        博主開始也是到處參考研究了很多程式碼,發現要考慮任意斜率的話,很多程式碼都是用if語句來分別討論的,其實其中有很多重複的程式碼部分,我覺得不程式碼不簡潔,就到處查詢參考思考才總結出一些比較簡潔的程式碼,希望大家喜歡,也期待大家有

1.計算機圖形Opengl渲染流程

Cpu: FBX -Meshrender Fbx obj : 模型檔案,裡面包含了 uv 頂點位置 ,法線、切線等渲染所需要的資訊。 MeshRender : 將這些資訊傳遞到GPU 。 skin mesh render / mesh render,m

基於MFC的計算機圖形基本圖形生成_畫圓2

1.Bresenham畫圓 int r,d,x,y,x0,y0; DCPoint->SetROP2(R2_COPYPEN);//繪圖方法為直接畫 r=(int)sqrt(((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))*1.0)

基於MFC的計算機圖形基本圖形生成1

基於MFC的計算機圖形學之基本圖形生成(1) 1.DDA中點畫線 下面的程式碼是在doc.cpp中加的,在view裡面還要新增相應的選單響應函式和滑鼠移動函式 int x,x0,y0,x1,y1,flag; float m,y; DCPoint->SetROP2(R2_CO

計算機圖形畫基本圖形1

第一次實驗:理解語句 #include<GL/glut.h> #include<math.h> int i; const int n=1000; const GLfloat R=0.5f; const GLfloat Pi=3.1415926536

計算機圖形矩陣變換的深度理解

對於圖形學來說,矩陣計算不可避免,既直觀又方便。而如果線性代數學的不透徹的話,那麼基本上是做不到應用的,這裡推薦看一下3Blue1Brown的線性代數的視訊,可以對矩陣計算有深刻的認識。 之後就是應用階段,我們這個階段就是使用我們的矩陣來完成空間中點或向量的各種變換。 重

計算機圖形筆記---shader language

用shader language寫的程式叫著色程式,著色程式又分為頂點著色程式(vertex shader program)和片段著色程式(fragment shader program ) 前者負責頂點座標轉換(幾何方面的運算),後者負責畫素顏色計算;前者的輸

12.計算機圖形 Alpha 測試

Alpha測試: 符合條件的 alpha 畫素顯示出來,不符合的丟棄掉。 Shader 1.0 AlphaTest Always 0.5 Always: 表示關閉測試。總是通過。 Never

路---位運算和邏輯和短路的與或

判斷 之路 rgs system sta 但是 ava lse 次方 int a = 12; int b = a << 4; System.out.println(b); 表示乘以2的4次方 >>除法 public class JavaDemo

學習shader之前必須知道的東西計算機圖形渲染...

shader到底是幹什麼用的?shader的工作原理是什麼?         其實當我們對這個問題還很懵懂的時候,就已經開始急不可耐的要四處搜尋有關shader的資料,恨不得立刻上手寫一個出來。但看了一些資料甚至看了不少cg的語法之後,我們還是很迷茫,UNITY_MATRIX_MVP到底是個什麼矩陣?它和v

計算機圖形】圖元的區域填充多邊形的區域填充

相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 多邊形的區域填充 首先,我們瞭解一下多邊形。 多邊形可以簡單地分為凸多邊形和凹多邊形,除此之外,我們還要討論內含環的多邊形,如下圖。 多邊形的表示方法 頂點表示:用多邊形頂點的序列來刻畫多邊形。直觀、幾何

計算機圖形】圖元的區域填充矩形的區域填充

相關資料來源於網路,侵刪歉。 如果文章中存在錯誤,請下方評論告知我,謝謝! 矩形的區域填充 前提 矩形的頂點座標均為整數。 我們簡單地實現一下,思路是在矩形內逐行逐列點亮每個畫素,如圖。 typedef struct{ int xmin, xmax; int ymin,

計算機圖形4——Two-Dimensional Transformation二維幾何變換

實現二維座標變換矩陣(平移,旋轉,縮放)的生成 環境:Code::Blocks 17.12 完整程式碼如下: // ====== Computer Graphics Experiment #5 ====== // | Two-Dimensional Transformatio

計算機圖形常用演算法實現4 多邊形掃描轉換演算法-邊界標誌演算法

程式碼是在winform中執行的。 看書上這個演算法寫起來輕描淡寫的,實際上實現起來還是有很多難點的,難點如下: 1.無法判斷經過某個點的時候是不是應該變號。 2.掃描演算法畫直線的時候,可能同一行有多個點相鄰的情況,如果遇到這樣的點就變號結果會出現錯誤。 3.兩條相鄰邊的路徑可能經過同一個