DEBC为视锥裁剪体,DE是视锥体近裁剪面(OpenGL中也就是屏幕所在平面),BC是视锥体远裁剪面,FG是位于视锥体内的某一物体,相机视角fov为角BAC,则有Fj表示物体FG的包围球半径radius,Aj表示视点到物体中心点的距离distance。则有如下公式推导
令
相
机
位
于
位
置
A
,
相
机
视
角
f
o
v
=
∠
B
A
C
,
屏
幕
D
E
高
度
为
h
e
i
g
h
t
,
模
型
F
G
的
包
围
球
半
径
F
j
为
r
a
d
i
u
s
相
机
位
置
A
到
模
型
F
G
中
心
点
j
的
距
离
A
j
为
d
i
s
t
a
n
c
e
相
机
看
模
型
F
G
包
围
球
的
角
度
为
∠
F
A
G
=
2
∠
F
A
j
=
2
α
则
有
α
=
arctan
r
a
d
i
u
s
d
i
s
t
a
n
c
e
,
根
据
相
机
视
角
f
o
v
以
及
屏
幕
像
素
,
可
以
得
到
单
位
视
角
所
占
的
屏
幕
像
素
,
用
f
表
示
f
=
h
e
i
g
h
t
f
o
v
,
就
可
以
推
导
出
模
型
包
围
球
的
所
占
屏
幕
像
素
:
p
i
x
e
l
=
f
×
2
α
令相机位于位置A, 相机视角fov=\angle BAC,\\ 屏幕DE高度为height,\\ 模型FG的包围球半径Fj为radius \\ 相机位置A到模型FG中心点j的距离Aj为distance \\ 相机看模型FG包围球的角度为\angle FAG = 2\angle FAj = 2\alpha \\ 则有 \alpha = \arctan\frac{radius}{distance},\\ 根据相机视角fov以及屏幕像素,可以得到单位视角所占的屏幕像素,用f表示\\ f = \frac{height}{fov},\\ 就可以推导出模型包围球的所占屏幕像素:\\ pixel =f \times 2\alpha
令相机位于位置A,相机视角fov=∠BAC,屏幕DE高度为height,模型FG的包围球半径Fj为radius相机位置A到模型FG中心点j的距离Aj为distance相机看模型FG包围球的角度为∠FAG=2∠FAj=2α则有α=arctandistanceradius,根据相机视角fov以及屏幕像素,可以得到单位视角所占的屏幕像素,用f表示f=fovheight,就可以推导出模型包围球的所占屏幕像素:pixel=f×2α
OpenGL三维空间中视距与屏幕像素换算公式
最新推荐文章于 2024-06-04 11:23:36 发布