一、当要绘制的三角形有正反面之分的时候则要注意三角形的缠绕顺序是以顺时针作为缠绕还是逆时针座位缠绕。这里我一逆时针作为正面的缠绕
如果在纸上画出对应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 则是插值的方式显示