1

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

4

1 回答 1

1

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

例如,你可以让 2 个三角形变成一个正方形,像这样。

在此处输入图像描述

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

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);这样,其余代码也是如此。

还要记住,glVertex, glNormal,glColor等是不推荐使用的方法,因此不应该使用,而且在渲染大量顶点时它们非常慢,尽管它们对于学习 OpenGL 非常有用,并且应该只用于学习。新的更好的替代方法是使用 VBO 和着色器。

于 2013-08-09T07:04:02.873 回答