Dust3D开源项目分析——渲染与材质部分 | shadermesh绑定 Part 1

 2021SC@SDUSC

这一部分负责读取shader并完成shadermesh的绑定

头文件

// This file follow the Stackoverflow content license: CC BY-SA 4.0,
// since it's based on Prashanth N Udupa's work: https://stackoverflow.com/questions/35134270/how-to-use-qopenglframebufferobject-for-shadow-mapping
#ifndef DUST3D_SIMPLE_SHADER_MESH_BINDER_H
#define DUST3D_SIMPLE_SHADER_MESH_BINDER_H
#include <QMatrix4x4>
#include <QVector3D>
#include <QOpenGLShaderProgram>
#include <QOpenGLFunctions>
#include <QOpenGLBuffer>
#include <QMutex>
#include "simpleshadermesh.h"

class SimpleShaderMeshBinder : public QOpenGLFunctions
{
public:
    ~SimpleShaderMeshBinder()
    {
        delete m_shadowProgram;
        delete m_sceneProgram;
        delete m_vertexBuffer;
        delete m_indexBuffer;
        delete m_mesh;
        delete m_newMesh;
    }
    
    void updateMesh(SimpleShaderMesh *mesh);
    
    void setShadowMapTextureId(const uint &val) 
    {
        m_shadowMapTextureId = val;
    }
    
    void setSceneMatrix(const QMatrix4x4 &matrix) 
    {
        m_sceneMatrix = matrix;
    }
    
    void renderShadow(const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix);
    void renderScene(const QVector3D &eyePosition, const QVector3D &lightDirection,
                const QMatrix4x4 &projectionMatrix, const QMatrix4x4 &viewMatrix,
                const QMatrix4x4 &lightViewMatrix);
        
private:
    QMatrix4x4 m_sceneMatrix;
    QMatrix4x4 m_matrix;
    QOpenGLShaderProgram *m_shadowProgram = nullptr;
    QOpenGLShaderProgram *m_sceneProgram = nullptr;
    bool m_openglFunctionsInitialized = false;
    QOpenGLBuffer *m_vertexBuffer = nullptr;
    QOpenGLBuffer *m_indexBuffer = nullptr;
    uint m_shadowMapTextureId = 0;
    int m_vertexCount = 0;
    int m_normalOffset = 0;
    SimpleShaderMesh *m_mesh = nullptr;
    bool m_newMeshComing = false;
    SimpleShaderMesh *m_newMesh = nullptr;
    QMutex m_newMeshMutex;
    
    void checkNewMesh();
};

#endif

私有成员:

m_sceneMatrix 场景坐标矩阵        m_matrix 模型坐标矩阵        m_shadowProgram和m_sceneProgram分别是着色器程序        m_openglFunctionsInitialized 标记是否初始化的flag        m_vertexBuffer 和 m_indexBuffer 分别是顶点缓存和序号缓存        m_shadowMapTextureId用来存储为shadow map申请好的空间的位置        m_vertexCount 和 m_normalOffset记录定点数量和法线偏移量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值