【问题标题】:rotation using plane normal使用平面法线旋转
【发布时间】:2013-10-11 08:05:58
【问题描述】:

我在原点有一架飞机。

glBegin(GL_POLYGON);
glVertex3f(-10.0, -10.0,0.0);
glVertex3f(10.0, -10.0, 0.0);
glVertex3f(10.0, 10.0,  0.0);
glVertex3f(-10.0, 10.0, 0.0);
glEnd();

比我试图旋转这个平面以获得新的正常 1 0 0。

我知道要计算两条法线之间的角度,我需要找到旧法线。我怎样才能找到旧的常态?当我找到旧法线时,是否必须输入新法线才能旋转,例如glRotatef(angle,1,0,0)

【问题讨论】:

  • 你不需要“找到旧法线”,因为1没有任何“旧法线”,2你需要根据顶点计算法线。
  • 你的意思是喜欢使用 3 个点并找到诸如 PQ 和 PR 之类的向量,而不是对这两个向量进行交叉乘积?当我这样做时,我得到 0,因为我的飞机上没有深度
  • 没有看到你没有很好地使用z/depth,如果你没有使用depth那么法线总是(X,Y,Z) = (0, 0, 1)
  • 您从什么资源中学习 OpenGL?您显示的代码正在使用非常旧的已弃用功能。对于新代码,永远不要使用glBegin/glEnd 和朋友。您应该改用现代 (3.3+) 功能,例如顶点缓冲区对象。网上有几个很好的免费教程可用于使用现代 OpenGL。 OpenGL 的设计(不包括旧的不推荐使用的功能)除了控制和将数据传递到 GPU 之外的任何功能。您不能使用它来执行 CPU 向量和矩阵数学。如果您想这样做,请使用数学库,然后将结果传递给 OpenGL。
  • 好的。感谢您的回答。另一个问题是当我尝试旋转它时。我知道我需要使用 glrotatef 但我应该在里面放什么。 GLrotatef(角度, 新法线 x, 新法线 y, 新法线 z)?

标签: c++ opengl physics


【解决方案1】:

您的所有顶点都位于 XY 平面内,因此您的法线仅位于 Z 方向 (0,0,1) 或 (0,0,-1)。如果要旋转多边形以使其法线指向 X 方向,则需要将其围绕 Y 轴旋转 90 度,glRotatef(90.0f,0,1,0) 或 glRotatef(-90.0f,0,1, 0).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2017-01-14
    • 2022-01-12
    相关资源
    最近更新 更多