日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

povray[1] = 天空

發(fā)布時間:2024/1/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 povray[1] = 天空 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在「第一幅畫」中,繪制了一個黃顏色的球體。現(xiàn)在將這個球體的顏色換成天藍(lán)色:

sphere {<0, 1, 2>, 2texture {pigment { color rgb<0.1, 0.25, 0.75> }} }

于是,它就變成了天藍(lán)色的球體:

由于光源位于球體的右上方,所以球體的左下側(cè)表面出現(xiàn)了陰影。然而現(xiàn)實中,天空是沒有陰影的。要消除球體上的陰影,需要將其表面設(shè)置為不散射來自光源的光:

sphere {<0, 1, 2>, 2texture {pigment {color rgb <0.1, 0.25, 0.75>}finish {diffuse 0}} }

結(jié)果這個球體失去了三維感,并且變得很暗:

要讓這個球體在保持現(xiàn)在的狀態(tài)下恢復(fù)它的三維感,需要建立參照物,譬如一張漫無邊際的穿過球體的平面:

plane {y, 0texture {pigment {checker color Red, color Blue}} }

這個平面垂直于 y 方向并穿過原點:

恢復(fù)這個球體三維感的不止是這個平面,球體在這個平面上的影子也起了很重要的作用。

現(xiàn)在,再來考慮怎樣讓這個球體變的亮一些。由于它不散射來自光源的光,那讓它變亮,就只有增強環(huán)境光。舉個例子,房間外面陽光明媚,但是房間內(nèi)的物體卻沒有散射陽光。我們之所以能看見這些物體,是因為環(huán)境光的作用。下面的代碼為球體增加了很強的環(huán)境光:

sphere {<0, 1, 2>, 2texture {pigment {color rgb <0.1, 0.25, 0.75>}finish {ambient <1, 1, 1> diffuse 0}} }

于是,它就亮了,呈現(xiàn)出了萬里無云的天空的顏色:

萬里無云,太夸張了,這個球體的半徑只是 2 而已。那么就將它放大 5000 倍吧,并且讓它的中心與坐標(biāo)系原點重合:

sphere {<0, 0, 0>, 5000texture {pigment {color rgb <0.1, 0.25, 0.75>}finish {ambient <1, 1, 1> diffuse 0}} }

于是,我們就看到了蔚藍(lán)的天空下一望無際的棋盤格的大平原:

還記得我們的相機是怎么設(shè)置的嗎?

camera {location <0, 2, -3>look_at <0, 1, 2> }

現(xiàn)在,將鏡頭中心對準(zhǔn)更遠(yuǎn)的地方,并在場景中再添加一個球體:

camera {location <0, 2, -3>look_at <0, 3, 8> }sphere {<3, 1, 5>, 1texture {pigment {color Yellow}} }

現(xiàn)在,場景變?yōu)?#xff1a;在蔚藍(lán)色的天空下,在棋盤格的地面上,躺著一個略微有點變形的黃顏色的球體。

這個球體之所以會略微有點變形,是透視投影的自然結(jié)果。如果它位于相機的鏡頭中心軸線上,

sphere {<0, 2.5, 2.5>, 1texture {pigment {color Yellow}} }

結(jié)果就不會變形:

球心的位置是根據(jù)相機的位置及其觀測位置計算所得,使之恰好落在鏡頭中心軸線上。

天空沒有云,太單調(diào)了。我們可以像構(gòu)建天空那樣構(gòu)建云層嗎?

云層是什么?如果不是晴朗的清晨與黃昏,云層無非是白色、灰色以及透明色隨機混合的結(jié)果而已。先來看如何實現(xiàn)多種顏色的混合,拿剛才繪制的那個黃色的球體(球心為 <0, 2.5, 2.5>,半徑為 1 的那個球體)下手:

sphere {<0, 2.5, 2.5>, 1texture{ pigment{ gradient ycolor_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}}finish {ambient 1 diffuse 0}} }

結(jié)果可得:

這是 povray 的梯度顏色機制的效果。「gradient y」表示「梯子」的「橫桿」垂直于 y 軸。上述示例中的梯子,第一根橫桿是非常淺的灰色,第二根橫桿是白色,第三根橫桿是比第一根橫桿深一點的灰色,第四根與第五根橫桿是透明的。

若將這架梯子的尺寸縮小一些,

