光栅渲染器(三)光栅化2D三角形

本文详细介绍了如何使用扫描转换算法来光栅化2D三角形,包括完善Bresenham画线算法以处理特殊情况,通过连接三角形的三个顶点绘制线条,以及填充三角形的内部。通过线段填充和平底三角形的处理方法,扩展到任意三角形的填充。最后,讨论了顶点排序的简化方法。
摘要由CSDN通过智能技术生成

这篇主要讲扫描转换方法光栅化2d三角形

之前我们已经完成了线段的绘制,而三角形其实3条线段的首尾相连,所以我们只要给出三个不在同一直线的顶点就能绘制三角形

一、完善画线算法

Bresenham算法是种相对高效的算法,但目前我项目中的这一算法在顶点x坐标或y坐标相同时还无法完成绘制。所以这一情况下,我选择DDA算法取代。
如下

void DrawLine(point_t v1, point_t v2, color_t c)
{
    if (v1.x == v2.x || v1.y == v2.y)
    {
        DrawLineDDA2d(v1, v2, c);
    }
    else
    {
        DrawLineBre(v1, v2, c);
    }
}

这样一来就完成了相对高效且完全通用的画线算法

二、用画线算法绘制三角形

算法很简单,就是绘制三条首尾相连的三角形

void DrawTriangle(point_t v1, point_t v2, point_t v3,color_t c)
{
    if (v1.x == v2.x&&v1.x == v3.x) return;
    if (v1.y == v2.y&&v1.y == v3.y) return;
    DrawLine(v1, v2,c);
    DrawLine(v2, v3,c);
    DrawLine(v3, v1,c);
}

接下来在重绘函数里测试代码

// 重绘函数
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);     // 清屏幕 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值