MFC对话框程序中使用opengl实现漫游

在MFC对话框程序中成功实现基于OpenGL的简单漫游功能,包括相机前后左右移动。虽然过程中遇到不少困难,但最终通过整合网络资源完成。主要挑战在于不熟悉OpenGL编程,以及在MFC环境中适配QT的代码。采用了工具类设计降低耦合,增加代码可读性。关键步骤包括定义Camera类、处理键盘消息以及添加WM_CHAR消息响应。
摘要由CSDN通过智能技术生成

            忙活了一个下午和晚上,终于在之前的MFC对话框工程中实现了漫游的功能,虽然只是简单的照相机前进后退左右移动的功能,虽然很多代码是网上的,但是最终把功能加到这个MFC对话框程序中了,还是可喜可贺的。主要是对opengl编程太不熟悉了,一个个小问题卡住半天的时间。

         参照了如下文章:文章一文章二文章三

 首先是定义一个工具类,比较喜欢这种编程方式,这样可以很大程度上减少耦合,修改很容易,代码也很清晰。

         下面的主工具类Camera基本上是第一篇文章中的工具类,不过它的文章中的代码是基于QT的,所有有个Vector3类在MFC中找不到,所以我定义了一个和它功能相似的类。

Camera.h文件如下:

#pragma once
#include "D3Vector.h"
#include <math3d.h>
#include  <gl/GLU.h>

class Camera
{
public:
	Camera(void);
	~Camera(void);

	/* 获得摄像机状态方法 */
	D3Vector getPosition()   {	return m_Position;		}
	D3Vector getView()	    {	return m_View;			}
	D3Vector getUpVector()   {	return m_UpVector;		}
	float   getSpeed()      {   return m_Speed;         }

	/* 设置速度 */
	void setSpeed(float speed)
	{
		m_Speed  = speed;
	}

	/* 设置摄像机的位置, 观察点和向上向量 */
	void setCamera(float positionX, float positionY, float positionZ,
		float viewX,     float viewY,     float viewZ,
		float upVectorX, float upVectorY, float upVectorZ);

	/* 旋转摄像机方向 */
	void rotateView(float angle, float X, float Y, float Z);

	/* 左右摄像机移动 */
	void yawCamera(float speed);

	/* 前后移动摄像机 */
	void moveCamera(float speed);

	/* 放置摄像机 */
	void setLook();

	/* 得到摄像机指针 */
	static Camera* GetCamera(void) { return m_pCamera;}


private:
	/* 摄像机属性 */
	static Camera  *m_pCamera;      /* 当前全局摄像机指针 */
	D3Vector        m_Position;      /* 位置 */
	D3Vector      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值