从零开始软渲染5-Shader

本文介绍了渲染管线的基本流程,重点关注Vertex Shader和Fragment Shader。通过OpenGL实例,阐述了如何进行顶点变换和颜色输出。同时,文章提供了一个Shader类的实现,包括模型、观察和投影矩阵的计算,并探讨了移动相机和坐标变换。最后,文章提到当前实现的光照问题,暗示了阴影处理将是后续讨论的重点。
摘要由CSDN通过智能技术生成

上一篇我们聊得比较偏理论,这篇我们来实际操作。

渲染管线

在实际动手之前,我们来看看图形API是如何做的。

上图是OpenGL 2的渲染管线,和新版本略有差异,但大体流程是相似的。这里我们主要关注其中的Vertex Shader和Fragment Shader。

Vertex Shader主要负责顶点变换,就是把一个顶点从模型空间变换到裁剪空间,并为后面的Fragment Shader准备相关的数据。Fragment Shader主要负责输出颜色,就是决定一个像素究竟应该输出什么样的颜色。

从Shader开始

我们先定义一个Shader类:

class SimpleShader {
public:
    SimpleShader(Matrix4* m_mvp, Matrix4* m_model, TGAImage* image, Vector3 lightDir);
    ~SimpleShader();

    Vector4 vertex(int id, const Vector4& modelPts, const Vector3& uv, const Vector4& normalDir);
    TGAColor fragment(const Vector3& bar);
    Matrix3 varying_uv;
    Matrix4 varying_normal;
private:
    SimpleShader(const SimpleShader&);
    TGAImage* tgaImage;
    Matrix4 uniform_M;
    Matrix4 uniform_MIT;
    Vector3 light_dir;
};

这个类里有两个函数vertex和fragment,分别对应vertex shader和fragment shader的操作。Shader类的构造函数里传入了四个变量。第一个变量是一个4x4的矩阵,称为MVP矩阵。为什么称为MVP呢?M对应模型变换,V对应观察变换,P对应投影变换,MVP合成一个矩阵就可以直接把顶点从模

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值