我想用OpenGL在3d对象周围绘制一个2d框(可能包含最小的对象)。
我拥有的是:
相机X / Y / Z /偏航/俯仰,物体X / Y / Z /宽度/高度/深度
我可以在2d表面和3d表面上绘制。
我该怎么做?
答案 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)