[github链接]

网上的代码大都是固定管线渲染的,今天下午整理了下,把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可编程管线的更多相关文章

  1. (转)OpenGL ES编程入门资源集合

     出自:http://blog.csdn.net/u013467442/article/details/44498125     OpenGL ES 2.0中文手册:http://www.dreami ...

  2. GPU的历史:从固定管线到可编程管线再到通用计算平台

    开始的时候GPU不能编程,也叫固定管线的,就是把数据按照固定的通路走完. 和CPU同样作为计算处理器,顺理成章就出来了可编程的GPU,但是那时候想在GPU上编程可不是容易的事,你只能使用GPU汇编来写 ...

  3. QT_OPENGL-------- 4.可编程管线绘制三角形

    一.环境:qt下qmake编译首先在qt .pro文件中添加glew和glfw的链接 LIBS+= -L/usr/lib64 -lGLEW LIBS +=-L/usr/local/lib -lglfw ...

  4. MFC下DLL编程(图解)

    MFC下DLL编程(图解) DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种 ...

  5. 基于MFC的socket编程

    网络编程 1.windows 套接字编程(开放的网络编程接口)添加头文件#include<windows.h> 2.套接字及其分类 socket分为两种:(1)数据报socket:无连接套 ...

  6. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  7. MFC 控件编程之水平滚动条跟垂直滚动条

    MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...

  8. MFC控件编程之组合框跟列表框

    MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添 ...

  9. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

随机推荐

  1. Debian 6 , 十个串口为什么只识别到了 6个 剩下4 个被禁止了

    0.946441] Serial: 8250/16550 driver, 6 ports, IRQ sharing enabled [    0.946533] serial8250: ttyS0 a ...

  2. Javase 简单代码练习

    public class Test10 { public static void main(String[] args) { System.out.println("------------ ...

  3. linux--ubuntu的下载以及VMware Tool的安装

    1. Ubuntu的下载:http://cn.ubuntu.com/download/ 2. VMware Tool的安装: 第一步:在主机上,从 Workstation Pro 菜单栏中选择虚拟机 ...

  4. idea 解决git冲突

    1.提交本地代码到本地仓库 2.啦取远程代码 不进行merge 3.冲突文件会显示   >>> head  ===== 4.删除  >>> head  ===== ...

  5. Web项目部署(Flask Angular2 Nginx)

    独立弄了一个项目,也是锻炼自己的工程能力,使用了比较常用的框架,后端Flask,前端Angular2,采用前后端完全分离的方式,通过接口传输json,但是在具体部署过程中,查找资料较为零散,故整理如下 ...

  6. find命令扩展

    1.1 方法一  |xargs 通过|xargs将前面命令的执行结果传给后面. [root@znix ~]# find /clsn/ -type f -name "*.sh" |x ...

  7. Supervisor 从入门到放弃

    前言 Supervisor是一个客户端/服务器系统,允许其用户在类UNIX操作系统上控制许多进程.(官方解释) 简单点来讲,就是一个监控脚本运行的工具,不过他可以统一化管理,laravel的队列文档上 ...

  8. 【Codeforces Round #493 (Div. 2) B】Cutting

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然只有在前i个位置奇数偶数出现次数都相同的地方才能切. (且不管前面怎么切,这里都能切的. 那么就相当于有n个物品,每个物品的代价 ...

  9. 使用SeaJS,require加载Jquery的时候总是为null

    这个问题困扰了我两天,使用别人的例子.官网down下来的example都没有问题.但是放到自己项目里就 var $=require("jquery") 为null. 后来发现,jq ...

  10. H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器

    H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器 ------------------------------------------------------------ ...