OPenGL在MFC框架中实现平移缩放

原创 2013年11月19日 22:09:15

一、鼠标中键实现平移

1、在类属性中添加消息

中键down up

鼠标滚轮移动



2、在构造函数中设置初值

CtestviewView::CtestviewView() 
{
	// TODO: 在此处添加构造代码
	Xshift=0.0;
	Yshift=0.0;
	m_Scale=1.0f;
	SHOWPOINTS=false;
	SHOWMESH=false;
	LButtonSta=false;
	RButtonSta=false;
	ShiftSta=false;
	SHOWTEXTURE=false;
	LIGHT=false;
}

3、添加函数代码

BOOL CtestviewView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	if(zDelta>0)
	{
		m_Scale = m_Scale * 1.5 ;	
	}

	if(zDelta<0)
	{
		if (m_Scale > 0)
		{
			m_Scale = m_Scale / 1.5 ;
		}

	}
	return CView::OnMouseWheel(nFlags, zDelta, pt);
}

void CtestviewView::OnMButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	ShiftSta=TRUE;
	CView::OnMButtonDown(nFlags, point);
}

void CtestviewView::OnMButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	ShiftSta=FALSE;
	CView::OnMButtonUp(nFlags, point);
}


4、在鼠标移动的函数中添加如果按下鼠标中键的代码

void CtestviewView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (LButtonSta==TRUE)
	{
	Quat4fT ThisQuat;
	MousePt.s.X=point.x;
	MousePt.s.Y=point.y;
	ArcBall.drag(&MousePt,&ThisQuat);// 更新轨迹球的变量
	Matrix3fSetRotationFromQuat4f(&ThisRot, &ThisQuat);// Convert Quaternion Into Matrix3fT
	Matrix3fMulMatrix3f(&ThisRot, &LastRot);// Accumulate Last Rotation Into This One
	Matrix4fSetRotationFromMatrix3f(&Transform, &ThisRot);
	}

	else if (ShiftSta==TRUE)
	{
	Xshift-=(mouseX-point.x)/200.0f;
	Yshift+=(mouseY-point.y)/200.0f;
	}
	mouseX=point.x;
	mouseY=point.y;

	CView::OnMouseMove(nFlags, point);
}


5、在CtestviewView::RenderScene() 绘图函数中添加平移、缩放矩阵。

BOOL CtestviewView::RenderScene() 
{
	glClearColor(0.0f,0.0f,0.0f,0.0f);//设置清屏颜色
	glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); //清除颜色缓冲区和深度缓冲区
	
	glPolygonMode(GL_BACK,GL_FILL);
	glShadeModel(GL_SMOOTH);
	glMatrixMode(GL_MODELVIEW);
	//设置为双缓冲
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glLoadIdentity();
	//添加绘图的代码

	glTranslated(Xshift,Yshift,0);//平移
	glScalef(m_Scale,m_Scale,m_Scale);//缩放
	glMultMatrixf(Transform.M);//旋转
        glFinish();	
	SwapBuffers( wglGetCurrentDC()); //双缓冲
	return TRUE;
}


MFC调用Opengl实现三维图形的旋转平移缩放

  • 2013年03月14日 10:13
  • 2.1MB
  • 下载

OpenGL实现鼠标绕任意轴旋转/平移/缩放

刚刚学opengl的童鞋肯定有个苦恼的麻烦,只会绘制一个三角形,但是想像那些三维软件那样用鼠标控制视角还是有点困难的,所以我就封装了一个场景漫游类:RoamingScenceManager,这个类使用...
  • trustguan
  • trustguan
  • 2016年03月06日 10:57
  • 8491

opengl鼠标旋转,键盘缩放和平移

  • 2015年05月07日 19:12
  • 3KB
  • 下载

[MFC]OnMouseMove移动位置和OnMouseWheel缩放实现

OnMouseMove响应鼠标移动 实现原理是:相对静止---鼠标和对象相对位置不变,鼠标的偏移量,就是我们对象的偏移量 OnMouseWheel响应鼠标中键的滚动 实现原理是:相对移动---鼠标和...
  • chunyexiyu
  • chunyexiyu
  • 2013年06月13日 10:36
  • 6870

MFC响应键盘及鼠标按键

BOOL CCarControlDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/...
  • qq229596421
  • qq229596421
  • 2016年10月19日 08:28
  • 581

OpenGL键盘 WSADQE进行旋转缩放平移简单操作

http://blog.csdn.net/yulinxx/article/details/59538755在上篇的基础上,添加键盘的控制,实现物体的缩放,平移,旋转操作 分析: 放大: 当摄像机...
  • yulinxx
  • yulinxx
  • 2017年03月04日 00:24
  • 1140

利用MFC画sin和cos图形,可以用滚轮缩放,平移

  • 2013年12月22日 15:43
  • 1.82MB
  • 下载

过滤器进行登录操作

  • 2016年10月04日 16:11
  • 14KB
  • 下载

计算机图形学之二维平移旋转缩放代码

以下均为MFC工程代码
  • gsls200808
  • gsls200808
  • 2014年11月15日 17:46
  • 2745

OpenGL教程翻译 第六课 平移变换

OpenGL教程翻译 第六课 平移变换 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) Background            ...
  • Vcube
  • Vcube
  • 2015年07月26日 21:21
  • 811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OPenGL在MFC框架中实现平移缩放
举报原因:
原因补充:

(最多只允许输入30个字)