热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

图形学笔记三角形光栅化

图形学笔记-三角形光栅化定义视口变换为什么是三角形?判断一个像素中心是否在三角形内?定义光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。光栅化其

图形学笔记-三角形光栅化

  • 定义
  • 视口变换
  • 为什么是三角形?
  • 判断一个像素中心是否在三角形内?
定义

光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。
光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。
把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程。
直观的理解光栅化就是把物体画在屏幕上的过程。
光栅化发生在光栅阶段。在几何阶段完成后就进入光栅阶段,它实现图形对象的扫描转换。即根据几何阶段输出的顶点、颜色和纹理坐标,计算出屏幕上每个像素的颜色属性并存入帧缓冲存储器(颜色缓冲存储器)。
光栅化阶段还实现可见性判断,即在颜色缓冲存储器中保留可见的图形图像,这一过程通过深度缓冲存储器来实现。深度缓冲存储器的大小和形状与颜色缓冲存储器一致,其中保存着屏幕上每个像素的一个深度值(z值)。高效的图形系统中,光栅阶段必须在硬件中完成。
屏幕是典型的光栅成像设备、LCD(液晶显示屏)。

视口变换

在经过几何阶段的投影变换,把透视投影的椎体挤压成空间中的正方体,即把远平面和中间的部分挤成近平面的大小,在做一次正交投影,如下。
《图形学笔记-三角形光栅化》
之后在光栅化中要做的就是视口变换,即从[-1,1]的三次方的立方体到屏幕之间的变换。
对于一个像素可以简单的想象成为一个小的正方形,在这个正方形内的颜色是一样的,正方形的长为1,那么像素中心的位置就在(x+0.5,y+0.5)的位置上。屏幕的坐标范围为(0,0) to (width,higth)。
变换矩阵Mviewport应满足(-1,-1,0,0)* Mviewport=(0,0,0,0)
和(1,1,0,0)* Mviewport=(width,higth,0,0)。得出视口变换矩阵为:
《图形学笔记-三角形光栅化》

为什么是三角形?

三角形是最基础的多边形、任何多边形都可以拆成三角形、三角形内部一定是平面、定义三角形三个顶点的属性三角形内可以使渐变的即插值。

判断一个像素中心是否在三角形内?

使用右手定则,即为叉乘。对于右手坐标系,x叉乘y得到的结果为+z。右手四指从x方向旋转到y,拇指的方向就是z方向。下面使用叉积判断内和外。
如下图判断Q点在不在三角形内。
《图形学笔记-三角形光栅化》
只有当 P1P2×P1Q 和 P2P0×P2Q 和P0P1×P0Q 的结果方向一样才能说明这个点在三角形内部。否则其他情况都是在三角形外部。对于边界点可以自己定义。


推荐阅读
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 默认情况下,Java 的克隆机制是浅克隆,即仅复制对象本身而不复制其内部引用的对象。本文将详细介绍如何通过深度克隆来确保对象及其内部引用的对象都能被正确复制。 ... [详细]
  • 深入解析RelativeLayout、LinearLayout与FrameLayout的性能差异
    本文详细分析了FrameLayout和LinearLayout的性能对比,通过具体的测量数据和源码解析,探讨了不同布局在不同场景下的性能表现。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
author-avatar
紫百合1990_950
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有