【发布时间】:2013-02-20 23:57:17
【问题描述】:
在 JOGL 中,我尝试使用 GL_QUADS(即整个对象的不同组件)创建一些 3D 形状,到目前为止这样做很好,但我不知道如何转换形状,必须有一种方法这样做,但我对 GL_QUADS 不是很熟悉,所以我不完全确定如何去做。编辑gl.glVertex3f 只会导致形状大小不同,这似乎是我唯一可以编辑的东西,是否可以给 GL_QUAD 一个变量名?
【问题讨论】:
在 JOGL 中,我尝试使用 GL_QUADS(即整个对象的不同组件)创建一些 3D 形状,到目前为止这样做很好,但我不知道如何转换形状,必须有一种方法这样做,但我对 GL_QUADS 不是很熟悉,所以我不完全确定如何去做。编辑gl.glVertex3f 只会导致形状大小不同,这似乎是我唯一可以编辑的东西,是否可以给 GL_QUAD 一个变量名?
【问题讨论】:
你可以使用glTranslatef函数:
// render the shape
gl.glTranslatef(5.0f, 0.0f, 0.0f); // translate along x, y, z
// render the shape - you will now have two shapes next to each other
【讨论】:
public void display(GLAutoDrawable drawable) { 和很多glBegin 吗?
glBegin...glEnd里面是没有效果的。它必须在glBegin 之前调用。在glBegin...glEnd:glprogramming.com/red/chapter02.html 中只有少数 JOGL/OpenGL 命令有效,如果这没有帮助,最好能发布您的源代码。
glBegin 之前完美运行,非常感谢!
调用gl.glTranslatef(1.0f, 0.0f, 0.0f); 将应用于堆栈中的当前矩阵,这实际上意味着您从那时起绘制的任何内容都将在 x 轴上出现 1 个单位,距离之前的矩阵所在的位置(可能是您的情况的原点) .
我明白为什么它看起来令人困惑,而不是创建形状然后移动它(不能完成,它已经被绘制),你会想要翻译然后 画出你的形状。
例如:
gl.glPushMatrix();
gl.glTranslatef(1.0f, 0.0f, 0.0f);
gl.glBegin(GL2.GL_QUADS);
// draw some vertices here
gl.glEnd();
gl.glPopMatrix();
【讨论】: