计算机图形学 | 裁剪与屏幕映射

news2024/11/14 20:21:31

计算机图形学 | 裁剪与屏幕映射

  • 计算机图形学 | 裁剪与屏幕映射
    • 8.1 裁剪思想
      • 裁剪的概念
      • 编码裁剪法
      • 中点裁剪法
      • Liang-Barsky算法
    • 8.2 真正的裁剪——在三维空间遇见多边形
      • 真正的裁剪
      • 多边形的裁剪
      • Weiler-Atherton算法
      • 三维空间中的裁剪
    • 8.3 几何阶段的完结:屏幕映射
      • 屏幕映射
      • OpenGL的几何阶段实现

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 裁剪与屏幕映射

8.1 裁剪思想

裁剪的概念

观察空间不同,裁剪和屏幕映射的方法不同。

在这里插入图片描述

先在二维空间简化要解决的问题:对直线段p1(x1,y1)p2(x2,y2)进行裁剪。

在这里插入图片描述

裁剪一条直线段:

  1. 判断是否完全落在裁剪窗口内。
  2. 如果没有,再判断是否完全落在裁剪窗口外。
  3. 既不能确定完全落在裁剪窗口内又不能确定完全落在裁剪窗口外,则计算它与一个或多个裁剪边界的交点。

编码裁剪法

Cohen-Sutherland方法:基于编码的裁剪方法,是最早的最流行的二维裁剪方法。

基本思想:对每条直线段p1(x1,y1)p2(x2,y2)分三种情况处理:

  1. 直线段完全可见,“简取”之。
  2. 直线段完全不可见,“简弃”之。
  3. 直线段既不满足“简取”的条件,也不满足“简弃”的条件,需要对直线段按交点进行分段,分段后重复上述处理。

编码:对于任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0

编码规则如下:

  • 若x<wxl,则D0=1,否则D0=0;
  • 若x>wxr,则D1=1,否则D1=0;
  • 若y<wyb,则D2=1,否则D2=0;
  • 若y>wyt,则D3=1,否则D3=0。

在这里插入图片描述

裁剪一条线段时,先求出端点p1和p2的编码code1和code2,然后:

  1. 若code1 | code2 = 0,对直线段应简取之。
  2. 若code1 & code2 ≠ 0,对直线段可简弃之。
  3. 若上述两条件均不成立。则需求出直线段不窗口边界的交点。在交点处把线段一分为二,其中必有一段完全在窗口外,可以弃之。再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。

具体做法:按左、下、右、上的顺序求出直线段与窗口边界的交点,分段处理。

在这里插入图片描述

中点裁剪法

仍然基于Cohen-Sutherland中的区域编码。

基本思想:当对直线段不能简取也不能简弃时,简单地把线段等分为二段,对两段重复上述测试处理,直至每条线段完全在窗口内或完全在窗口外。

具体过程:

在这里插入图片描述

本质:用二分逼近的方法求线段不窗口边界的交点。

在这里插入图片描述

Liang-Barsky算法

将线段看成有方向性:外到内、内到外。

在这里插入图片描述

Liang-Barsky裁剪的思想:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:试用liang-barsky算法裁剪图中的线段AB。

在这里插入图片描述

解:直线段AB的参数方程为:

