图形学复习3——观察和裁剪

图形学复习


CH5 二维观察

5.1 窗口、视口和二维观察流水线

窗口是指世界坐标系中要显式的区域称,窗口定义了显式的内容

视口是指窗口映射到显示器的区域,视口定义了在什么位置显示

通常将世界坐标系中一部分区域映射到设备坐标系的操作称为观察变换,二维观察变换流水线如下:

模型局部坐标→ 世界坐标 → 观察坐标 -(通过窗口视口描述)→ 规范化观察坐标 → 设备坐标

5.2 裁剪窗口到规范化视口的映射

通常所说的裁剪窗口就是窗口,即世界坐标系中要显示的区域,我们可以选择裁剪窗口的不同形状、大小以及方向来确定裁剪效果,也可以自己实现裁剪算法和变换算法获取特殊形状的裁剪窗口

大多数图形系统将规范化和窗口-视口转换合成一步,先让视口坐标在[0,1]范围内(即让视口位于单位坐标系内),裁剪后将包含视口的单位正方形(规范化视口)映射到输出设备

设窗口内点(xw,yw)映射到视口内点(xv,yv):

![p2](./p2.png =480x)

为了保持视口和窗口中对象相对位置相同,必须满足等比例条件,求解出视口坐标为:

xv=sx?xw+txyv=sy?yw+ty

其中系数为:

sx=xvmax?xvminxwmax?xwminsy=yvmax?yvminywmax?ywmintx=xwmaxxvmin?xwminxvmaxxwmax?xwminty=ywmaxyvmin?ywminyvmaxywmax?ywmin

不难发现,规范化变换的复合变换矩阵为M=????????sx000sy0txty1????????

5.3 裁剪算法

识别指定区域内或区域外图形部分的过程称为裁剪,裁剪策略包括:

  • 先裁剪后扫描转换
  • 边扫描转换边裁剪

二维裁剪就是判断图形的点P(x,y)是否满足xwmin≤x≤xwmaxxwmax,ywmin≤y≤ywmax

二维裁剪包括了以下几个方面:

  • 线段裁剪
  • 多边形填充区裁剪
  • 曲线裁剪
  • 文字裁剪

裁剪算法有很多种(具体略),多数都是按照裁剪策略中的两种策略:

  1. 按裁剪窗口的四条边依次裁剪,裁剪四次后的到窗口内图形
  2. 沿图形边界扫描(按一定方向),保留在裁剪窗口内的点

CH6 三维观察

6.1 三维观察流水线

三维观察和二维类似,都需要裁剪并且流水线基本相同,但不同点在于:

  • 投影:视口/设备屏幕总是二维的,总要把三维图形投影到二维平面中显示
  • 识别可见部分:三维图形存在被遮挡部分,投影过程中被遮挡部分不被显示
  • 光照:三维渲染效果

三维观察流水线如下:

模型局部坐标 -[建模变换]→ 世界坐标 -[观察变换]→ 观察坐标 -[投影变换]→ 投影坐标 -[规范化和窗口裁剪]→ 规范化观察坐标 -[视口变换]→ 设备坐标

定义观察点P0(x0,y0,z0)为三维观察的位置,也叫视点照相机位置,投影平面又叫观察平面

选定观察物体上一点Pref作为观察参考点,那么观察平面法向量N=P0?Pref

6.2 投影变换

投影变换就是将维数为n的点变换成维数小于n的点,常见的投影有:

  • 平行投影(包括正投影、斜投影):平行线投影
  • 透视投影:汇聚线投影

(1)正投影

正投影投影线垂直于投影平面(即观察平面)的平行投影

正投影裁剪窗口限制了观察坐标系中的x和y的限制,再定义两个近-远裁剪平面构成一个封闭的裁剪体,叫做正投影观察体

注意,投影过程中保留坐标的Z分量,用于可见性检查

下面是从正投影观察体[(xwmin,ywmin,znear)→(xwmax,ywmax,zfar)]到规范化观察体[(?1,?1,?1)→(1,1,1)]的规范化变换矩阵:

M=??????????????2xwmax?xwmin00002ywmax?ywmin0000?2znear?zfar0?xwmax+xwminxwmax?xwmin?ywmax+ywminywmax?ywminznear+zfarznear?zfar1??????????????

(2)斜投影

斜投影是投影路径与观察平面不垂直的平行投影,斜投影投影坐标为:

xp=x+Lcos?yp=y+Lsin?

(3)透视投影

记透视投影的汇聚点为投影参考点(xprp,yprp,zprp),则可以推出观察坐标系内点(x,y,z)在观察平面内坐标为:

xp=x(zprp?zvpzprp?z)+xprp(zvp?zzprp?z)yp=y(zprp?zvpzprp?z)+yprp(zvp?zzprp?z)

其中zvp是在观察平面上选择的位于zview轴上的点

时间: 2024-11-03 23:57:19

图形学复习3——观察和裁剪的相关文章

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

图形学复习

交互式计算机图形学(第五版)1-7章课后题答案 计算机图形学基础答案全 计算机图形学考试重点计算题 What is the difference between Gouraud and Phong shading? Gouraud shading (AKA Smooth Shading) is a per-vertex color computation. What this means is that the vertex shader must determine a color for e

图形学复习1——图形学图形系统概述与对象表示

图形学复习 CH1 图形学概述 1.1 图形学 计算机图形学是研究图形的输入.模型的构造和表示.图形数据库管理.图形的操作以及以图形为媒介的人机交互的方法和应用的一门综合性学科 其最主要的任务是:研究如何用数据模型生成数字图像,具体来说有以下几个方面: 图形建模 几何处理 光栅化 片元处理 等等 计算机图形一般有两种表示方法: 图像:枚举图形中所有的点构成的2维点阵 图形:用图形的形状参数(参数方程.端点坐标等)和属性参数(颜色.线形等)来表示的参数模型 图形学中主要用后者表示计算机图形 CH2

图形学复习4——光栅化(画线画圆扫描线反走样算法)

图形学复习 CH7 光栅化 前几章介绍了几何处理和裁剪变换,接下来的步骤就是光栅化 光栅化是将形式表示的几何图元转换为阵列表示的数据片元的过程,片元中每一个像素对应帧缓冲区中的每一个像素 7.1 线段生成算法 (1)DDA画线算法 设直线表达式为y=mx+b,输入直线两端点坐标(x0,y0)和(xend,yend),可以计算出m=yend?y0xend?x0和b=y0?m?x0 DAA是基于微分运算的线段生成算法,其主要计算式便是δy=mδx: 若|m|≤1则x方向的变化大于y方向的变化,以x方

图形学复习2——几何变换

图形学复习 CH4 几何变换 4.1 基本二维变换 平移.旋转和缩放是常见的基本二维变换 (1)二维平移 将二维平面上点P=????xy????平移到P′=????x′y′????=?????x+txy+ty?????,则称T=?????txty?????为平移向量 那么有平移方程: P′=P+T (2)二维旋转 将二维平面上点P=????xy????绕原点旋转逆时针旋转θ角得到坐标P′=????x′y′????=????xcosθ?ysinθxsinθ+ycosθ????,则称R=????co

图像处理复习1——图像基础和空域增强

图像处理复习 CH2 图像基础 2.1 噪声 噪声定义为妨碍人们感觉器官对所接收的信源信息理解的因素,噪声有以下几个常见分类: (1)按统计理论分类 平稳噪声:统计特性不随时间变化 非平稳噪声:统计特性随时间变化 (2)按频谱形状分类 白噪声:频谱均匀分布 三角噪声:频谱与频率平方成正比 (3)按幅度分布形状分类:高斯噪声.雷利噪声 (4)按噪声与信号关系分类:加性噪声.乘性噪声 处理噪声时往往假设噪声是加性噪声并且噪声和信号是相互统计独立的 2.2 成像基础模型 假设投影成像有以下模型: 则由

canvas高效绘制10万图形,你必须知道的高效绘制技巧

最近的一个客户项目中,简化的需求是绘制按照行列绘制很多个圆圈.需求看起来不难,上手就可以做,写两个for循环. 原始绘制方法 首先定义了很多Circle对象,在遍历循环中调用该对象的draw方法.代码如下: for (var i = 0; i < column; i++) { for (var j = 0; j < row; j++) { var circle = new Circle({ x: 8 * i + 3, y: 8 * j + 3, radius: 3 }) box.push(ci

[计算机图形学 with OpenGL] Chapter8 习题8.6 线段旋转后使用Cohen-Sutherland算法裁剪

习题8.6 生成一条比观察窗口对角线还长的线段动画,线段重点位于观察窗口中心,每一帧的线段在上一帧基础上顺时针旋转一点,旋转后用Cohen-Sutherland线段裁剪算法进行裁剪. 步骤: 1 视口范围:(-100, -100)到(100, 100): 2 裁剪窗口区域:winMin(-50, -50) 到 winMax(50, 50),原始端点:p0(-100, 0)到 p1(100, 0) 3 使用Bresenham算法画原始线段,使用Cohen-Sutherland算法画裁剪线段: 4

[计算机图形学 with OpenGL] Chapter10 OpenGL三维观察程序示例

10.10节书中给出了一个程序示例,有一个填充正方形,从侧面的角度观察并画到屏幕上. 图0 这里进一步画出一个立方体,将相机放入立方体中心,旋转相机,达到在立方体中旋转看到不同画面的效果. 步骤: 1 使用的是4.9节中的OpenGL顶点数组方法.创建一个立方体100*100*100,坐标范围(0, 0, 0)到(100, 100, 100). 2 立方体各面使用不同的颜色,调整顶点顺序以确保相机看到的都是填充面而不是线框图. 3 将投影观察点(即观察系原点)设置在矩形中心P0 = (50, 5