//*********************************
//绘制坐标系以及初始立方体
//*********************************
void CTransGraphicsView::OnDraw(CDC* pDC)
{
CTransGraphicsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HBRUSH hbrush;
CPen pen;
HPEN hPen;
// TODO: add draw code for native data here
pen.CreatePen(PS_SOLID,3,RGB(255,0,0));
hPen=(HPEN)pDC->SelectObject(pen);
pDC->SetViewportOrg(cxClient/2,cyClient/2);
pDC->MoveTo(-cxClient/2,0);
pDC->LineTo(cxClient/2,0);
pDC->MoveTo(0,-cyClient/2);
pDC->LineTo(0,cyClient/2);
pen.DeleteObject();
pDC->SelectObject(hPen);
this->ShadowTrans(-45);
for(int i=0;i<4;i++)
{
pDC->MoveTo(cpoints[i]);
pDC->LineTo(cpoints[i+4]);
}
hbrush = (HBRUSH)pDC->SelectObject(GetStockObject(NULL_BRUSH)) ;
pDC->Polygon(cpoints,4);
pDC->Polygon(cpoints+4,4);
}
//********************
//矩阵的乘法
//*********************
void CTransGraphicsView::MutiTransMarix(double a[1][4],double b[4][4],double MutiResult[1][4])
{
for(int i=0;i<4;i++) MutiResult[0][i] = 0;
for(i=0; i<1;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
MutiResult[i][j] += a[i][k]*b[k][j];
}
//******************************
//将坐标转化为矩阵形式(向量)
//******************************
void CTransGraphicsView::TransPointToMarix(ThPoint &tp,double a[1][4])
{
a[0][0] = tp.x;
a[0][1] = tp.y;
a[0][2] = tp.z;
a[0][3] = 1;
}
//******************************
//将矩阵(向量)转化为三维坐标形式
//******************************
void CTransGraphicsView::
MFC下实现图形学之立方体平移、比例、旋转、投影变换算法
最新推荐文章于 2021-12-24 17:00:58 发布
本文详细介绍了如何在MFC环境下使用C++实现图形学中的立方体变换操作,包括平移、旋转(绕x、y、z轴)、比例变换和斜交投影。通过矩阵运算,实现了坐标点的转换,以达到图形的动态变换效果,并提供了键盘交互功能,使得用户可以通过按键控制立方体的运动和变形。
摘要由CSDN通过智能技术生成