我注意到 OpenGL 中有一个与顶点索引相关的有趣功能,但到目前为止我不明白为什么会发生这种情况。
那么重点是什么:
可见面的顶点遍历顺序是顺时针的。有4个顶点(一个普通的矩形),它们的设置大致如下:

在数组中它们是这样的:
vertices[DefaultGeometryType::PLANE] = {
{ { (size / 2), (size / 2), 0.0f },{ 1.0f,0.0f,0.0f },{ 1.0f,1.0f } },
{ { (size / 2), -(size / 2), 0.0f },{ 0.0f,1.0f,0.0f },{ 1.0f,0.0f } },
{ { -(size / 2), -(size / 2), 0.0f },{ 0.0f,0.0f,1.0f },{ 0.0f,0.0f } },
{ { -(size / 2), (size / 2), 0.0f },{ 1.0f,1.0f,0.0f },{ 0.0f,1.0f } },
};
然后我有一个该正方形的索引数组。它看起来像这样:
indices[DefaultGeometryType::PLANE] = {
0,1,2,0,2,3
};
因此,事实证明,正方形被分成两个三角形,它们的共同顶点为 0 和 2(对角线 0-2 将是这两个三角形的共同边)。结果,我得到了这张照片:
一切似乎都井然有序。然后我决定稍微改变索引,这样两个三角形的共同边就不是 0-2 而是 3-1 的对角线。我改变了这样的索引:
3,0,1,1,2,3
最后,广场开始变成这样:
同意,情况完全不同。颜色的插值似乎不太正确。我为索引顺序尝试了不同的选项,但事实证明,当矩形被对角线分割时 0-2 - 一切都很好,但是当 3-1 - 这样一个奇怪的画面。但为什么?也许这是某种不正确的顶点索引?是否有任何正确索引的规则?还是我错过了什么,这实际上是应该的?


图片是正确的。只是您可能希望最终得到一个渐变到渐变的渐变,但实际上有两个单独的渐变。注意不属于这个三角形的一个顶点的颜色是不用来计算这个三角形的像素的颜色的。要构建“正确”的梯度,首先必须计算顶点 0 - 1 和 2 - 3 之间每个像素的梯度,然后绘制一个像素高的矩形网格。例如,在更高级的形式中,这是在 Direct2d 中实现的: