lwjgl附加或联合形状,使透明度看起来正确

时间:2013-08-09 06:31:34

标签: java lwjgl

我一直试图解决这个问题。有没有办法让你渲染多个形状成为一个单一的对象?所以你可以用你想要的任何方式操纵对象?目前,如果我尝试使用glcolor方法,它不会改变任何东西,因为我已经有多种颜色改变了对象。也许我没有意识到一些明显的东西,或者它只是我在任何教程中找不到的东西。但简单地说,我正在寻找一种方法来改变多个形状的alpha值,一起绘制一个更复杂的形状,但保留已经预定义的颜色。

1 个答案:

答案 0 :(得分:1)

如果您希望多个形状成为单个对象,您只需在每个顶点中计算或写入正确的X,Y,Z数字,这样它们就能组合在一起。

例如,您可以将2个三角形变成正方形,就像这样。

enter image description here

要做同样的事情,但在代码中它看起来像这样。

glBegin(GL_TRIANGLES);

glVertex3f(0f, 0f, 0f);
glVertex3f(0f, 100f, 0f);
glVertex3f(100f, 0f, 0f);

glVertex3f(100f, 100f, 0f);
glVertex3f(100f, 0f, 0f);
glVertex3f(0f, 100f, 0f);

glEnd();

你当然可以使用GL_QUADS,虽然三角形通常在很多方面都更好。如果你想为1号颜色着色,你需要并且之前只能写一种颜色。

因此,例如,这将起作用,并给出一个完整的红色方块/四边形。

glColor3f(1f, 0f, 0f);

glBegin(GL_TRIANGLES);

glVertex3f(0f, 0f, 0f);
glVertex3f(0f, 100f, 0f);
glVertex3f(100f, 0f, 0f);

glVertex3f(100f, 100f, 0f);
glVertex3f(100f, 0f, 0f);
glVertex3f(0f, 100f, 0f);

glEnd();

虽然如果你在其间添加更多glColor,最终会产生另一个结果。

如果您想使用透明度/不透明度/ alpha,则需要使用glColor4f,其中最后一个数字是透明度。但在您能够使用透明度之前,您需要在OpenGL中启用混合模式。你这样做是通过电话来实现的。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我对你的问题并不是100%肯定,所以如果我忘了回答某些问题,只需写下评论然后告诉我。

信息

如果您没有静态导入类,请记住glEnable(GL_BLEND);实际上是GL11.glEnable(GL11.GL_BLEND);,其余代码也是如此。

另请注意,glVertexglNormalglColor等是不推荐使用的方法,不应该因此而使用,而且渲染巨大时它们也非常慢顶点数量,虽然它们非常适合学习OpenGL,但只能用于学习。新的更好的选择是使用VBO和着色器。