sphere {<0, 2.5, 2.5>, 1texture{ pigment{ gradient ycolor_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}scale 0.25 // <--- 這里是關(guān)鍵}finish {ambient 1 diffuse 0}} }

它的結(jié)構(gòu)會更清晰一些:

雖然整塊的梯度顏色區(qū)域被縮小了,但是就像桌面壁紙有個「Tile」的功能一樣,它會被 povray 重復(fù)使用,直至完全覆蓋物體表面。

雖然梯子形狀的云,沒人見過,但是只要將梯子的各行橫桿的形狀隨機扭曲一下:

sphere {<0, 2.5, 2.5>, 1texture{ pigment{ // gradient ybozo turbulence 0.75 // <-- 注意此處color_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}scale 0.25}finish {ambient 1 diffuse 0}} }

它就可以變成現(xiàn)實中的云:

是的,它現(xiàn)在還不是現(xiàn)實中的云,只是個水晶球,但是只要像之前構(gòu)建天空那樣,將這個球的球心移到坐標(biāo)原點,然后把它再放大到比天空小一些,那它就是云了,即:

sphere {<0, 0, 0>, 4000texture{ pigment{ bozo turbulence 0.75color_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}scale 0.25}finish {ambient 1 diffuse 0}} }

結(jié)果卻令人失望,并沒有云,只是天空變的白了一點:

天空變白的原因很簡單。我們將球體放大了 4000 倍,但是球體上的云塊卻沒有放大,于是 povray 重復(fù)成千上萬次,用這個很小云塊填滿偌大個的球體表面,再加上球體被放大后,球面距離我們的相機也非常的遠(yuǎn),所以我們所看到的天空,變白了。

要解決這個問題,只需將原有的縮放比例乘以 4000:

sphere {<0, 0, 0>, 4000texture{ pigment{ bozo turbulence 0.75color_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}scale 0.25 * 4000}finish {ambient 1 diffuse 0}} }

現(xiàn)在,可以看到像薄棉絮一樣的云了!

bozo 是 povray 提供的一組隨機擾動模式中的一種,主要用來畫云。其他模式有 marble(大理石)、agate(瑪瑙)、granite(花崗巖)、leopard(豹紋)、spotted(斑點)以及 wood(木頭)等,可以將這些隨機擾動模式逐一代入到上述示例,并改改 scale 值,看看都什么效果。

像下面這種隨機擾動模式:

sphere {<0, 0, 0>, 4000texture{ pigment{ marbleturbulence 1lambda .8frequency 2color_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}rotate 90 * zscale 0.3 * 800}finish {ambient 1 diffuse 0}} }

可以渲染出「大馬士革鋼」的紋路:

大馬士革鋼由多種鋼材折疊鍛打而成,表面經(jīng)酸洗后,可以出現(xiàn)與上圖相似的紋路:

最后,再回到薄如棉絮的云的場景中,這個場景太空蕩了,可以在里面放一塊大石頭壓壓場子:

#include "stones.inc" box {<0, 0, 0>, <1, 1, 3>texture {T_Stone25}rotate 30 * ytranslate 5 * z }

如果將光源,由原來的

light_source {<2, 4, -2>color White }

改為

light_source {<2000, 4500, -100>color White }

那么光源的位置便處于天空與云層之間,于是我們就像上帝那樣,創(chuàng)造了一個太陽:

雖然現(xiàn)實中的太陽,應(yīng)該放在天空之外的,但是那個作為天空的球體會擋住陽光。

下面給出一份完整的 .pov 文件可供參考:

#version 3.7; #include "colors.inc"// 相機 camera {location <0, 2, -3>look_at <0, 3, 8> }// 光源 light_source {<2000, 4500, -100>color White }// 天空 sphere {<0, 0, 0>, 5000texture {pigment {color rgb <0.1, 0.25, 0.75>}finish {ambient <1, 1, 1> diffuse 0}} }// 云 sphere {<0, 0, 0>, 4000texture{ pigment{ bozo turbulence 0.75color_map {[0.0 color rgb <0.95, 0.95, 0.95>][0.05 color rgb <1, 1, 1>][0.15 color rgb <0.85, 0.85, 0.85>][0.55 color rgbt <1, 1, 1, 1>][1.0 color rgbt <1, 1, 1, 1>]}scale 0.25 * 4000}finish {ambient 1 diffuse 0}} }// 大地 plane {y, 0texture {pigment {checker color Red, color Blue}} }// 大石塊 #include "stones.inc" box {<0, 0, 0>, <1, 1, 3>texture {T_Stone25}scale 3rotate 45 * ytranslate 5 * z }

就這樣,不務(wù)正業(yè)了一個周末的下午和晚上。

總結(jié)

以上是生活随笔為你收集整理的povray[1] = 天空的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。