摄像机边界控制

综合编程 2015-08-26 阅读原文

由于美术场景有限制,所以需要将摄像机限制在一个如下图所示的凸六面体内:

那八个顶点的位置根据场景不同而不同,限制摄像机位置的关键在于判定摄像机位置是否在六面体内。而剩下的就是几何知识了。

首先要求出6个平面的方程,取一个平面的三个顶点 V1, V2, V3,分别代入平面方程:

aX+ bY + cZ +d = 0 中然后求出:

a = v1.y * v2.z – v1.y * v3.z -v2.y * v1.z + v2.y * v3.z + v3.y * v1.z – v3.y * v2.z;

b = -v1.x * v2.z + v1.x * v3.z + v2.x * v1.z – v2.x * v3.z – v3.x * v1.z + v3.x * v2.z;

c = v1.x * v2.y – v1.x * v3.y – v2.x * v1.y + v2.x * v3.y + v3.x * v1.y – v3.x * v2.y;

d = -v1.x * v2.y * v3.z + v1.x * v3.y * v2.z + v2.x * v1.y * v3.z – v2.x * v3.y * v1.z – v3.x * v1.y * v2.z + v3.x * v2.y * v1.z;

取一个六面体内的点V0,代入方程中,得出:

P0 = a * V0.x + b * V0.y + c * V0.z + d 。

设待验证的摄像机位置为Vx,同样代入,得出:

Px = a * Vx.x + b * Vx.y + c * Vx.z + d 。

然后对比P0和Px的正负号,如果相同,则证明V0和Vx在同侧。

按照以上算法,验证P0和Px是否同时满足在六个面同侧,是,则说明摄像机在六面体内,否则在六面体外。

责编内容by:WantGame 【阅读原文】。感谢您的支持!

您可能感兴趣的

2017ICPC北方邀请赛H题 MJF wants to work(贪心)... 石油大提交网址: http://exam.upc.edu.cn/problem.php?id=4203 4203: MJF wants to work ...
JSoC 2015 project: NullableArrays.jl My project under the 2015Julia Summer of Code program has been to develop the NullableArrays package, which provides th...
USACO注册以及使用 心血来潮准备试试USACO,毕竟别人的OI题,毕竟有专门的翻译以及题解网站,链接在这: 点击打开链接 。。但在A题的过程还是遇到种种种种的麻烦啊!搜也没有什么有效的回复,终于自己琢磨透之后,还是写下这篇文章吧。 ...
Representative Line: The Truth About Comparisons We often point to dates as one of the example data types which is so complicated that most developers can’t understand ...
浮点数在计算机中的存储 浮点数在内存中存储时,就要提到一个关键词 “科学计数法”,float 和 double 的存储方式是一样的,下面用 float 做以解释; 任意一个二进制浮点数 V 可以表示成下面形式: V=(-1)^ S * M *2^ E ...