📄 calib3dwindow.cpp
字号:
x4 = -Box_W / 2;
y4 = Box_H / 2;
z4 = 0;
x5 = Box_W / 2;
y5 = -Box_H / 2;
z5 = Box_L;
x6 = -Box_W / 2;
y6 = -Box_H / 2;
z6 = Box_L;
x7 = Box_W / 2;
y7 = Box_H / 2;
z7 = Box_L;
x8 = -Box_W / 2;
y8 = Box_H / 2;
z8 = Box_L;
floorHeight = Box_H / 6;
yfloor = - Box_H /2 - floorHeight;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glDepthRange(0,1.0);
glOrtho( -1,1,
-1,1,
-10,10);
glRotatef(m_baseAlpha + m_alpha,0,1,0);
glRotatef(m_baseBeta + m_beta,1,0,0);
float setScale;
setScale = m_baseScale + m_scale;
glScalef( setScale,
setScale,
setScale);
glTranslatef(0, 0,- Box_L / 2.0f);
/* Draw the room */
glBegin(GL_LINE_STRIP);
glColor3f(1,0,0);
glVertex3f(x1,y1,z1);
glVertex3f(x3,y3,z3);
glVertex3f(x4,y4,z4);
glVertex3f(x2,y2,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x5,y5,z5);
glVertex3f(x6,y6,z6);
glVertex3f(x8,y8,z8);
glVertex3f(x7,y7,z7);
glVertex3f(x5,y5,z5);
glEnd();
glBegin(GL_LINES);
glVertex3f(x3,y3,z3);
glVertex3f(x7,y7,z7);
glVertex3f(x4,y4,z4);
glVertex3f(x8,y8,z8);
glVertex3f(x2,y2,z2);
glVertex3f(x6,y6,z6);
glEnd();
/* Draw floor for the room */
/* First draw the lines */
glBegin(GL_LINES);
glColor3f(0.0,1.0,0.0);
glVertex3f(x1,y1,z1);
glVertex3f(x5,y5,z5);
glVertex3f(x5,y5,z5);
glVertex3f(x6,y6,z6);
glVertex3f(x6,y6,z6);
glVertex3f(x2,y2,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x1,y1,z1);
glVertex3f(x1,yfloor,z1);
glVertex3f(x1,yfloor,z1);
glVertex3f(x5,yfloor,z5);
glVertex3f(x5,yfloor,z5);
glVertex3f(x6,yfloor,z6);
glVertex3f(x6,yfloor,z6);
glVertex3f(x2,yfloor,z2);
glVertex3f(x2,yfloor,z2);
glVertex3f(x1,yfloor,z1);
glVertex3f(x2,y2,z2);
glVertex3f(x2,yfloor,z2);
glVertex3f(x6,y6,z6);
glVertex3f(x6,yfloor,z6);
glVertex3f(x5,y5,z5);
glVertex3f(x5,yfloor,z5);
glEnd();
/* Draw floor under floor */
glBegin(GL_QUADS);
glColor3f(0.0f, 0.6f, 1.1f);
glVertex3f(x1,yfloor,z1);
glVertex3f(x5,yfloor,z5);
glVertex3f(x6,yfloor,z6);
glVertex3f(x2,yfloor,z2);
glEnd();
/* Draw walls under floor */
glBegin(GL_QUADS);
glColor3f(0.0f,0.3f,0.5f);
glVertex3f(x1,y1,z1);
glVertex3f(x5,y5,z5);
glVertex3f(x5,yfloor,z5);
glVertex3f(x1,yfloor,z1);
glVertex3f(x5,y5,z5);
glVertex3f(x6,y6,z6);
glVertex3f(x6,yfloor,z6);
glVertex3f(x5,yfloor,z5);
glVertex3f(x2,y2,z2);
glVertex3f(x6,y6,z6);
glVertex3f(x6,yfloor,z6);
glVertex3f(x2,yfloor,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y2,z2);
glVertex3f(x2,yfloor,z2);
glVertex3f(x1,yfloor,z1);
glEnd();
/* Draw the camera */
float camX0,camX1,camX2,camX3,camX4;
float camY0,camY1,camY2,camY3,camY4;
float camZ0,camZ1,camZ2,camZ3,camZ4;
camX0 = 0.0; camY0 = 0.0; camZ0 = 0.0;
camX1 = -1.0; camY1 = 1.0; camZ1 = 4.0;
camX2 = 1.0; camY2 = 1.0; camZ2 = 4.0;
camX3 = 1.0; camY3 = -1.0; camZ3 = 4.0;
camX4 = -1.0; camY4 = -1.0; camZ4 = 4.0;
/*
glBegin(GL_TRIANGLE_FAN);
glVertex3f(camX0,camY0,camZ0);
glVertex3f(camX1,camY1,camZ1);
glVertex3f(camX2,camY2,camZ2);
glVertex3f(camX3,camY3,camZ3);
glVertex3f(camX4,camY4,camZ4);
glEnd();
*/
glBegin(GL_LINE_STRIP);
glColor3f(1.0,0.0,0.0);
glVertex3f(camX0,camY0,camZ0);
glVertex3f(camX1,camY1,camZ1);
glVertex3f(camX2,camY2,camZ2);
glVertex3f(camX3,camY3,camZ3);
glVertex3f(camX4,camY4,camZ4);
glVertex3f(camX1,camY1,camZ1);
glEnd();
glBegin(GL_LINES);
glVertex3f(camX0,camY0,camZ0);
glVertex3f(camX2,camY2,camZ2);
glVertex3f(camX0,camY0,camZ0);
glVertex3f(camX3,camY3,camZ3);
glVertex3f(camX0,camY0,camZ0);
glVertex3f(camX4,camY4,camZ4);
glEnd();
/* draw direct to ground */
glBegin(GL_LINES);
glVertex3f(0,0,0);
glVertex3f(0,-Box_H/2,0);
glEnd();
/* Draw flat ground */
glBegin(GL_QUADS);
glColor3f(1.0f, 0.6f, 0.1f);
//glShadeModel(GL_FLAT);
glVertex3f(x1,y1,z1);
glVertex3f(x5,y5,z5);
glVertex3f(x6,y6,z6);
glVertex3f(x2,y2,z2);
glEnd();
/* Convert Points */
for( t = 0; t < etalonNum; t++) {
objPoint.data.fl[0] = objPoints.data.fl[t * 3 + 0];
objPoint.data.fl[1] = objPoints.data.fl[t * 3 + 1];
objPoint.data.fl[2] = objPoints.data.fl[t * 3 + 2];
cvmMul( &cameraMatr, &objPoint, &tmp3 );
cvmAdd( &tmp3, &transVect, &Point );
// MirrorPoints !!!
Points.data.fl[t*3+0] = -Point.data.fl[0];
Points.data.fl[t*3+1] = -Point.data.fl[1];
Points.data.fl[t*3+2] = Point.data.fl[2];
}
/* Draw Object */
glBegin(GL_QUADS);
/* Draw black and white quads */
float xq[4];//1,xq2,xq3,xq4;
float yq[4];//1,yq2,yq3,yq4;
float zq[4];//,zq2,zq3,zq4;
int inds[4];//1,ind2,ind3,ind4;
int curr;
for(t = 0; t < numY - 1; t++)
{
for(k = 0; k < numX - 1; k++)
{
inds[0] = t * numX + k;
inds[1] = inds[0] + 1;
inds[2] = inds[0] + numX + 1;
inds[3] = inds[0] + numX;
for( curr = 0; curr < 4; curr++ )
{
xq[curr] = Points.data.fl[inds[curr] * 3 + 0];
yq[curr] = Points.data.fl[inds[curr] * 3 + 1];
zq[curr] = Points.data.fl[inds[curr] * 3 + 2];
}
if( (t + k & 1) == 1 )
{
glColor3f(0.1f, 0.1f, 0.1f);
}
else
{
glColor3f(1.0f, 1.0f, 1.0f);
}
for( curr = 0; curr < 4; curr++ )
{
glVertex3f(xq[curr],yq[curr],zq[curr]);
}
}
}
glEnd();
cvmFree(&objPoints);
cvmFree(&Points );
cvmFree(&objPoint );
cvmFree(&tmp3 );
cvmFree(&Point );
}
glFinish();
glFlush();
noerror = SwapBuffers(m_hdc);
EndPaint( m_hwnd, &ps );
}/* OnPaint */
void CCalib3DWindow::OnLButtonDown( CvPoint pt, int /*fwKeys*/)
{
m_oldLPoint = pt;
SetCapture(m_hwnd);
m_alpha = 0.0;
m_beta = 0.0;
m_holdLMouse = true;
InvalidateRect( m_hwnd, 0, FALSE );
UpdateWindow( m_hwnd );
}
void CCalib3DWindow::OnLButtonUp( CvPoint /*pt*/, int /*fwKeys*/)
{
ReleaseCapture();
m_holdLMouse = false;
m_baseAlpha += m_alpha;
m_baseBeta += m_beta;
m_alpha = 0.0;
m_beta = 0.0;
InvalidateRect( m_hwnd, 0, FALSE );
UpdateWindow( m_hwnd );
}
void CCalib3DWindow::OnRButtonDown( CvPoint pt, int /*fwKeys*/)
{
m_oldRPoint = pt;
SetCapture(m_hwnd);
m_holdRMouse = true;
m_scale = 0.0;
InvalidateRect( m_hwnd, 0, FALSE );
UpdateWindow( m_hwnd );
}
void CCalib3DWindow::OnRButtonUp( CvPoint /*pt*/, int /*fwKeys*/)
{
ReleaseCapture();
m_holdRMouse = false;
m_baseScale += m_scale;
if( m_baseScale <= 0.0) m_baseScale = 0.0;
m_scale = 0.0;
InvalidateRect( m_hwnd, 0, FALSE );
UpdateWindow( m_hwnd );
}
void CCalib3DWindow::OnMouseMove( CvPoint pt, int /*fwKeys*/)
{
if( m_holdLMouse )
{
RECT rect;
GetClientRect( m_hwnd, &rect );
float width = (float)(rect.right - rect.left);
float height = (float)(rect.bottom - rect.top);
float dx = (float)( pt.x - m_oldLPoint.x );
float dy = (float)( pt.y - m_oldLPoint.y );
m_alpha = (dx / width) * 360;
m_beta = (dy / height) * 360;
}
if( m_holdRMouse )
{
RECT rect;
GetClientRect( m_hwnd, &rect );
float height = (float)(rect.bottom - rect.top);
float dy = (float)(pt.y - m_oldRPoint.y);
m_scale = (float)((dy/height)*0.1);
}
InvalidateRect( m_hwnd, 0, FALSE );
UpdateWindow( m_hwnd );
}
void CCalib3DWindow::Show( bool show )
{
ShowWindow( m_hwnd, show ? SW_SHOWNORMAL : SW_HIDE );
}
/* End of file. */
CCalib3DWindow::Resize()
{
RECT rect;
GetClientRect( m_hwnd, &rect );
glViewport(0,0,rect.right - rect.left,rect.bottom - rect.top);
OnPaint();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -