我已经尝试解决这个问题有一段时间了。有没有一种方法可以将渲染的多个形状变成一个对象?那么您可以按照您想要的任何方式操纵该对象吗?目前,如果我尝试使用 glcolor 方法,它不会改变任何内容,因为我已经有多种颜色可以改变对象。也许我没有意识到一些明显的事情,或者只是我在任何教程中找不到的东西。但简单地说,我正在寻找一种方法来更改多个形状绘制在一起的 alpha 值以形成更复杂的形状,但保留已经预定义的颜色。
最佳答案
如果您希望多个形状成为一个对象,您只需计算或将正确的 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 和着色器。
关于java - lwjgl 连接或联合形状以使透明度看起来正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141194/