void drawCamCenter(const CamPoseItem* cam, const float* color, int ptSz) {
	double org[3], ox[3], oy[3], oz[3];
	getCamCoords(cam, org, ox, oy, oz);
	glColor3f(color[0], color[1], color[2]);
	glLineWidth(ptSz);
	glBegin(GL_POINTS);
	glVertex3f(org[0], org[1], org[2]);
	glEnd();
}
Example #2
0
void GLScenePane::getSceneScale() {
	m_center[0] = 0;
	m_center[1] = 0;
	m_center[2] = 0;
	int num = 0;

	double org[3], axisX[3], axisY[3], axisZ[3];
	for (int i = 0; i < m_pSLAM->numCams; i++) {
		const CamPoseItem* cam = m_pSLAM->slam[i].m_camPos.first();
		while (cam) {
			getCamCoords(cam, org, axisX, axisY, axisZ);
			m_center[0] += org[0];
			m_center[1] += org[1];
			m_center[2] += org[2];
			num++;
			cam = cam->next;
		}
	}
	m_center[0] /= num;
	m_center[1] /= num;
	m_center[2] /= num;

	m_scale = 0;
	for (int i = 0; i < m_pSLAM->numCams; i++) {
		const CamPoseItem* cam = m_pSLAM->slam[i].m_camPos.first();
		while (cam) {
			getCamCoords(cam, org, axisX, axisY, axisZ);
			double dx = m_center[0] - org[0];
			double dy = m_center[1] - org[1];
			double dz = m_center[2] - org[2];
			m_scale += sqrt(dx * dx + dy * dy + dz * dz);
			cam = cam->next;
		}
	}
	m_scale /= num;
	m_scale *= 0.5;
}
void drawCameraPose(const CamPoseItem* cam, double camSize, const float* color = 0) {
	double p0[3], xp[3], yp[3], zp[3]; //, tmp[3];
	getCamCoords(cam, p0, xp, yp, zp);
	double scale = camSize;

	//	//draw id
	//	char id_str[256];
	//	sprintf(id_str, "%d", cam->f);
	//	glutPrint(cam->t[0], cam->t[1], cam->t[2], GLUT_BITMAP_9_BY_15, id_str, 1, 1, 1, 0);

	//draw axes
	//	glBegin(GL_LINES);
	//	glColor3f(1, 0, 0);
	//	glquiver3(p0, xp, scale);
	//	glColor3f(0, 1, 0);
	//	glquiver3(p0, yp, scale);
	//	glColor3f(0, 0, 1);
	//	glquiver3(p0, zp, scale);
	//	glEnd();

	double quad[4][3];
	add(p0, zp, quad[0], 1.0, 1 * scale);
	add(quad[0], xp, quad[1], 1.0, 0.8 * scale);
	add(quad[1], yp, quad[0], 1.0, 0.8 * scale);

	if (color) {
		glColor3f(color[0], color[1], color[2]);
	}
	glBegin(GL_LINE_STRIP);
	glpt3(quad[0]);
	add(quad[0], xp, quad[1], 1.0, -1.6 * scale);
	glpt3(quad[1]);
	add(quad[1], yp, quad[2], 1.0, -1.6 * scale);
	glpt3(quad[2]);
	add(quad[2], xp, quad[3], 1.0, 1.6 * scale);
	glpt3(quad[3]);
	glpt3(quad[0]);
	glEnd();

	glBegin(GL_LINES);
	glline(p0, quad[0]);
	glline(p0, quad[1]);
	glline(p0, quad[2]);
	glline(p0, quad[3]);
	glEnd();

}
void drawCamera(int IW, int IH, const double* K, const CamPoseItem* cam,
		double camSize, const float* color = 0, const double maxDist = 100) {
	double p0[3], xp[3], yp[3], zp[3]; //, tmp[3];
	getCamCoords(cam, p0, xp, yp, zp);
	double scale = camSize;
	//draw id
	//	char id_str[256];
	//	sprintf(id_str, "%d", cam->f);
	//	glutPrint(cam->t[0], cam->t[1], cam->t[2], GLUT_BITMAP_9_BY_15, id_str, 1, 1, 1, 0);

	//draw axes
	glBegin(GL_LINES);
	glColor3f(0, 0, 1);	// x
	glquiver3(p0, xp, scale);
	glColor3f(0, 1, 0);	// y
	glquiver3(p0, yp, scale);
	glColor3f(1, 0, 0);	//z 
	glquiver3(p0, zp, scale);
	
	//glBegin(GL_LINES);
	//glColor3f(color[0],color[1],color[2]);
	//glquiver3(p0, xp, scale);
	//glColor3f(color[0],color[1],color[2]);
	//glquiver3(p0, yp, scale);
	//glColor3f(color[0],color[1],color[2]);
	//glquiver3(p0, zp, scale);
	glEnd();


	//double quad[4][3];
	//add(p0, zp, quad[0], 1.0, 1 * scale);
	//add(quad[0], xp, quad[1], 1.0, 0.8 * scale);
	//add(quad[1], yp, quad[0], 1.0, 0.8 * scale);

	//if (color) {
	//	glColor3f(color[0], color[1], color[2]);
	//}
	//glLineWidth(2.0f);
	//glBegin(GL_LINE_STRIP);
	//glpt3(quad[0]);
	//add(quad[0], xp, quad[1], 1.0, -1.6 * scale);
	//glpt3(quad[1]);
	//add(quad[1], yp, quad[2], 1.0, -1.6 * scale);
	//glpt3(quad[2]);
	//add(quad[2], xp, quad[3], 1.0, 1.6 * scale);
	//glpt3(quad[3]);
	//glpt3(quad[0]);
	//glEnd();

	//glBegin(GL_LINES);
	//glline(p0, quad[0]);
	//glline(p0, quad[1]);
	//glline(p0, quad[2]);
	//glline(p0, quad[3]);
	//glEnd();

	//draw view angle
	if (maxDist > 0) {
		double Cx = K[2];
		double fx = K[0];
		double fy = K[4];
		double A1[3] = { -maxDist * Cx / fx, 0, maxDist };
		double A2[3] = { (IW - Cx) * maxDist / fx, 0, maxDist };
		double wA1[3];
		double wA2[3];

		CamCoord2WoldCoord(cam->R, cam->t, A1, wA1);
		CamCoord2WoldCoord(cam->R, cam->t, A2, wA2);
		//transform into world coordinates
		//glColor4f(color[0], color[1], color[2], 0.2);
		glColor4f(0, 0, 1, 0.2);
		glBegin(GL_TRIANGLES);
		glpt3(wA1);
		glpt3(p0);
		glpt3(wA2);
		glEnd();
	}
}