国产性生交xxxxx免费-国产中文字幕-啊灬啊灬啊灬快灬高潮了,亚洲国产午夜精品理论片在线播放 ,亚洲欧洲日本无在线码,色爽交视频免费观看

鍋爐信息網(wǎng) > 鍋爐知識(shí) > 鍋爐資訊

14 相機(jī)

發(fā)布時(shí)間:

目標(biāo)完善相機(jī)類,支持視野(fov),位置,朝向和散焦模糊。第八版渲染器結(jié)構(gòu)如下:光源:無。場景:地面,一個(gè)漫反射材質(zhì)的球,一個(gè)金屬球,一個(gè)中空玻

目標(biāo)

完善相機(jī)類,支持視野(fov),位置,朝向和散焦模糊。第八版渲染器結(jié)構(gòu)如下:

  • 光源:無。
  • 場景:地面,一個(gè)漫反射材質(zhì)的球,一個(gè)金屬球,一個(gè)中空玻璃球。
  • 攝像機(jī):參數(shù)可調(diào)。
  • 光線:每像素16個(gè)。
  • 渲染算法:光線多次彈射,顏色依據(jù)物體材質(zhì)計(jì)算。
  • 輸出:400 * 225像素的無鋸齒圖像。

數(shù)學(xué)模型

視野

  • 視野指一個(gè)鏡頭能覆蓋的范圍,用角度來表示。
  • 根據(jù)視野和焦距,可以求出視窗大小。

位置和朝向

  • 相機(jī)的位置和朝向決定了如何將相機(jī)坐標(biāo)變換到世界坐標(biāo)系中。
  • 相機(jī)坐標(biāo)系的原點(diǎn)映射到世界坐標(biāo)系的相機(jī)位置(lookfrom)。
  • 相加坐標(biāo)系的z軸映射到-w,也就是lookfrom - lookat
  • x軸映射到u
  • y軸映射到v
  • 一般指定一個(gè)相機(jī)朝上的大概方向vup,然后計(jì)算與wvup所在平面垂直的朝右方向u,再利用wu的叉積求出v

散焦模糊

  • 真實(shí)相機(jī)不是完美的小孔,只能清晰成像景深范圍內(nèi)的物體。
  • 渲染器的鏡頭是完美的小孔,需要模擬鏡頭模糊效果。

計(jì)算模型

  • 添加新參數(shù)到Camera類。
  • 修改坐標(biāo)變換
  • 光線起點(diǎn)做隨機(jī)偏移,模擬焦散。

代碼

camera.rs

  1. 根據(jù)fov和焦距求出視窗尺寸
  2. 求出uvw向量
  3. 將相機(jī)坐標(biāo)系映射到世界坐標(biāo)系下。
  4. 在光圈范圍內(nèi)隨機(jī)一個(gè)發(fā)射點(diǎn),從這里發(fā)射光線到成像平面

use crate::math::random;nuse crate::math::ray;nuse crate::math::vector;npub struct Camera {n origin: vector::Point3,n lower_left_corner_world: vector::Point3,n horizontal: vector::Point3,n vertical: vector::Point3,n u : vector::Point3,n v : vector::Point3,n lens_radius: f64,n}nimpl Camera {n pub fn new(n look_from: vector::Point3,n look_at: vector::Point3,n vup: vector::Dir3,n vfov: f64,n aspect_ratio: f64,n aperture: f64,n focus_dist: f64,n ) -> Camera {n // 1n let theta = vfov * std::f64::consts::PI / 180.0;n let h = (theta * 0.5).tan() * focus_dist;n let viewport_height = 2.0 * h;n let viewport_width = viewport_height * aspect_ratio;n // 2 n let mut w = look_from.clone() - look_at;n w.normalize();n let mut u = vector::Vec3::cross(&vup, &w);n u.normalize();n let v = vector::Vec3::cross(&w, &u);n // 3n let horizontal = u.clone() * viewport_width;n let vertical = v.clone() * viewport_height;n let origin = look_from;n let lower_left_corner_view =n -horizontal.clone() / 2.0 - vertical.clone() / 2.0 - w * focus_dist;n let lower_left_corner_world = origin.clone() + lower_left_corner_view;n Camera {n origin: origin,n lower_left_corner_world: lower_left_corner_world,n horizontal: horizontal,n vertical: vertical,n u : u,n v : v,n lens_radius: aperture / 2.0,n }n }n pub fn get_ray(&self, s: f64, t: f64) -> ray::Ray {n // 4n let rd = Camera::random_in_unit_disk() * self.lens_radius;n let offset = self.u.clone() * rd.x() + self.v.clone() * rd.y();n let p = self.lower_left_corner_world.clone()n + self.horizontal.clone() * sn + self.vertical.clone() * t;n let dir = p - &self.origin - &offset;n ray::Ray::new(self.origin.clone() + offset, dir)n }n fn random_in_unit_disk() -> vector::Vec3 {n loop {n let p = vector::Vec3::new(n random::generate_range(-1.0, 1.0),n random::generate_range(-1.0, 1.0),n 0.0,n );n if p.length_squared() < 1.0 {n return p;n }n }n }n

main.rs

設(shè)置參數(shù)

let look_from = vector::Point3::new(3.0, 3.0, 2.0);n let look_at = vector::Point3::new(0.0, 0.0, -1.0);n let focus_dist = (look_from.clone() - &look_at).length();n let cam = camera::Camera::new(look_from, look_at, vector::Dir3::new(0.0, 1.0, 0.0), 20.0, aspect_ratio, 2.0, focus_dist);n

完整代碼

https://github.com/thomation/rePleuX/releases/tag/v0.0.8

運(yùn)行結(jié)果

挑戰(zhàn)

  • 修改main.rs中的camera參數(shù),觀察運(yùn)行結(jié)果的變化
  • 修改第4章的矩陣,加入相機(jī)的位置和朝向。

延伸閱讀

《Ray Tracing in One Weekend》11

《Ray Tracing in One Weekend》 12

上一篇:14線

下一篇:漂亮的礦物14

精選推薦

  • 如何正確選擇白板供應(yīng)商
    如何正確選擇白板供應(yīng)商

    目前在無錫想采購一塊白板不管是實(shí)體店鋪,還是網(wǎng)絡(luò)平臺(tái)都有很多選擇,想要到專業(yè)的無錫白板公司采購還需要掌握一定的方式技巧。現(xiàn)

  • 柴油發(fā)電機(jī)組供應(yīng)商
    柴油發(fā)電機(jī)組供應(yīng)商

      t 揚(yáng)州華東動(dòng)力機(jī)械有限公司,位于江蘇省揚(yáng)州市江都區(qū)仙城工業(yè)園,是專業(yè)從事發(fā)電機(jī)、柴油及燃?xì)獍l(fā)電機(jī)組研發(fā)、制造、銷售、服務(wù)于

  • 高溫輻射爐
    高溫輻射爐

    5.2.2高溫輻射爐5.2.2.1溫度控制★(1)樣品溫度范圍:常溫~1400℃。★(2)均溫區(qū):長度不小于80mm。★(3)中心區(qū):長度不小于10mm。(4)溫度梯度(均

  • 高壓鍋在什么情況下會(huì)爆炸?
    高壓鍋在什么情況下會(huì)爆炸?

    近日,多地發(fā)生高壓鍋爆炸事故,給不少家庭帶來了傷害和財(cái)產(chǎn)損失。那么,什么情況下會(huì)導(dǎo)致高壓鍋爆炸呢?首先,當(dāng)高壓鍋內(nèi)部壓力過高時(shí),如果

0