MFC+OpenGL可编程管线

Posted redips

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC+OpenGL可编程管线相关的知识,希望对你有一定的参考价值。

[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(45, 1.0f, 0.1f, 10000);
    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(0, 0, 500), heart, redips::float3(0, 1, 0)); return true; } void RenderScene(){ m_mesh->uniformFloat3("lightColor", redips::float3(1, 1, 1)); 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(); } };

3. 将下面代码添加到OnInitDialog()函数里,即在当前对话框里创建了一个OpenGLWidget

m_leftWindow = new LeftWindow;
m_leftWindow ->Create(NULL, NULL, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE,
                            CRect(0, 0, 800, 800),
                            this,   //this is the parent
                            0);

 

以上是关于MFC+OpenGL可编程管线的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线

[Unity Shader] 渲染管线流程

从固定管线到可编程管线:十段代码入门OpenGL

从固定管线到可编程管线:十段代码入门OpenGL

从固定管线到可编程管线:十段代码入门OpenGL

✠OpenGL-2-图像管线