OpenGl GluLookAt。无法定位对象

时间:2014-06-28 00:16:47

标签: opengl glulookat

我在不同的坐标系中有2个物体:行星和圆柱体。我有两个物体的眼睛坐标。我想沿着连接它和行星的矢量定位圆柱体。

orient cylinder along red vector

  glLoadMatrixf( PlanetTransform);
  // .. draw planet
  glLoadMatrixf( CylinderTransform);
  glColor3f(0, 1, 0);
  DrawCylinder();

  // draw vector that connects cylinder and planet
  glColor3f(1, 0, 0);
  glLoadIdentity();
  glBegin(GL_LINES);
     // planet eye pos e.g. (0.045; -0.049; -0.186)
     glVertex3f(point1.x, point1.y, point1.z);
     // cylinder eye pos e.g. (-0.109; -0.064; -0.203)
     glVertex3f(point2.x, point2.y, point2.z);
  glEnd();

  // orient cylinder along red vector
  // TVector normal(0, 0, 1);
  glLoadIdentity();
  gluLookAt(point2.x, point2.y, point2.z,
     point1.x, point1.y, point1.z,
     normal.x, normal.y, normal.z);

  DrawCylinder();

绘制柱面代码:

  void DrawCylinder()
  {
  glPushMatrix();
  glRotatef(90, 1, 0, 0);
  gluCylinder(gp_quadratic, 0.01, 0, 0.03, 15, 15);
  glPopMatrix();
  }

我还尝试将normal指定为:

  TVector normal;
  TVector::cross(point2 - point1, TVector(0, 0, 1), normal);

所以最后我希望看到2个圆柱--1个绿色,1个红色。红色应沿红色部分定向。但我看不到红色的。你能帮我找一下这里有什么问题吗?红色圆柱没有出现在绿色圆柱坐标系的中心..

1 个答案:

答案 0 :(得分:0)

gluCylinder(/ ** /)

  1. 沿着局部z轴构建,因此沿着红线向外指向
  2. 局部y轴是全局z_axis(指向观察者),投影到行星的观察平面上
  3. 因此局部x轴沿着行星的视平面大致向上倾斜
  4. 因此在glRotatef(90,1,0,0)之后;圆柱体远离用户指向图片的深度并隐藏在行星背后
  5. 因此如果改为glRotatef(180,1,0,0);如果使用,一切都应该没问题。
  6. 我在我身后相当一个夜班,所以我的视力可能有缺陷,但尝试它的成本很低,不是。

    如果我错了,请尝试为行星使用glPolygonMode(GL_FRONT_AND_BACK,GL_LINE),然后查看圆柱体的位置。