《计算机图形学原理及实践》学习笔记之第三章

本文介绍了计算机图形学中的丢勒视角绘制算法,通过模拟1525年的丢勒木刻画方法来解决透视问题。文章详细阐述了算法的三个方面,包括可见性判断、点裁剪和逼近绘制,并提供了简化版的实现过程,涉及到坐标变换、线框模型和立方体的绘制。此外,还探讨了代码实现中的一些选择和局限性,以及与深度合成和基于索引的面集表示的相关概念。
摘要由CSDN通过智能技术生成

第三章 一个古老的绘制器

1525年,阿尔布雷·丢勒 制作了一幅木刻画,展示了一种可以绘制任一形体透视图的方法。
本章我们将开发一个软件来模拟丢勒展示的方法。

  • 丢勒视角绘制算法的伪代码
Input: a scene containing some objects, location of eye-point
Output: a drawing of the objects

initialize drawing to be blank
foreach object o
    foreach visible point P of o
        Open shutter
        Place pointer at P
        
        if string from P to eye-point touches boundary of frame
            Do nothing
        else
            Hold a pencil at point where string passes through frame
            Hold string aside
            Close shutter to make pencil-mark on paper
            Release string
  • 该算法有三个方面值得注意,这三个方面都体现在遍历所有采样点的循环种
    • 该循环面向的是 可见 采样点,因此,判定采样点的可见性很重要(对于人类,一个点能不能看到,我们的大脑有清除的认知,但对于计算机,这是需要进行判定的)
    • 可能存在无限数量的可见采样点
    • 当细线触碰画框而不是穿过画框内的空白区域该如何处理(即物体有一部分超出 显示界面时)
    • 对于 第二个问题,可用使用 逼近 绘制来解决,即选择有限数量的采样点,使得在纸上的这些标记能够较好地呈现出物体的外形。关于这一部分本书后面会有大量的讨论,具体讨论在这里先咱暂时搁置。
    • 对于 第三个问题,剔除视域(眼睛或相机能看见的那一部分世界)外的采样点,这是图形学中一个常见的操作,可以避免将绘制时间浪费在 视域 之外。该操作成为 裁剪。这里我们会使用一个非常简单的点裁剪版本。
    • 对于 第一个问题,即 可见性问题。 根据 丢勒 所示方法,要确定采样点 P 是否可见,用户只需要将指针定在 P 点,然后观察细线是沿着一条直线直达螺丝钉的孔眼,还是途中遇到鲁特琴的某处或其它物体而产生了弯折。 即,从 鲁特琴上一点出发,向 螺丝钉孔眼(观察者) 方向射出一道射线,如果射线能够直达观察者,途中没有接触其它点,则说明 该出发点对于观察者可见。 这里,我们暂时忽略可见性检测。

  • 实现
    • 设墙上螺丝钉孔眼作为坐标系原点,记为E(作为"视点")。

    • 令绘画的画框,位于 z = 1 平面上,即观察者到画框平面的距离为 一个单位长度

    • 记 画框平面上距离孔眼最近的点为 T;其坐标为 (0, 0, 1)

    • 令 y 轴竖直向上, x 轴沿水平方向

    • 平面画框的范围由角点 ( x m i n y m i n , 1 ) (x_{min} y_{min}, 1) (xminymin,1) ( x m a x , y m a x , 1 ) (x_{max}, y_{max}, 1) (xmax,ymax,1) 定义。这里我们做简化处理,设画框是一个正方形,即长宽相等 x m a x − x m i n = y m a x − y m i n x_{max} - x_{min} = y_{max} - y_{min} xmaxxmin=ymaxymin

    • 画框中画纸的左下角为记为 ( x

课程解决的问题: 作为游戏行业或者图形学从业者,你是否面临以下问题: 到底openGL底层如何实现的? 到底矩阵操作变换是怎么做到的? 到底光栅化的算法以及原理是什么? 到底如何才能从3D世界投射到2D屏幕呢? 图形学有这么多的矩阵操作,到底如何推导如何应用呢? 学完这门课程,你应该就可以从底层了解一个初级的openGL图形接口如何实现,图形学最底层的封装到底面临哪些挑战;跟随我们一行一行写完代码,你就会得到一个迷你版本的openGL图形库,你可以深度体会图形从模型变换,观察矩阵变换,投影矩阵变换一直到光栅化纹理操作的全套模拟流程。 课程介绍: 本课程将带领学员不使用任何图形库,实现从0到1的图形学接口封装以及算法讲解,并且带领大家手敲代码,一行一行进行实现。 涵盖了(环境搭建,绘制点,Bresenham算法绘制完美直线,三角形拆分绘制算法,颜色插值算法,图片操作,图片二次插值放缩算法,纹理系统接口搭建及封装,矩阵操作理论以及实践,openGL类似接口封装,3D世界的图形学理论及接口封装等) 最终将带领大家通过C++实现一个3D世界的图形接口,方便所有人入门图形学,进行接下来的openGL接口以及GPU编程的学习   本课程为系列课程的第一步入门,且带领所有人进行实现,更加实用,可以让大家打牢图形学的基础知识及编程技能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值