void CBoxProxyView::drawContact(Contact& con) { glColor3f(0.0,1,1); drawBoxLines(con.A); drawBoxLines(con.B); glColor3f(0.0,1,0); if (con.conType==1) glColor3f(1,1,0); glPointSize(10); glBegin(GL_POINTS); for (int i=0;i<con.pointNum;i++) { glVertex3f(con.points[i][0],con.points[i][1],con.points[i][2]); } glEnd(); glPointSize(1); glLineWidth(5); glBegin(GL_LINES); for (int i=0;i<con.pointNum;i++) { double scale=0.1; glVertex3f(con.points[i][0],con.points[i][1],con.points[i][2]); glVertex3f(con.points[i][0]+con.nDir[0]*scale,con.points[i][1]+con.nDir[1]*scale,con.points[i][2]+con.nDir[2]*scale); //glVertex3f(con.points[i][0],con.points[i][1],con.points[i][2]); //glVertex3f(con.points[i][0]+con.fDirU[0]*scale,con.points[i][1]+con.fDirU[1]*scale,con.points[i][2]+con.fDirU[2]*scale); //glVertex3f(con.points[i][0],con.points[i][1],con.points[i][2]); //glVertex3f(con.points[i][0]+con.fDirV[0]*scale,con.points[i][1]+con.fDirV[1]*scale,con.points[i][2]+con.fDirV[2]*scale); } glEnd(); glLineWidth(1); }
void CBoxProxyView::drawTest() { glColor3f(1.0,0,0); //drawBoxLines(*testBoxA); if (GraphCreated&&!GraphFinished) { for (int i=0;i<conGraph->getNodeNum();i++) { Box b(conGraph->getNode(i)); drawBoxLines(b); } for (int i=0;i<conGraph->getNodeNum()-1;i++) { for (int j=i+1;j<conGraph->getNodeNum();j++) { Contact con=conGraph->getActiveEdge(i,j); if (!con.NoExtension) drawContact(con); } } } if (GraphFinished) { for (int i=0;i<conGraph->getNodeNum();i++) { Box b(conGraph->getBestBox(i)); drawBoxLines(b); } for (int i=0;i<conGraph->getNodeNum()-1;i++) { for (int j=i+1;j<conGraph->getNodeNum();j++) { Contact con=conGraph->getBestEdge(i,j); if (!con.NoExtension) drawContact(con); } } } /*glPointSize(5); glBegin(GL_POINTS); glVertex3f(-0.077,0.06,1.50); glEnd(); glPointSize(1);*/ //drawContact(conGraph->getActiveEdge(1,2)); //drawBoxLines(*testBoxA); //drawBoxLines(*testBoxB); //drawBoxLines(*testBoxC); //Contact con=testConSet.at(0); //drawContact(con); //drawContact(testConSet2.at(1)); }
/* Draw the bounding box */ void TumblerWindow::drawBBox(TumblerStruct *xtum) { Imat *mat; Ipoint transp; int width = xtum->width; if (!xtum->bbox) return; mat = imodMatNew(3); b3dColorIndex(App->foreground); if (xtum->stereo) width/=2; transp.x = transp.y = transp.z = xtum->zoom; imodMatScale(mat, &transp); transp.x = ((float)width *0.5f); transp.y = ((float)xtum->height*0.5f); transp.z = 0; imodMatRot(mat, (double)xtum->gamma, 2); imodMatRot(mat, (double)xtum->beta, 1); imodMatRot(mat, (double)xtum->alpha, 0); imodMatTrans(mat, &transp); drawBoxLines(xtum, mat); if (xtum->stereo){ imodMatId(mat); transp.x = transp.y = transp.z = xtum->zoom; imodMatScale(mat, &transp); imodMatRot(mat, (double)xtum->gamma, 2); imodMatRot(mat, (double)xtum->beta + xtum->plax, 1); imodMatRot(mat, (double)xtum->alpha, 0); transp.x = ((float)width * 1.5f); transp.y = ((float)xtum->height*0.5f); transp.z = 0; imodMatTrans(mat, &transp); drawBoxLines(xtum, mat); } imodMatDelete(mat); return; }
void CBoxProxyView::OnDraw(CDC* /*pDC*/) { CBoxProxyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 // 清除颜色 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); { // 绘制坐标系 if (gettingDepth) glVertexAttrib4d(ColorPos,0.0,1.0,0.0,0.0); if(!gettingDepth){ drawUnitAxes(); drawTest(); if (showOrig) { glColor3f(0,1,0); for (int i=0;i<boxes.size();i++) drawBoxLines(boxes.at(i)); } if (showExtend) { glColor3f(0,1,1); for (int i=0;i<extendedBoxes.size();i++) drawBoxLines(extendedBoxes.at(i)); } } else if(testMode){ for (int i=0;i<boxes.size();i++) drawBoxPolygons(boxes.at(i)); } else{ for (int i=0;i<boxes.size();i++) drawBoxPolygons(boxes.at(i)); } } glPopMatrix(); // 交换缓冲区 if (gettingDepth) { GetDepthAfter(); } else SwapBuffers(wglGetCurrentDC()); }