2013-07-01 85 views
1

好吧,所以我试图通过绘制6个面绘制一个立方体。在opengl中绘制一个3d平面给出两个向量

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

enter image description here

不过,现在我有一个如何绘制在OpenGL中这些面孔(只是一个小纸条,我使用LWJGL,这是Java库建立在OpenGL模式)的麻烦。

我试图画出这些面孔,但我相信我有一个轻微的错误,我似乎无法得到正确的结果。目前,我已经尝试如下绘制的面孔:

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(); 
} 

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

如何正确绘制这些图像?

+0

这将有助于如果你能澄清一些事情你码。由于立方体的每个面都需要4个顶点来制作该面的四边形,我假设您的渲染功能仅绘制了立方体的一个面,是正确的? Vector的定义也有点混乱。传统上,您会将矢量想象为具有X,Y,Z位置以及X,Y和Z方向的大小。你的向量似乎只有3个字段,这些应该是你的向量的大小或位置? – aoi222

+0

澄清 - 是的,每个人脸都使用我指定的渲染方法绘制。这里的每个向量都是一个简单的Vector3f对象,它有一个X,Y和Z位置。 – Zilarion

+0

我相信Vector3f类的X,Y和Z分量并不是用作矢量的大小,而不是矢量的起始位置。如果你纯粹将它们用作存储类而不利用课堂上的其他功能,那么这可能不是什么大问题。你需要考虑到你的两个向量开始的点(下面的a.lasram的帖子)。 – aoi222

回答

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(); 
+0

这确实解决了这个问题,我把它和数学中定义的vector以及opengl中的vector3f混淆了。添加一个原点解决了我的问题。谢谢! – Zilarion