从零开始软渲染1-直线和三角形

本文从基础数据结构开始,详细介绍了使用Bresenham算法绘制直线的原理和实现,接着探讨了为何在计算机图形学中选择画三角形,以及现代GPU利用重心坐标系进行三角形渲染的方法。通过代码示例展示了直线和三角形的绘制过程。
摘要由CSDN通过智能技术生成

上回我们已经可以在屏幕上画出点了,现在我们开始画直线和三角形。

基础数据结构

我们先准备一些数据结构,如二维向量和三维向量,方便后面使用。

template <class t> struct Vec2 {
    union {
        struct { t u, v; };
        struct { t x, y; };
        t raw[2];
    };
    Vec2() : u(0), v(0) {}
    Vec2(t _u, t _v) : u(_u), v(_v) {}
    inline Vec2<t> operator +(const Vec2<t>& V) const { return Vec2<t>(u + V.u, v + V.v); }
    inline Vec2<t> operator -(const Vec2<t>& V) const { return Vec2<t>(u - V.u, v - V.v); }
    inline Vec2<t> operator *(float f)          const { return Vec2<t>(u * f, v * f); }
    t& operator[](const size_t i) { assert(i < 2); return i <= 0 ? x : y; }
    const t& operator[](const size_t i) const { assert(i < 2); return i <= 0 ? x : y; }
};
template <class t> struct Vec3 {
    union {
        struct { t x, y, z; };
        struct { t r, g, b; };
        struct { t ivert, iuv, inorm; };
        t raw[3];
    };
    Vec3() : x(0), y(0), z(0) {}
    Vec3(t _x, t _y, t _z) : x(_x), y(_y), z(_z) {}
    inline Vec3<t> operator ^(const Vec3<t>& v) const { return Vec3<t>(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); }
    inline Vec3<t> operator +(const Vec3<t>& v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值