Chapter10:Positionable camera

Posted 图样司

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chapter10:Positionable camera相关的知识,希望对你有一定的参考价值。

 

相机如同电解质,是调试的痛,所以我(在开发中)总是逐步拓展它,首先,让我们来看一个可调节的视场(fov)。 这是您通过门户看到的角度。 由于我们的图像不是方形的,因此fov在水平和垂直方向都不相同。 我总是使用垂直fov。 我通常也会用度数来指定它,并在构造函数中改为弧度 - 这是个人品味的问题。我首先保持来自原点并射向z = -1平面光线。 只要我们把h作为一个比例,就可以使它成为z = -2平面,或者其他什么。 这是我们的设置:

这意味着h = tan(theta/2).。我们的摄像机现在变成:

cam(90, float(nx)/float(ny))

为了得到一个任意的观点,让我们先说出我们需要注意的地方。 我们称之为放置相机的位置,以及我们所看到的点。 (后期,如果你愿意,你可以定义一个方向来看看,而不是看点。)我们也需要一种方法来指定相机的方向或侧向倾斜; 围绕从轴看的外观旋转。 另一种思考方式是,即使你保持目光不断,看着不变,你仍然可以旋转头部。 我们需要的是一种为相机指定向上矢量的方法。 注意,我们已经有了一个向上向量应该在的平面,即与视图方向垂直的平面。(即第一人称视角变化?)

我们实际上可以使用任何我们想要的向上矢量,并将其投影到这个平面上以获得相机的向上矢量。 我使用命名“查看”(v向上)向量的通用约定。 一些交叉产品,我们现在有一个完整的标准正交基(u,v,w)来描述我们的相机的方向。

记住vup,v和w都在同一个平面上。 请注意,和以前一样,当我们的固定摄像机面对-Z时,我们的任意摄像机面向-w。 请记住,我们可以,但我们没有使用世界(0,1,0)来指定vup。 这很方便,自然会让你的相机保持水平,除非你决定尝试疯狂的相机角度。

class camera:
    def __init__(self,lookfrom,lookat,vup,vfov,aspect):
        u=vec3(0,0,0)
        v=vec3(0,0,0)
        w=vec3(0,0,0)
        theta=vfov*pi/180
        half_height=tan(theta/2)
        half_width=aspect*half_height
        self.origin=lookfrom
        w=(lookfrom-lookat).unit_vector()
        u=vup.cross(w).unit_vector()
        v=w.cross(u)
        self.lower_left_corner=self.origin-half_width*u-half_height*v-w
        self.horizontal=2*half_width*u
        self.vertical=2*half_height*v

 

以上是关于Chapter10:Positionable camera的主要内容,如果未能解决你的问题,请参考以下文章

解决问题:CA_ERROR证书出错,请登录微信支付商户平台下载证书-企业付款到零钱接口(原创)

Multi-armed Bandit Problem与增强学习的联系

《Dive into Python》Chapter 2 and Chapter 3 笔记

20170608-chapter 6-《pride and prejudice 傲慢与偏见》精读

Pandas 【Chapter 4】

ST_chapter3