x=3+u·(-2-3),y=3+u·(-1-3,(0 ≤ u ≤ 1)

即:

x=3-5u,y=3-4u,(0 ≤ u ≤ 1)

这里:wxl=0,wxr=2,wyb=0,wyt=2。

因此:

p1= x1-x2=5>0,q1= x1–wxl=3
p2= x2-x1 =-5<0,q2= wxr –x1=-1
p3= y1-y2 =4>0,q3= y1–wyb=3
p4= y2-y1 =-4<0,q4= wyt –y1=-1

可见P均不为0。

直线段不窗口边界的交点计算如下:
uk·pk=qk,k=1,2,3,4

则u1=0.6, u2=0.2, u3=0.75, u4=0.25。

由于有:p1 、p3大于0,p2、p4小于0

Uone=max(0,uk|pk<0,uk|pk<0)
Utwo=min(1,uk|pk>0,uk|pk>0)

因此:

Uone=max(0,u2,u4)=max(0,0.2,0.25)=0.25
Utwo=min(1, u1,u3)=min(1,0.6,0.75)=0.6

可见Uone<Utwo ,它们分别对应输出直线段的起点和终点。

由于有:x=3-5u,y=3-4u

因此:

Uone对应的交点为I(1.75,2)
Utwo对应的交点为J(0,0.6)
裁剪后输出线段的端点即为I(1.75,2)和J(0,0.6),四舍五入后为I(2,2)和J(0,1)。

8.2 真正的裁剪——在三维空间遇见多边形

真正的裁剪

在这里插入图片描述

在这里插入图片描述

多边形的裁剪

裁剪算法:Sutherland-Hodgeman多边形裁剪

基本思想:将多边形边界作为一个整体,每次用窗口的一个边界对要裁剪的多边形进行裁剪。

顺序:左、下、右、上。

在这里插入图片描述

概念:

在这里插入图片描述

逐边裁剪时遇到的四种情况:

在这里插入图片描述

Sutherland-Hodgeman算法的问题:无法正常操作凹多边形。

例如:下面的v2和v3是错误的裁剪点。

在这里插入图片描述

解决方案:

  • 方案1:将凹多边形分割成两个或更多的凸多边形,然后分别处理各个凸多边形。
  • 方案2:修改Sutherland-Hodgeman算法,沿着任何一个裁剪窗口边界检查顶点表,正确地连接顶点对。
  • 方案3:采用其他多边形裁剪方法,如Weiler-Atherton算法。

Weiler-Atherton算法

假定按顺时针方向处理顶点,且将多边形定义为Ps,窗口矩形为Pw。

算法从Ps的任一点出发,跟踪检测Ps的每一条边。

在这里插入图片描述

Weiler-Atherton算法步骤:

  1. 由不可见侧进入可见侧,则输出可见直线段,转3
  2. 由可见侧进入不可见侧,则从当前交点开始,沿窗口边界顺时针检测Pw的边,找到Ps与Pw最靠近当前交点的另一交点,输出可见直线段和由当前交点到另一交点之间窗口边界上的线段,然后返回处理的当前交点
  3. 沿着Ps处理各条边,直到处理完Ps的每一条边,回到起点为止

示例:

在这里插入图片描述

三维空间中的裁剪

Cohen-Sutherland裁剪的推广。

在这里插入图片描述

在这里插入图片描述

三维形体裁剪问题:Sutherland-Hodgeman算法的推广。

在这里插入图片描述

逐边裁剪多边形:逐边裁剪多边形的每条边
输出:顶点序列构成多边形

逐面逐个裁剪多个多边形:逐面裁剪多边形的每条边
输出:顶点序列,构成多面体

8.3 几何阶段的完结:屏幕映射

屏幕映射

屏幕映射:裁剪空间向屏幕空间的映射。

在这里插入图片描述

过程分析:

在这里插入图片描述

在这里插入图片描述

OpenGL的几何阶段实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

指定裁剪空间:以透视投影为例

glm::mat4 proj =glm::perspective(45.0f, 1.3f, 0.1f, 100.0f);

在观察空间中指定裁剪空间:

  • 第一个参数定义了视野的角度fov
    对于一个真实的观察效果,它的值经常设置为45.0,但想要看到更多结果你可以设置一个更大的值。
  • 第二个参数设置了宽高比,由视口的高除以宽
  • 第三个参数设置了前截面的位置
  • 第四个参数设置了后截面的位置

在这里插入图片描述

在这里插入图片描述

之前的变换基于行矩阵:

在这里插入图片描述

现在在OpenGL中改为列矩阵:

在这里插入图片描述

OpenGL中的PVM观察变换:

gl_Position = projection * view * model * vec4(aPos, 1.0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

API 接口的使用和功能

随着互联网的快速发展&#xff0c;API接口已经成为了现代开发中不可或缺的一部分。API接口可以让你的应用程序与其他应用程序、系统或服务进行数据交流和集成。如果你正在开发应用程序&#xff0c;那么最好的方法就是使用API接口来增强功能和性能。 我们的API接口是为您的应用…

上财黄烨:金融科技人才的吸引与培养

“金融科技企业在吸引人才前&#xff0c;应先完善人才培养机制&#xff0c;建立员工画像&#xff0c;有针对性地培训提高成员综合素质。” ——上海金融智能工程技术研究中心上海财经大学金融科技研究院秘书长&院长助理黄烨老师 01.何为数字人才&#xff1f; 目前大多数研…

什么,你不会Windows本地账户和本地组账户的管理加固?没意思

什么&#xff0c;你不会Windows本地账户和本地组账户的管理加固&#xff1f;没意思 1.图形化界面方式管理用户2.图形化界面方式管理用户组3.命令行界面方式管理用户4.命令行界面方式管理账户组5.账户安全基线加固账户检查口令检查 1.图形化界面方式管理用户 1、打开管理界面 …

运维自动化工具 Ansible的安装部署和常用模块介绍

ansible安装 ansible的安装有很多种方式 官方文档&#xff1a;https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.ht ml https://docs.ansible.com/ansible/latest/installation_guide/index.html 下载 https://releases.ansible.com/ansible…

Java入门全网最详细 - 从入门到转行

Java基础入门 - 坚持 Java 基本介绍Java 学习须知Java 学习文档Java 基础Java Hello WorldJava 变量Java 数据类型Java 运算符Java 修饰符Java 表达式 & 语句 & 代码块Java 注释--------------------------------------------------------------------------Java 控制语…

在vue中引入高德地图

既然要用到高德地图首先要申请成为高德地图开发者&#xff0c;并申请使用高德地图的key这两点在这篇文章就不过多赘述&#xff0c;有需要的小伙伴可以查查资料&#xff0c;或者去高德地图api官网都有很详细的介绍。高德地图官网 简单提一下申请秘钥流程&#xff08;web端&#…

Python入门教程+项目实战-12.2节: 字典的操作方法

目录 12.2.1 字典的常用操作方法 12.2.2 字典的查找 12.2.3 字典的修改 12.2.4 字典的添加 12.2.5 字典的删除 12.2.6 知识要点 12.2.7 系统学习python 12.2.1 字典的常用操作方法 字典类型是一种抽象数据类型&#xff0c;抽象数据类型定义了数据类型的操作方法&#x…

想成为神经网络大师?这些常用算法和框架必须掌握!

神经网络是机器学习和人工智能领域中的一种常用算法&#xff0c;它在图像识别、自然语言处理等方面都有广泛的应用。如果你想入门神经网络&#xff0c;那么这篇文章就是为你准备的。 首先&#xff0c;了解基本概念是入门神经网络的基础。神经元是神经网络的基本组成部分&#x…

AQS底层源码解析

可重入锁 又叫递归锁&#xff0c;同一个线程在外层方法获得锁的时候&#xff0c;再进入该线程内层方法会自动获取锁&#xff0c;&#xff08;前提锁对象是同一个对象&#xff09;。不会因为之前已经获取过还没释放而阻塞。 Synchronized和ReentrantLock都是可重入锁&#xff…

玩游戏时突然弹出”显示器驱动程序已停止响应并且已恢复”怎么办

随着3A游戏大作不断面市&#xff0c;用户也不断地提升着自己的硬件设备。但是硬件更上了&#xff0c;却还会出现一些突如其来的情况&#xff0c;比如正准备开启某款游戏时&#xff0c;电脑右下角突然出现“显示器驱动程序已停止响应并且已恢复”。遇事不慌&#xff0c;驱动人生…

创新指南|5大策略让创新业务扩张最大避免“增长痛苦”

公司在开发和孵化新业务计划方面进行了大量投资&#xff0c;但很少有公司遵循严格的途径来扩大新业务规模。虽然80%的公司声称构思和孵化新企业&#xff0c;但只有16%的公司成功扩大了规模。典型案例是百思买在许多失败倒闭的扩大新业务取得了成功。它经历了建立新业务所需的3个…

如何使用 Python+selenium 进行 web 自动化测试?

使用Pythonselenium进行web自动化测试主要分为以下步骤&#xff1a; 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;共计16条…

VMware ESXi 7.0 U3m macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3m macOS Unlocker & OEM BIOS (标准版和厂商定制版) 提供标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-oem/&#xff0c;查看最新版…

AC/DC、DC/DC转换器

什么是AC&#xff1f; Alternating Current&#xff08;交流&#xff09;的首字母缩写。 AC是大小和极性&#xff08;方向&#xff09;随时间呈周期性变化的电流。 电流极性在1秒内的变化次数被称为频率&#xff0c;以Hz为单位表示。 什么是DC&#xff1f; Direct Current&…

C语言的存储类别,链接和内存管理

目录 1.1作用域 1.2链接 1.3存储期 1.4存储类别 1.4.1自动变量 1.4.2寄存器变量 1.4.3块作用域的静态变量 1.4.4外部链接的静态变量 1.4.5内部链接的静态变量 1.4.6存储类别说明符 1.5动态内存管理 1.5.1出现原因 栈内存 数据段与代码段 堆内存 1.5.2动态内存函…

Flink第二章:基本操作

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作 文章目录 系列文章目录前言一、Source1.读取无界数据流2.读取无界流数据3.从Kafka读取数据 二、Transform1.map(映射)2.filter(过滤)3.flatmap(扁平映射)4.keyBy(按键聚合)5.reduce(归约聚合)6.UDF(用户自定义函数)7.…

4个ChatGPT拓展出来的工具

现在ChatGPT 相关 的方向非常的多&#xff0c;各个大厂一个一个推出了自己的大模型&#xff0c;从国外到国内&#xff0c;ChatGPT 相关 也有几十个&#xff0c;这是大厂的方向。 对于比较小的团队&#xff0c;很多都是在ChatGPT 的基础上进行的开发&#xff0c;下面罗列出4个在…

ASO优化之应用内活动的投放策略

我们可以在“落地页”&#xff0c;“搜索结果页”&#xff0c;“详情页”&#xff0c;“today标签页”等各个版面展示应用的活动投放&#xff0c;这不仅能够快速被用户浏览到&#xff0c;自然能带来更多的流量&#xff0c;还能促进用户的活跃度。 那我们该如何进行投放呢&…

哪一本书让你逢人就推荐的?

小编逢人就推荐的程序员经典书目&#xff1a; 1、【樊登推荐】浪潮之巅 第四版 作者&#xff1a;吴军 这不是一本科技产业发展历史集&#xff0c;而是在这个数字时代&#xff0c;一本IT人非读不可&#xff0c;而非IT人也应该拜读的作品。 《浪潮之巅 第四版》是一本介绍互联…

【算法与数据结构】链表——题目详解

题目详解 Leetcode-206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#x…