在opengl中绘制一个3d平面给出两个向量

时间:2013-07-01 18:57:45

标签: java opengl lwjgl

好的,所以我试图通过绘制6个面来绘制立方体。

我通过给它两个向量来定义立方体本身的每个面。如下:

enter image description here

然而,现在我遇到了如何在openGL中绘制这些面的麻烦(只是一个小注释,我正在使用LWJGL,这是在openGL上构建的java库)。

我试图画出这些面孔,但我相信我有一个轻微的错误,我似乎无法做对。目前,我试图按如下方式绘制面孔:

public void render() {
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex3f(v2.x, v1.y, v1.z);
    GL11.glVertex3f(v1.x, v1.y, v1.z);
    GL11.glVertex3f(v1.x, v2.y, v2.z);
    GL11.glVertex3f(v2.x, v2.y, v2.z);
    GL11.glEnd();
}

但似乎在这里,只有顶面和底面被正确绘制,而侧面(左/右)面甚至都不可见。

我该如何正确地绘制这些?

1 个答案:

答案 0 :(得分:2)

2个矢量定义了平行面的无穷大。您需要额外的一个点X来选择其中一个,除非您X = (0,0,0),这就是为什么它没有显示在您的代码中。

如果V1V2定义从参考点X开始的脸部两侧的长度和方向,则可以绘制四边形

GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex3f(X.x, X.y, X.z);
GL11.glVertex3f(X.x+v1.x, X.y+v1.y, X.z+v1.z);
GL11.glVertex3f(X.x+v1.x+v2.x, X.y+v1.y+v2.y, X.z+v1.z+v2.z);
GL11.glVertex3f(X.x+v2.x, X.y+v2.y, X.z+v2.z);
GL11.glEnd();