【发布时间】: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)?