一、當要繪制的三角形有正反面之分的時候則要注意三角形的纏繞順序是以順時針作為纏繞還是逆時針座位纏繞。這裡我一逆時針作為正面的纏繞
如果在紙上畫出對應index的各個點的順序就可以看出來
vertexbuffer的纏繞順序固定了,則在渲染的時候需要設定以逆時針作為纏繞順序,并将背面切割掉隻留正面
二、由于使用了index的方式進行繪制,則在每一幀畫三角形的時候需要指出使用的是index的方式繪制
但是由于metal shader需要的是vertexbuffer的資料,則在設定metal 的vertexbuffer時候設定的依舊是vertexbuffer
隻是由index指出這次要由哪幾個vertexbuffer資料來繪制。
三、由于要繪制三維的圖像,則需要确認各個頂點的位置,各個頂點的位置則需要通過左邊的變換得到。如果給的是本地坐标則需要:局部坐标-》世界坐标-〉視圖空間-》裁剪空間-〉螢幕顯示
這裡預設的已經給了世界坐标,則需要再進行視圖坐标和裁剪坐标的轉換。裁剪空間-〉螢幕顯示 的轉換則無需關心,該操作會在vertexshader内部自動轉換
公式是:positon = projection * view * model * local;
具體為啥是該公式可以看:https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/
由于我們給的vertexbuffer是世界坐标,則提供對應的視圖模型和裁剪模型即可
四、每次繪制的函數調用
五、metal 的shader
如上可以看出求出clipSpacePosition 使用的是矩陣的乘法 , 通過視圖模型和裁剪模型的轉換,最終轉換成clipSpacePosition 的頂點位置
pixelColor 則是插值的方式顯示