透视校正插值(Perspective-Correct Interpolation)
在渲染器光栅化每个三角形的过程中,需要对根据顶点属性对三角形进行扫描线插值。此时由于投影面上顶点的2D坐标与顶点属性不成线性关系,因此是不能简单地使用线性插值来计算顶点属性的。
此时应当利用透视校正插值(Perspective-Correct Interpolation)来计算。
设3D空间中存在一条线段,它的两个端点为A和B,3D坐标分别为(x1,y1,z1)和(x2,y2,z2)。这两点投影到camera坐标系投影面的两点为a(p1,q1)、b(p2,q2)。那么:
设该线段之间存在一个三维点C(投影到2D平面时我们用小写c表示),它的三维和二维坐标分别为(x3,y3,z3)、(p3,q3),
c=(1-t)a+tb。则可以证明
1/z3=(1-t)*(1/z1)+t*(1/z2) (1)
因为在网格模型中顶点属性与顶点的坐标值成线性关系,因此可以利用求出的z值来计算相应的顶点属性。
举个例子,假设我们已知3D空间的两个端点A和B,要求出该线段投影到视平面上2D线段的中点所对应的3D坐标。可以先利用公式(1)推导出该点的z坐标(t已知为1/2),
然后接下来有两种方法:
1、计算t1=(z3-z1)/(z2-z1),然后可以得到x3=t1*(x2-x1)+x1,y3以此类推。
2、根据x3/z3=t*x2/z2+(1-t)*x1/z1得到x3,y3同理。
这两种方法经我推导证明得到的结果是一样的。
具体的推导可以件这两篇博客:
http://blog.csdn.net/popy007/article/details/5556639
http://blog.csdn.net/popy007/article/details/5570803
透视校正插值(Perspective-Correct Interpolation)的更多相关文章
- 三次样条插值 cubic spline interpolation
什么是三次样条插值 插值(interpolation)是在已知部分数据节点(knots)的情况下,求解经过这些已知点的曲线, 然后根据得到的曲线进行未知位置点函数值预测的方法(未知点在上述已知点自变量 ...
- uniapp属性插值报错Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead.
解决方法: 因为vue 2.x不支持对属性使用插值{{}}的方式赋值,所以要使用v-bind指令(或简写“:”)来指定属性. v-bind指令 v-bind:id="item.id" ...
- 平滑算法:三次样条插值(Cubic Spline Interpolation)
https://blog.csdn.net/left_la/article/details/6347373 感谢强大的google翻译. 我从中认识到了航位推算dead reckoning,立方体样条 ...
- Direct3D11学习:(六)渲染管线
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 这篇文章主要讲解渲染管线(rendering pipeline)的理论知识. 渲染管线是指:在给定一个3D场景的 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线 学习目标 了解几个用以表达真实场景的标志和2D图像 ...
- 可编程渲染管线(Scriptable Render Pipeline, SRP)
原文链接 可编程渲染管线处理数据的流程可分为以下3大阶段 1. 应用阶段 这个阶段大概会由CPU处理4件事情.首先会对模型数据进行可见性判断.模型数据由顶点位置.法线方向.顶点颜色.纹理坐标等构成.然 ...
- Soft Renderer的乐趣
最近这一个月的闲暇时间在边学习<3D编程大师技巧>边做自己的Soft Renderer,一个月下来总算有了个“基本原型”的样子.主要是在编写图形管线的过程式代码,简单明了为第一个阶段的目标 ...
- Unity Shader入门精要学习笔记 - 第4章 学习 Shader 所需的数学基础
摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐 ...
- DirectX12 3D 游戏开发与实战第五章内容
渲染流水线 学习目标: 了解用于在2D图像中表现出场景立体感和空间深度感等真实效果的关键因素 探索如何用Direct3D表示3D对象 学习如何建立虚拟摄像机 理解渲染流水线,根据给定的3D场景的几何描 ...
随机推荐
- SQLite常用命令
1.点命令 [退出SQLite提示符] .quit .exit [帮助] .help [显示设置] .show 2.语法 [结束符] : --一行语句的结束以分号(:)结尾 [CREATE TABLE ...
- AngularJs的UI组件ui-Bootstrap分享(三)——Accordion
Accordion手风琴控件使用uib-accordion和uib-accordion-group指令. <script> angular.module('myApp', ['ui.boo ...
- js禁用回退键backspace解决办法
本文摘自http://q821424508.iteye.com/blog/1587025 以下为2.0版本,支持IE,firefox,chrome[这三款浏览器经过测试]等浏览器 window.onl ...
- Java的内部类
Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...
- shell多行注释
:<<BLOCK ....被注释的多行内容 BLOCK :<< 'BLOCK ....被注释的多行内容 BLOCK'
- JS 信息提示弹框封装
// 功能提示弹框 function tipsBox ( option ) { var html = ''; if ( option.type == 'success' ) { html += '&l ...
- 分析器错误 MvcApplication 找不到
<%@ Application Codebehind="Global.asax.cs" Inherits="test.MvcApplication" La ...
- oracle查看当前用户权限
查看用户和默认表空间的关系select username,default_tablespace from dba_users;--查看当前用户能访问的表select * from user_table ...
- json全套
JS文件 function pager1_InitData() { //基础配置 $("#pager1").myPagination({ currPage: 1, pageCoun ...
- [Algorithm Basics] Search
1, Binary Search On sorted array! public static int binarySearch(int e, int[] array, int low, int hi ...