在绘制棋盘时指定不同方块的颜色的最佳方法是什么?假设我想要一个 2 x 2 的板,其颜色如下:
*-----*-----*
|black|white|
*-----*-----*
|white|black|
*-----*-----*
Run Code Online (Sandbox Code Playgroud)
我现在可以有 9 个顶点并使用 GL_QUADS 原语绘制板。据我了解,用某种颜色填充正方形意味着用该颜色指定每个顶点的颜色。但是用不同的颜色填充每个方块意味着复制 5 个顶点
*-----**----*
|black|white|
**-----**----**
|white|black|
*-----**----*
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法吗?OpenGL中是否真的允许具有相同坐标和不同颜色的顶点?
如果您确实想为每个字段绘制一个四边形,那么复制顶点就是正确的方法。不同顶点具有相同坐标没有问题。GL 的光栅化规则将确保 a) 在此类共享边缘处没有间隙,b) 也没有过度绘制,所以你会没事的。
但是,您也可以将整个字段绘制为一个四边形并使用纹理。您所需要的只是一个 2x2 大小的黑白纹理,并且可以使用GL_NEAREST过滤模式,从而获得漂亮而清晰的棋盘图案。通过这种方法,您还可以动态更改字段数量,而无需更改纹理,只需使用模式GL_REPEAT并仅更改纹理坐标即可。
在基于 GL 的现代着色器中,您还可以直接在片段着色器中按程序生成棋盘图案。