OpenGL+MFC实现旋转、缩放、平移


软件平台VS2010,使用的是MFC+OpenGL,旋转是通过ArcBall实现。左键按下旋转,鼠标滚轮实现缩放,右键平移。
资源截图
代码片段和文件信息
#include “StdAfx.h“
#include “ArcBall.h“
#include“Matrix.h“
#include

ArcBall::ArcBall(void)
{
m_rotation.SetIdentity();
}

ArcBall::~ArcBall(void)
{
}

void ArcBall::SetBound(int Width int height)
{

m_winWidth=Width;
m_winHeight=height;
}

Point3D ArcBall::CoordToSphere(int x int y)
{
double xScale = 2.0 / m_winWidth;
double yScale = 2.0 / m_winHeight;

double xPos = x * xScale - 1;
double yPos = 1 - y * yScale;
double zPos = 0.0;

double len = xPos * xPos + yPos * yPos;
if (len < 1.0)
{
zPos = sqrt(1.0 - len);
}

return Point3D(xPos yPos zPos);
}
void ArcBall::click(const CPoint &pt)
{
m_ptlast = CoordToSphere(pt.xpt.y);
}

void ArcBall::drag(const CPoint &pt)
{
Point3D ptCur =  CoordToSphere(pt.xpt.y);
CVector3D axis = m_ptlast * ptCur;
m_ptlast.Normalize();
ptCur.Normalize();

double c = m_ptlast % ptCur;
double angle = 2*acos(c);

CMatrix matrix = CMatrix::GetRotationMatrix(angleaxis[0]axis[1]axis[2]);
m_rotation = matrix * m_rotation;
m_ptlast = ptCur;
}
double *ArcBall::GetRotationData()
{
static double data[16];

data[0] =m_rotation[0][0];
data[1] =m_rotation[1][0];
data[2] =m_rotation[2][0];
data[3] = 0;

data[4] = m_rotation[0][1];
data[5] = m_rotation[1][1];
data[6] = m_rotation[2][1];
data[7] = 0;

data[8] =m_rotation[0][2];
data[9] = m_rotation[1][2];
data[10] = m_rotation[2][2];
data[11] = 0;

data[12] = 0;
data[13] = 0;
data[14] = 0;
data[15] = 1;

return data;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-01-02 09:14  paint_cylinder
     目录           0  2017-12-13 00:34  paint_cylinderDebug
     文件      252416  2017-12-13 00:34  paint_cylinderDebugpaint_cylinder.exe
     文件     1897296  2017-12-13 00:34  paint_cylinderDebugpaint_cylinder.ilk
     文件     5524480  2017-12-13 00:34  paint_cylinderDebugpaint_cylinder.pdb
     目录           0  2017-12-27 08:08  paint_cylinderipch
     目录           0  2018-01-02 09:14  paint_cylinderipchpaint_cylinder-3829da0b
     目录           0  2018-01-02 09:12  paint_cylinderpaint_cylinder
     文件        1548  2017-12-12 21:00  paint_cylinderpaint_cylinderArcBall.cpp
     文件         384  2017-12-12 21:00  paint_cylinderpaint_cylinderArcBall.h
     目录           0  2017-12-13 00:34  paint_cylinderpaint_cylinderDebug
     文件       16563  2017-12-12 21:08  paint_cylinderpaint_cylinderDebugArcBall.obj
     文件       67236  2017-12-13 00:34  paint_cylinderpaint_cylinderDebugCL.read.1.tlog
     文件        7588  2017-12-13 00:34  paint_cylinderpaint_cylinderDebugCL.write.1.tlog
     文件       89298  2017-12-12 21:08  paint_cylinderpaint_cylinderDebugMainFrm.obj
     文件       15162  2017-12-12 21:08  paint_cylinderpaint_cylinderDebugMatrix.obj
     文件        9680  2017-12-12 21:09  paint_cylinderpaint_cylinderDebugPoint3D.obj
     文件        6298  2017-12-13 00:34  paint_cylinderpaint_cylinderDebugcl.command.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink-cvtres.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink-cvtres.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.13012-cvtres.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.13012-cvtres.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.13012.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.13012.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.1364-cvtres.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.1364-cvtres.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.1364.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.1364.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.2472-cvtres.read.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.2472-cvtres.write.1.tlog
     文件           2  2017-12-13 00:34  paint_cylinderpaint_cylinderDebuglink.2472.read.1.tlog
............此处省略71个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)