摄像机边界控制

综合编程 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 【阅读原文】。感谢您的支持!

您可能感兴趣的

Tor: 1100 relays still run end-of-life tor version... >1100 relays still run end-of-life tor versions nusenu nusenu-...
京东2017校招编程题 集合 【真题】京东2017校招编程题 集合 题目给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。 ...
A brief dive into the Pony programming language A brief dive into the Pony Programming Language Pony is an emerging progr...
Demystifying Floating Point Precision Floating point numbers have limited precision. If you are a game programmer, you...
怎么理解阶次? 声明:本文首发于公众号“模态空间”,未经授权,严禁转载! 在文章《 什么是阶次? 》一文中已经讲解了什么是阶次、为什么要关心阶次、怎么...