亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么分兩次計算,目的是什么?

為什么分兩次計算,目的是什么?

慕娘9325324 2022-08-05 10:06:56
unity shader 中 mul(_Object2World,v.vertex).xyz 等于 UnityObjectToClipPos(v.vertex);嗎?
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

完全不是一個東西。
float3 worldPos = mul(_Object2World, v.vertex).xyz;
這是把頂點從模型空間(物體的本地坐標空間)轉化到世界空間中,并取xyz分量;其中,_Object2World是轉化矩陣。
UnityObjectToClipPos(v.vertex);
這個是把頂點從模型空間直接轉化到裁剪空間,也就是進行了M-V-P三次轉化,這個函數是unity重新封裝過一次,其實它最初是mul(UNITY_MATRIX_MVP,v.vertex);其中,UNITY_MATRIX_MVP是轉化矩陣。
既然可以直接轉化為什么還要得到世界空間中的頂點位置?
這是因為很多時候我們需要在片元著色器中進行一些特殊的運算,這些運算需要世界空間中的頂點位置,例如,光照模擬,凹凸映射等。
另外建議你先充分熟悉GPU渲染流水線再學習Shader,不然很多問題你都可能覺得莫名其妙。

查看完整回答
反對 回復 2022-08-08
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號