VC结合OpenGL实现三维曲线图

VC结合OpenGL实现三维曲线图

一、引入OpenGL

1.1 配置OpenGL

1.1.1 引入GLUT

安装GLUT

前往FREE GLUT官网下载安装包

请添加图片描述

压缩包解压后将include目录引入项目的include文件夹中

引入include目录

在这里插入图片描述

1.1.2 引入GLFW(如有需求引入)

安装GLFW

GLFW下载地址

在这里插入图片描述

下载好后将GLFW安装包移入项目include目录中并将在vs中引入GLFW的include目录

在这里插入图片描述

引入lib依赖

首先需要引入对应vs版本的lib目录

在这里插入图片描述

链接器 > 输入 > 附加依赖项 添加glfw3.lib;opengl32.lib;user32.lib;gdi32.lib;shell32.lib
在这里插入图片描述

1.1.3 引入GLAD(如有需求引入)

GLAD下载链接

在这里插入图片描述

选择以上配置
引入glad的include目录

在这里插入图片描述

源文件添加现有项glad.c

在glad的src目录下

在这里插入图片描述

二、VC2015结合OpenGL绘出三维图像

程序界面浏览

在这里插入图片描述

系统整体结构图

在这里插入图片描述

2.1 初始化程序

实际上,从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 (括号内表示的是相应的图形学概念): 
第一步,将相机置于三角架上,让它对准三维景物(视点变换,Viewing Transformation)。 
第二步,将三维物体放在适当的位置(模型变换,Modeling Transformation)。 
第三步,选择相机镜头并调焦,使三维物体投影在二维胶片上(投影变换,Projection Transformation)。 
第四步,决定二维像片的大小(视口变换,Viewport Transformation)

其中m_zRotate为绕Z轴旋转的角度,m_xRotate为绕X轴旋转的角度(右手坐标系)

在这里插入图片描述

m_dTran_X = 0.1f;				// 向X轴方向平移距离
m_dTran_Y = 0.0f;				// 向Y轴方向平移距离
m_dTran_Z = 0.1f;				// 向Z轴方向平移距离

上述三个参数为模型平移的参数,

在这里插入图片描述

2.1.1 初始化窗口句柄

CRect rect;
GetDlgItem(IDC_PICTURE_CTRL)->GetWindowRect(rect);
ScreenToClient(rect);
m_pOpenGlObject.oglCreate(rect, this, 1000, 1000,glm::vec2(-5, 5), glm::vec2(-10,10), glm::vec2(-100, 100)); // 调用初始化方法便于移植
m_pOpenGlObject.SetTimer(1, 10, NULL); // 启动OpenGL对象的定时器,本程序绘制方法放在定时器中进行循环绘制

oglCreate初始化方法:

CString className = AfxRegisterWndClass(CS_HREDRAW |
		CS_VREDRAW | CS_OWNDC, NULL,
		(HBRUSH)GetStockObject(BLACK_BRUSH), NULL);

	this->CreateEx(0, className, "OpenGL", WS_CHILD | WS_VISIBLE |
		WS_CLIPSIBLINGS | WS_CLIPCHILDREN, rect, parent, 0);

	// Set initial variables' values  
	m_oldWindow = rect;
	m_originalRect = rect;
	hWnd = parent;

	oglInitializeData(nXcount, nYcount, vec2Xrange, vec2Yrange, vec2Zrange);	// 初始化数据
	oglInitialize();		// 初始化系统【配置OpenGL上下文】
	oglInitializeFreeType();// 初始化字体绘制

2.1.2 初始化数据(oglInitializeData)

// 参数、数据初始化
void COpenGLObject::oglInitializeData(int nXcount, int nYcount, glm::vec2 vec2Xrange, glm::vec2 vec2Yrange, glm::vec2 vec2Zrange) {
	// 初始化参数
	m_nAsCount = 7;				// 刻度数目
	m_fFov = 20.0f;					// 相机视场角
	m_nDrawMode = 0;                // 填充模式
	m_nScaleMode = 0;               // 视图模式
	m_LeftButtonDown = false;		// 鼠标左键按下标识
	m_RightButtonDown = false;		// 鼠标右键按下标识
	m_fRotate_X = -25.0f;			// 绕X轴旋转度数
	m_fRotate_Z = -20.0f;			// 绕Z轴旋转度数
	m_dTran_X = 0.1f;				// 向X轴方向平移距离
	m_dTran_Y = 0.0f;				// 向Y轴方向平移距离
	m_dTran_Z = 0.1f;				// 向Z轴方向平移距离
	m_fScale_X = 0.83f;				// X轴缩放尺寸
	m_fScale_Y = 0.83f;				// Y轴缩放尺寸
	m_fScale_Z = 0.83f;				// Z轴缩放尺寸
	m_oglCamera.m_fPos_X = -5.0f;		// 相机三维坐标
	m_oglCamera.m_fPos_Y = -5.0f;
	m_oglCamera.m_fPos_Z = 5.0f;
	m_oglCamera.m_fTargetX = 0.0f;		// 相机目标点坐标
	m_oglCamera.m_fTargetY = 0.0f;
	m_oglCamera
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值