Opengl 画棋盘时,指定不同方块颜色的最佳方法是什么?

Opengl 画棋盘时,指定不同方块颜色的最佳方法是什么?,opengl,Opengl,画棋盘时,指定不同方块颜色的最佳方法是什么? 假设我想要一块2乘2的板,颜色如下: *-----*-----* |black|white| *-----*-----* |white|black| *-----*-----* 我现在可以有9个顶点,并用GL_四边形原语绘制电路板。据我所知,用某种颜色填充正方形意味着用这种颜色指定每个顶点的颜色。 但是用不同的颜色填充每个正方形意味着复制5个顶点 *-----**----* |black|white| **-----**----** |whi

画棋盘时,指定不同方块颜色的最佳方法是什么? 假设我想要一块2乘2的板,颜色如下:

*-----*-----*
|black|white|
*-----*-----*
|white|black|
*-----*-----*
我现在可以有9个顶点,并用GL_四边形原语绘制电路板。据我所知,用某种颜色填充正方形意味着用这种颜色指定每个顶点的颜色。 但是用不同的颜色填充每个正方形意味着复制5个顶点

 *-----**----*
 |black|white|
**-----**----**
 |white|black|
 *-----**----*

这是最简单的方法吗?在OpenGL中是否允许顶点具有相同的坐标和不同的颜色?

如果您真的想为每个字段绘制一个四边形,复制顶点是一种方法。具有相同坐标的不同顶点没有问题。德国劳埃德船级社的光栅化规则将确保a)在这些共享边上没有间隙,b)也没有透支,因此您不会有问题

但是,也可以将整个场绘制为一个四边形并使用纹理。您所需要的只是一个2x2大小的黑白纹理,可以使用
GL_NEAREST
过滤模式,从而获得一个漂亮而清晰的棋盘图案。 使用这种方法,您还可以动态更改字段的数量,而无需更改任何纹理,只需使用
GL_REPEAT
模式并仅更改texcoords即可


在基于着色器的现代GL中,您还可以直接在片段着色器中按程序生成棋盘格图案。

如果您真的想为每个字段绘制四元组,复制顶点是一种方法。具有相同坐标的不同顶点没有问题。德国劳埃德船级社的光栅化规则将确保a)在这些共享边上没有间隙,b)也没有透支,因此您不会有问题

但是,也可以将整个场绘制为一个四边形并使用纹理。您所需要的只是一个2x2大小的黑白纹理,可以使用
GL_NEAREST
过滤模式,从而获得一个漂亮而清晰的棋盘图案。 使用这种方法,您还可以动态更改字段的数量,而无需更改任何纹理,只需使用
GL_REPEAT
模式并仅更改texcoords即可


在基于着色器的现代GL中,您还可以直接在片段着色器中按程序生成棋盘格图案。

您使用的是哪个版本的OpenGL?在任何情况下,您最好使用纹理…是否(想要)使用着色器?你在使用即时模式吗?这完全取决于你认为什么是简单的,但我认为复制确实是最简单的,因为它是最容易实现的。部分回答您的问题:OpenGL不关心两个顶点是否位于同一点上,但您只能为一个顶点指定一个glColor。这意味着具有相同位置但不同颜色的两个顶点可以实现您所描述的效果。我使用的是OpenGL 4.3。我已经考虑过使用纹理,但觉得问题太简单了。感谢您的建议。我使用的是着色器,而不是立即模式。是的,我说的简单是指易于实现。谢谢。您使用的是哪个版本的OpenGL?在任何情况下,您最好使用纹理…是否(想要)使用着色器?你在使用即时模式吗?这完全取决于你认为什么是简单的,但我认为复制确实是最简单的,因为它是最容易实现的。部分回答您的问题:OpenGL不关心两个顶点是否位于同一点上,但您只能为一个顶点指定一个glColor。这意味着具有相同位置但不同颜色的两个顶点可以实现您所描述的效果。我使用的是OpenGL 4.3。我已经考虑过使用纹理,但觉得问题太简单了。感谢您的建议。我使用的是着色器,而不是立即模式。是的,我说的简单是指易于实现。非常感谢。