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