【问题标题】:Drawing a 3d plane in opengl given two vectors在给定两个向量的opengl中绘制一个3d平面
【发布时间】:2013-07-01 18:57:44
【问题描述】:

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

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

但是,现在我在如何在 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();
}

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

如何正确绘制这些?

【问题讨论】:

  • 如果你能澄清一些关于你的代码的事情会有所帮助。由于立方体的每个面都需要 4 个顶点来制作该面的四边形,我假设您的渲染函数只绘制立方体的一个面,对吗?您对 Vector 的定义也有点令人困惑。传统上,您会认为向量具有 X、Y、Z 位置以及 X、Y 和 Z 方向的幅度。您的向量中似乎只有 3 个字段,这些字段应该是您的向量的大小或位置吗?
  • 澄清一下——是的,每一张脸都是使用我指定的渲染方法绘制的。这里的每个向量都是一个简单的 Vector3f 对象,它有一个 X、Y 和 Z 位置。
  • 我相信 Vector3f 类的 X、Y 和 Z 分量并不打算用作向量的大小,而不是向量的起始位置。如果您将它们纯粹用作存储类而不利用类中的其他功能,那么这可能没什么大不了的。您需要考虑两个向量的起始点(参见下面的 a.lasram 帖子)。

标签: java opengl lwjgl


【解决方案1】:

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

【讨论】:

  • 这确实解决了问题,我对数学中定义的向量和opengl中的vector3f感到困惑。添加原点解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多