在3d对象周围绘制2d框轮廓

时间:2015-10-25 10:28:40

标签: opengl

我想用OpenGL在3d对象周围绘制一个2d框(可能包含最小的对象)。

图片:http://imgur.com/h1Vyy4b

我拥有的是:

相机X / Y / Z /偏航/俯仰,物体X / Y / Z /宽度/高度/深度

我可以在2d表面和3d表面上绘制。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我去了here并找到了一个从3D点中获取屏幕坐标的功能:

function point2D get2dPoint(Point3D point3D, Matrix viewMatrix,
             Matrix projectionMatrix, int width, int height) {

  Matrix4 viewProjectionMatrix = projectionMatrix * viewMatrix;
  //transform world to clipping coordinates
  point3D = viewProjectionMatrix.multiply(point3D);
  int winX = (int) Math.round((( point3D.getX() + 1 ) / 2.0) *
                               width );
  //we calculate -point3D.getY() because the screen Y axis is
  //oriented top->down 
  int winY = (int) Math.round((( 1 - point3D.getY() ) / 2.0) *
                               height );
  return new Point2D(winX, winY);
}

如果你不确定如何获得矩阵:

glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix);
glGetDoublev (GL_PROJECTION_MATRIX,pjmatrix);

获得2D坐标后,你会这样:(伪代码)

int minX, maxX, minY, maxY;
for each 2dpoint p:
   if (p.x<minX) minX=p.x;
   if (p.x>maxX) maxX=p.x;
   if (p.y<minY) minY=p.y;
   if (p.y>maxY) maxY=p.y;

然后你用

画一个方框
P1=(minX,minY)
P2=(maxX,minY)
P3=(maxX,maxY)
P4=(minX,maxY)