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;
}


细细品味ASP.NET (二)

细细品味ASP.NET (二)青苹果工作室(编译) 01-5-17 下午 01:33:55Web表单 ASP.NET Web Forms就是Web页面,同现在你用 ASP编写代码所做的工作是一样的。...
  • tchaikov
  • tchaikov
  • 2001-05-17 18:50:00
  • 992

ArcBall算法解析

  • 2014年12月12日 17:06
  • 1.14MB
  • 下载

ArcBall坐标旋转三维物体原理

ArcBall提供了一种旋转方法,使得用户可以通过鼠标操作来完成对三维物体的旋转,直观而方便。要想完成旋转,先求出表示旋转的单位四元数,然后转换为欧拉旋转角和旋转轴,即可表示旋转,因此,我们给定输入输...
  • NCTU_to_prove_safety
  • NCTU_to_prove_safety
  • 2018-02-09 11:23:34
  • 32

OpenGL: Accumulation Buffer(累积缓存)

Accumulation Buffer(累积缓存)累积缓存是为合成多幅图像而设计的,它不是简单的用引入象素片元来代替象素值,而是将片元进行缩放,然后加到已有的象素值上。为了经过一系列的混合操作后能够保...
  • Augusdi
  • Augusdi
  • 2014-04-16 16:04:54
  • 1664

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

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

OpenGL: 缩放变换

代码如下:#define GLUT_DISABLE_ATEXIT_HACK #include "gl/glut.h" #pragma comment(lib, "glut32.lib") int ...
  • Augusdi
  • Augusdi
  • 2014-03-05 10:23:10
  • 7076

MFC实现鼠标中键滑动WM_MOUSEWHEEL响应,使得图形缩放

MFC实现鼠标中键滑动WM_MOUSEWHEEL响应,使得图形缩放 已经实现,没有问题 CRenderView基类是CView,实现显示操作三维模型。 实现鼠标滚轮缩放简单步骤如下: (1)响...
  • j123kaishichufa
  • j123kaishichufa
  • 2012-11-21 21:33:11
  • 17632

【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移、图形旋转、图像反...
  • Eastmount
  • Eastmount
  • 2015-06-04 17:28:35
  • 12853

OpenGL+MFC工程具备鼠标操作

  • 2016年11月06日 15:11
  • 2.14MB
  • 下载

OpenGL鼠标轨迹球

转自:http://www.lubanren.net/weblog/post/283.html 什么是鼠标轨迹球 类似AutoCAD里的“动态观察”,三维模型都是要投影到二维的屏幕上才能显示给...
  • shengwenj
  • shengwenj
  • 2016-04-24 21:40:29
  • 1000
收藏助手
不良信息举报
您举报文章:OPenGL在MFC框架中实现平移缩放
举报原因:
原因补充:

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