MFC+OpenGL可编程管线
网上的代码大都是固定管线渲染的,今天下午整理了下,把setPixelFormat、初始化glew、创建GL 4,2 context等操作封装到一个MFC类OpenGLWidget里。使用步骤:
1. 把OpenGLWidget.h和OpenGLWidget.cpp包含在项目里面。
2. 继承类OpenGLWidget,实现两个虚函数:Initialize()[负责加载数据]、RenderScene()[负责渲染]两个函数。比如下面的LeftWindow类:
#pragma once
#include "OpenGLWidget.h" #include <Cameras/phc.h>
#include <OpenglWrappers/DemoMeshes/BlinnPhongMesh.h> class LeftWindow : public OpenGLWidget{
redips::PhC *m_phc = new redips::PhC(, 1.0f, 0.1f, );
redips::BlinnPhongMesh* m_mesh = nullptr;
public:
LeftWindow(){}
~LeftWindow(){
delete m_mesh; delete m_phc;
}
bool Initialize(){
m_mesh = new redips::BlinnPhongMesh(new redips::Triangles("E:/Documents/models/Effier/new_iffier.obj"));
auto heart = m_mesh->model_ptr()->aabb_R().heart();
m_phc->lookAt(heart + redips::float3(, , ), heart, redips::float3(, , ));
return true;
}
void RenderScene(){
m_mesh->uniformFloat3("lightColor", redips::float3(, , ));
m_mesh->uniformFloat3("lightPos", m_phc->pos());
m_mesh->uniformFloat3("cameraPos", m_phc->pos());
m_mesh->uniformMat44f("model", redips::Mat44f::eye().ptr());
m_mesh->uniformMat44f("projection", m_phc->glProjection().ptr());
m_mesh->uniformMat44f("view", m_phc->glView().ptr());
m_mesh->draw();
}
};
[redips是我封装的渲染相关的类,详细介绍]
3. 将下面代码添加到OnInitDialog()函数里,即在当前对话框里创建了一个OpenGLWidget
m_leftWindow = new LeftWindow;
m_leftWindow ->Create(NULL, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE,
CRect(, , , ),
this, //this is the parent
);
MFC+OpenGL可编程管线的更多相关文章
- (转)OpenGL ES编程入门资源集合
出自:http://blog.csdn.net/u013467442/article/details/44498125 OpenGL ES 2.0中文手册:http://www.dreami ...
- GPU的历史:从固定管线到可编程管线再到通用计算平台
开始的时候GPU不能编程,也叫固定管线的,就是把数据按照固定的通路走完. 和CPU同样作为计算处理器,顺理成章就出来了可编程的GPU,但是那时候想在GPU上编程可不是容易的事,你只能使用GPU汇编来写 ...
- QT_OPENGL-------- 4.可编程管线绘制三角形
一.环境:qt下qmake编译首先在qt .pro文件中添加glew和glfw的链接 LIBS+= -L/usr/lib64 -lGLEW LIBS +=-L/usr/local/lib -lglfw ...
- MFC下DLL编程(图解)
MFC下DLL编程(图解) DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种 ...
- 基于MFC的socket编程
网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...
- MFC控件编程进度条编写
MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl 进度条编程也很简单. 封装的方法也就那个那几个. GetPos() 获 ...
- MFC 控件编程之水平滚动条跟垂直滚动条
MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...
- MFC控件编程之组合框跟列表框
MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添 ...
- MFC控件编程之复选框单选框分组框
MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...
随机推荐
- RxSwift學習教程之基礎篇
前言 我們在 iOS 開發過程中,幾乎無時無刻都要面對異步事件的處理.例如,按鍵點擊.數據保存..音頻後臺播放.交互動畫展示.這些事件並不具備特定時序性,甚至它們可能同時發生. 雖然 Apple 提供 ...
- strusts2_json
引用别人的 Struts.xml <package name="default" extends ="json-default" > <act ...
- 谈谈网页中的ajax
一个页面上有很多的ajax请求,这样的页面右键查看源文件是没法看到全部的html.事实上,这种网页也是从正常的html页面改造过来的,常用的一个场景是,同一个区域大量循环,在动态页面里(比如jsp等) ...
- MongoDB经典入门(1)--安装
一.前言 最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下.本人不才,借着自 学的机会把心得体会都记录下来,方便感兴趣的童鞋分享讨论 ...
- js实现图片上传预览功能,使用base64编码来实现
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 完全二叉树(Complete Binary Tree)
Date:2019-03-25 19:36:45 判断一棵树是否为完全二叉树 #include <queue> using namespace std; void IsComplete(n ...
- gradle多模块构建集成swagger
1.首先说一下软件的版本:springboot:1.5.2:springcloud:D-SR1:swaager2:2.6.0:gradle:4.5.工程模块是分开的单独的entity,api,mapp ...
- 原生node写一个静态资源服务器
myanywhere 用原生node做一个简易阉割版的anywhere静态资源服务器,以提升对node与http的理解. 相关知识 es6及es7语法 http的相关网络知识 响应头 缓存相关 压缩相 ...
- pycharm 永久激活 序列码 破解版
如今人工智能的概念相当火爆,很多想学习编程求得高薪岗位的同志纷纷学起了Python,自带的idle不够智能,推荐使用pycharm编辑运行Python程序. 然而小萌新在安装pycharm时才会意识到 ...
- Elasticsearch 入门 - 安装、启动和配置
安装 请参阅elastic官网 :Installing Elasticsearch 启动 使用 ./bin/elasticsearch 命令即可启动 使用 ./bin/elasticsearch -d ...