java - lwjgl 连接或联合形状以使透明度看起来正确

标签 java lwjgl

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

最佳答案

如果您希望多个形状成为一个对象,您只需计算或将正确的 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 和着色器。

关于java - lwjgl 连接或联合形状以使透明度看起来正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141194/

相关文章:

java - 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

java - 将 IFile 转换为文件

Java LinkedHashMap 替换键

GradientPaint/GradientPaint 的 Java 替代品速度很慢

java - 如何使用 LWJGL 将 BufferedImage 绘制到屏幕上?

java - Java getResourceAsStream 出现问题,对包的工作方式感到困惑

java - GAE 处理简单的 http post 请求 (java)

java - GLFW (LWJGL) 输入 - 按住 CTRL 会阻止 CharCallback

java - 使用 LWJGL 在 glDrawElements 中偏移

Java LWJGL OGG 背景音乐