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