<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【Ray Tracing The Next Week 超詳解】 光線追蹤2-3

       

       Preface

      終于到了激動人心的紋理章節(jié)了

      然鵝,看了下,并不激動

      因為我們之前就接觸過

      當(dāng)初有一個 attenuation 嗎?

       

      對了,這就是我們的rgb分量過濾器,我們畫出的紅色、藍(lán)色、綠色等等,都是通過它來控制的

      專業(yè)點(diǎn)的詞語叫做rgb衰減比例,比如rtvec(1.,0.,0.),最后呈現(xiàn)出來的是紅色,因為r保留了100%

      它是怎么控制的呢,我們來回顧一下這個過程

      首先,我們創(chuàng)建一個材質(zhì)球

      后面那個rtvec(0.4,0.2,0.1)就是衰減比例(衰減到原來的百分之。。)

      之后

       

      進(jìn)入數(shù)據(jù)成員中,之后主函數(shù)調(diào)用lerp的時候

      info.materialp->scatter(sight, info, attenuation, scattered))

      球體的材質(zhì)調(diào)用scatter函數(shù)

      即:

      沒有絲毫改動地有數(shù)據(jù)成員傳遞到了attenuation 中

      然后用attenuation 做乘法進(jìn)行rgb衰減,遞歸就不用說了吧,最后遞歸到深處為黑色,不然為背景色

       

      為什么要在前言將這個東東,因為

      attenuation 所控制形成的物體表面顏色就是最簡單的紋理

       

      說白了這章比較簡單,因為下一章是這本書的另外一個高難度章節(jié)(分別分布于第二章和第四章) 

      所以,中間第三章來點(diǎn)簡單好玩的,過渡一下

       

       先看效果

       

      Chapter 3:Solid Textures

       

      廢話不多說,先寫一個紋理類

      /// texture.hpp
      
      // -----------------------------------------------------
      // [author]        lv
      // [begin ]        2019.1
      // [brief ]        the texture-class for the ray-tracing project
      //                from the 《ray tracing the next week》
      
      #pragma once
      
      namespace rt
      {
      
      class texture
          {
      public:
          
          virtual rtvec value(rtvar u, rtvar v, const rtvec& p)const = 0;
          
          };
      
      }

      u 和 v后面用到再講,p就是衰減向量

      然后寫一個常量紋理(基礎(chǔ)紋理)

      /// constant_tex.hpp
      
      // -----------------------------------------------------
      // [author]        lv
      // [begin ]        2019.1
      // [brief ]        the constant_texture-class for the ray-tracing project
      //                from the 《ray tracing the next week》
      // -----------------------------------------------------
      
      #pragma once
      
      
      namespace rt
      {
          
      class constant_texture :public texture
          {
          public:
      
              constant_texture() {  }
      
              constant_texture(const rtvec& color);
      
              virtual rtvec value(rtvar u, rtvar v, const rtvec& p)const override;
      
          public:
      
              inline const rtvec& color()const { return _color; }
      
          private:
      
              rtvec _color;
      
          };
      
      
      
      inline constant_texture::constant_texture(const rtvec& color)
          :_color(color)
          {
          }
      
      rtvec constant_texture::value(rtvar u, rtvar v, const rtvec& p)const
          {
          return _color;
          }
      
      }

       

      之后,我們把材質(zhì)中的rtvec向量改為紋理指針

      /// diffuse.hpp
      // http://www.rzrgm.cn/lv-anchoret/p/10198423.html
      
      // -----------------------------------------------------
      // [author]        lv
      // [begin ]        2018.12
      // [brief ]        one of the materials
      // -----------------------------------------------------
      
      #pragma once
      

      namespace rt { class texture; //diffuse material class lambertian : public material { public: lambertian(texture* _tex); virtual bool scatter(const ray& rIn, const hitInfo& info, rtvec& attenuation, ray& scattered)const override; protected: texture* _albedo; }; inline lambertian::lambertian(texture* _tex) :_albedo(_tex) { } bool lambertian::scatter(const ray& rIn, const hitInfo& info, rtvec& attenuation, ray& scattered)const { rtvec target = info._p + info._n + lvgm::random_unit_sphere(); scattered = ray{ info._p, target - info._p }; attenuation = _albedo->value(0.,0.,info._p); return true; } }

       

       之前我們創(chuàng)建的材質(zhì)球代碼就要改一種風(fēng)格了

       

      把其他的材質(zhì)類也做相應(yīng)的改動

       

      我們今天最重要的是弄棋盤(checkerboard)紋理

      棋盤紋理就是交錯的雙色格子,呈現(xiàn)一定的規(guī)律性

      所以我們想象一下利用某些映射函數(shù)來實現(xiàn)這種類似二值性,且呈現(xiàn)周期性

      我們比較容易想到利用正余弦函數(shù),呈現(xiàn)周期性,且值域為【-1,1】是個有界函數(shù)

      如何體現(xiàn)二值呢,正負(fù)嘛,正余弦函數(shù)一定關(guān)于x軸對稱

      如何將物體表面和正余弦函數(shù)聯(lián)系在一起形成雙色交錯的格子呢

      我們采用每個點(diǎn)在3D空間中的位置來將兩者聯(lián)系在一起

      綜上,如果我們在所有三個維度中相乘某個正余弦函數(shù),那么該公式的符號形成一個棋盤形式

      即:rtvar sines = sin(10 * p.x()) * sin(10 * p.y()) * sin(10 * p.z());

       

      當(dāng)然,你也可以試一下sgnx函數(shù),設(shè)置一個相關(guān)的判別式

       

      /// checker_tex.hpp
      
      // -----------------------------------------------------
      // [author]        lv
      // [begin ]        2019.1
      // [brief ]        the checker_texture-class for the ray-tracing project
      //                from the 《ray tracing the next week》
      // -----------------------------------------------------
      
      
      #pragma once
      
      
      namespace rt
      {
      
      class checker_texture :public texture
          {
          public:
              checker_texture() {  }
      
              checker_texture(texture* t1, texture* t2);
      
              virtual rtvec value(rtvar u, rtvar v, const rtvec& p)const override;
      
          private:
      
              texture* _even;
      
              texture* _odd;
      
          };
      
      
      
      inline checker_texture::checker_texture(texture * t1, texture * t2)
              :_even(t1)
              , _odd(t2)
          {
          }
      
      rtvec checker_texture::value(rtvar u, rtvar v, const rtvec& p)const
          {
          rtvar sines = sin(30 * p.x()) * sin(30 * p.y()) * sin(30 * p.z());
          if (sines < 0)
              return _odd->value(u, v, p);
          else
              return _even->value(u, v, p);
          }
      
      }

       

      我們把大球設(shè)置為棋盤紋理

       

      就是開篇圖

       

      然后,我把判別式中的10改成了30依舊是原圖

      10(左)30(右)

       

      y = sin(wx + φ)

      你可以嘗試改動一下φ參數(shù)試一下

       

      補(bǔ)充:

      使用

      使得紋理向屏幕左部偏移了一段距離

       

       

      下面是另外一個圖:

      隨機(jī)球體生成函數(shù)改成

       

      相機(jī)參數(shù)依舊是之前的

       

       會得到這樣一個圖

       

       

       

       感謝您的閱讀,生活愉快~

       

      posted @ 2019-01-17 23:27  林-兮  閱讀(1550)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 真人性囗交视频| 国内精品大秀视频日韩精品| 日韩精品一区二区三区在| 精品一卡2卡三卡4卡乱码精品视频| 亚洲福利精品一区二区三区| 高清中文字幕国产精品| 精品综合一区二区三区四区| 中文字幕亚洲一区二区va在线| 99RE6在线观看国产精品| 东京热一精品无码av| 亚洲国产美女精品久久久| 粉嫩av国产一区二区三区| 免费一本色道久久一区| 九九热在线观看精品视频| 国产伦一区二区三区精品| JIZZJIZZ国产| 国产成人无码A区在线观看视频 | 国产边打电话边被躁视频| 亚洲国产精品色一区二区| 精品亚洲国产成人性色av| 国产不卡一区二区四区| 西西人体44www大胆无码| 2020国产欧洲精品网站| 欧美福利电影A在线播放| 在线观看成人av天堂不卡| 国产精品午夜福利视频| 麻豆蜜桃伦理一区二区三区 | 国产成人免费午夜在线观看| 国产微拍一区二区三区四区| 国产一区二区三区精美视频| 少妇性l交大片| 人妻无码久久精品| 久9视频这里只有精品试看| 亚洲午夜香蕉久久精品| 国产最新AV在线播放不卡| 无码人妻精品一区二区三区夜夜嗨| 噜噜综合亚洲av中文无码| 4虎四虎永久在线精品免费| 中文字幕日韩精品亚洲一区| 人人人澡人人肉久久精品| 天天躁久久躁日日躁|