城市SUV就不能越野?這些20萬級的SUV不僅能家用還能出去野!

98-22。98萬元水平對置發動機、左右對稱四驅系統,這都是斯巴魯強有力的武器,一直以來只能通過進口途徑購買的斯巴魯汽車給人感覺都是售價不便宜。而事實上斯巴魯有一款最低售價低於二十萬的SUV,那就是斯巴魯XV。對了,斯巴魯車配件都是進口的,所以維修保養的成本會相對高一點。

叫獸之前發過一篇文章說硬派SUV在操控、舒適性、動力調校等方面的表現導致其不適合城市的駕駛。然而事實上像叫獸這種從山裡走出來的孩子,雖然平時在城市裡混,但過年過節還是必須開車回家才夠意思的,不然買車有什麼意義?對吧。所以一輛既能在城市輕鬆駕駛,跑爛路的時候又有較好通過性的SUV,就最適合叫獸了。眼看着要年底了,叫獸跟你們分享一下這樣的車有哪些吧。

東風日產-奇駿

指導價:18.18-26.78萬元

硬朗平直的車身,優秀的四驅系統,同級別幾乎最好的通過性,這是上一代奇駿給叫獸留下的印象。而在售的這一代奇駿,雖然外觀進行了脫胎換骨的變化,變得更加接近時尚的城市SUV了,但其優秀的越野性能還是得以保留。

外觀方面,奇駿對比同級別的對手在尺寸方面有一定的優勢,所以觀感上奇駿會顯得高大,配合上稍帶有肌肉感的線條,奇駿的外觀還是頗具霸氣的,實際上奇駿的定位只是緊湊型SUV。

奇駿的內飾採用懷抱式的設計,線條流暢柔和,十分有親和力。日產車的內飾做工在日系車裡面算是做得優秀的一個了,尤其是奇駿這種有輕度越野需求的車,做工差的話異響就會特別明顯。還有一個就是奇駿的中控屏比較小,沒有導航,但有全景影像,比較實用。

奇駿最便宜的四驅車型為2.0L的智享版,算上優惠的話,落地價估計也就二十萬出頭,性價比還是蠻突出的。最大馬力為150ps,搭載CVT變速箱,動力輸出線性,低扭有力,該發動機的日常行駛很輕快。

奇駿的前後橋有開放式差速器,能夠鎖止打滑的車輪,所以該車是有能力通過交叉軸的,同時奇駿的車身剛度不錯,最小離地間隙為210mm,接近角為17°,底盤質感沉穩,濾震效果好。綜合這些數據和表現,奇駿應對輕度的越野還是綽綽有餘的。

廣汽三菱-歐藍德

指導價:15.98-22.38萬元

三菱歐藍德之前都是以進口車的身份活躍在國內市場,二十來萬的價格,三菱的血統,進口的品質,進口版歐藍德的口碑一直不錯。而直到今年,姍姍來遲的合資歐藍德終於和我們見面,合資的歐藍德原汁原味的保留了進口歐藍德的設計,不同的是價格更加優惠了

廣汽三菱歐藍德的造型和進口版車型是高度一致的,車頭造型比進口版的舊款要開揚和順眼不少,寬大的格柵十分霸氣,只是鍍鉻的裝飾稍微偏多了。側面的造型十分修長,因為歐藍德有着4695mm的車身長度,至於車尾則比車頭要低調很多,圓潤的造型有點像旅行車的車尾。

內飾造型的變化也不大,還是熟悉的日系居家風格,最明顯的變化是中控大屏從7英寸換成了8英寸,但這個大屏比新勁炫上面那一塊真的要和諧很多,不會太突兀。配置方面有防碰撞預警和ACC,還是挺實用的。

動力方面,只有最低配採用2.0L的發動機,其餘三個配置均為2.4L+CVT的四驅車型,最大馬力192ps,認為如果買歐藍德不買四驅版本,那還不如買一台XRV了。2.4L版本的歐藍德低扭表現出色,起步有力,動力輸出平順,但畢竟車重擺在那,歐藍德不能給你很強烈的加速快感。

歐藍德採用一套適時四驅系統,有三種驅動模式供駕駛者選擇,實際測試中,交叉軸、單前輪着地的三開放式滑輪組都可以通過,只是电子系統的反應還是有點慢。歐藍德的整體越野能力值得肯定,畢竟他主要還是一輛城市SUV啊。

斯巴魯-斯巴魯XV

指導價:18.98-22.98萬元

水平對置發動機、左右對稱四驅系統,這都是斯巴魯強有力的武器,一直以來只能通過進口途徑購買的斯巴魯汽車給人感覺都是售價不便宜。而事實上斯巴魯有一款最低售價低於二十萬的SUV,那就是斯巴魯XV。對了,斯巴魯車配件都是進口的,所以維修保養的成本會相對高一點。

叫獸覺得斯巴魯XV的外觀對比常見的SUV來說稍顯另類,車身造型扁平,長度比同級對手要短,車身重心也比較低,整體的造型更加接近於跨界車。

內飾方面,斯巴魯XV的採用對稱式的布局,內飾材料主要為塑料,做工很好,接縫緊密而均勻,但新款在內飾上的變化依然不大。讓叫獸欣慰的是在配置方面,斯巴魯XV有不少的提升,如胎壓監測、發動機啟停、空調溫度分區控制等等。不過話又說回來,這些配置,自主品牌十來萬的車早就有配備了。

動力方面,斯巴魯XV搭載了2.0L的水平對置4缸發動機,最大馬力150ps,變速箱則為CVT。和大部分的日系車一樣,斯巴魯XV的動力表現並不算积極,雖然起步輕快,但後段的動力儲備明顯不足,而且CVT變速箱又不適合急加速,所以斯巴魯XV只適合安安分分的駕駛。

斯巴魯XV搭載全時四驅系統,由於水平對置發動機重心低,所以XV的行駛穩定性很好。但重心低不代表通過性差,220mm的最低離地間隙讓XV能夠輕鬆應對爛路。左右對稱四驅系統能根據行駛狀況調整前後軸的扭力分配,這就讓斯巴魯XV比普通的城市SUV擁有有更強的脫困能力了。

廣汽菲克Jeep-自由光

指導價:20.98-31.58萬元

在Jeep還是只能進口的時代,想要二十來萬買一台軸距2705mm的Jeep中型SUV那幾乎就是天方夜譚。但現在不同了,合資國產後的自由光定價親民了不少,想體驗一下Jeep的中型SUV,自由光是最佳選擇了。

國產自由光的外觀和進口自由光的外觀差別不大,第一眼看的時候甚至會覺得有點怪,但時間長了之後就會發現其實自由光的外觀設計還是挺有意思的。七孔造型的中網辨識度好高,細條狀造型的頭燈也很有時尚感,自由光的外觀設計很大膽,越看越有味道。

內飾方面,對稱式的布局,維持了進口版上的設計,實質上自由光的內飾帶有一點歐洲車的風格,簡單而有檔次感。至於用料方面又體現了美系車的大方,不會吝嗇皮質材料的使用。座椅也和美系大沙發一樣,填充厚實,舒適性出色。

自由光有2.0L和2.4L兩種排量,變速箱均為ZF的9AT,最大馬力分別是155ps和175ps,叫獸認為想體驗更加接近Jeep的駕駛感受,2.4L專業版以上帶有適時四驅系統的車型會更加合適。可惜由於車重較大,175ps的馬力也僅能夠用,市區的行駛十分溫和舒適,沒什麼爆發力可言。

廣汽菲克Jeep-自由光搭載的是入門的Active Drive I四驅系統,有不錯的燃油經濟性,四驅西東也能適當的根據路況來分配各車輪的動力。所以整體來說自由光還是有能力應對一些泥濘道路或者打滑不是十分嚴重的脫困。

總結:雖說現在國家的經濟發展相當繁榮,但路況不好的小縣城或者農村還是不在小數。購買SUV除了是因為其相對霸氣的外形以外,更好的通過性和越野性能才是最能體現它實用的地方。又是年近歲晚的時候,相信不少人都盤算着怎樣回家過年,不知道今年你們有沒有考慮開上一輛四驅SUV回去?本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

8萬級最值得買!選這些質量好、空間大的自主SUV准沒錯

5T 152馬力+5擋手動/CVT、2。0L 139馬力+5擋手動/CVT。其中2。0L車型為停產在售狀態。瑞虎5在售車型全系均為1。5T發動機,同時標配ESp、上坡輔助、中控台彩色大屏、GpS、日間行車燈。但是售價才八萬多,性價比很高。吉利汽車-遠景SUV指導價:7。

SUV熱銷極大的促使了廠家在這個領域的布局,不管是合資還是自主都加強在SUV領域的投入,因為競爭的足夠充分,所以消費者會有足夠多的選擇。

正是因為競爭激烈了,所以消費者也能以較低的價格入手一台合適的SUV。那麼對於預算只有八萬左右的消費者,有哪些值得買的SUV呢?

上汽通用五菱-寶駿560

指導價:6.98-9.48萬

560的車身尺寸為4620*1820*1750mm,軸距為2750mm,雖然是緊湊型SUV,但是尺寸卻比較大,560造型比較飽滿,車身側面造型比較緊湊,雖然沒有什麼特別突出地方,但是至少看起來比較大氣。

內飾比較中庸,沒有什麼亮點,但是也挑不出什麼毛病。560的動力系統為1.8L 137馬力+5擋手動/6擋手動/5擋AMT、1.5T 150馬力+6擋手動。其中1.8L手動擋車型的0-100km/h加速為12s多一點,可以滿足家用,在同級別處於中等水平。

得益於較大的軸距,560的後排空間表現非常好,比下面兩款車的空間都要大,座椅寬大舒適,乘坐舒適感不錯,但是底盤的表現就不怎麼樣了,畢竟競爭對手都為多連桿獨立后懸架。

奇瑞汽車-瑞虎5

指導價:8.88-15.19萬

瑞虎5的車身尺寸為4506*1841*1740mm,軸距為2610mm,雖然這尺寸也不算小,但是和560比起來還是相形見絀。瑞虎5的外觀看起來更精緻,畢竟價格要比560貴很多。不過瑞虎5的高度有點高,看起來不是很協調。

中控內飾的用料也是標準的硬塑料,但是實用性不錯,因為儲物格設計的很合理,你可以很方便的放置一些日常的小物品。另外內飾做工不錯,縫隙也比較均勻,不會有太廉價的感覺。

動力系統為1.5T 152馬力+5擋手動/CVT、2.0L 139馬力+5擋手動/CVT。其中2.0L車型為停產在售狀態。瑞虎5在售車型全系均為1.5T發動機,同時標配ESp、上坡輔助、中控台彩色大屏、GpS、日間行車燈。但是售價才八萬多,性價比很高。

吉利汽車-遠景SUV

指導價:7.49-10.19萬

遠景SUV的車身尺寸為4500*1834*1707mm,軸距為2661mm,從尺寸上來看,遠景SUV和瑞虎5應該成為真正的對手,但是由於遠景SUV是老款的GX7上改進而來,節省了一大筆的研發費用,所以價格才會更低。

即使價格便宜,但是內飾的用料絲毫不吝嗇,中控造型比較隨大流,中控台都採用了搪塑工藝,摸起來的質感要比硬塑料強很多。這在同級別中比較少見。動力系統為1.8L 133馬力+5擋手動和1.3T 133馬力+CVT。

空間表現和瑞虎5旗鼓相當,但是都有着不錯的舒適性。遠景SUV的動力系統比較成熟可靠,同時底盤經過了重新的調教,變得更加厚實了,有着很好的行駛質感。如果不介意手動擋我們更推薦1.8L車型。動力表現更直接。

總結:560屬於純靠價格比拼的產品,預算不足可以選擇560。如果要求質感,要求配置了可以考慮遠景SUV和瑞虎5,當然一分價錢一分貨,瑞虎5的綜合實力還是要強於遠景SUV的。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

德國寶沃汽車2016交出完美成績 全新BX5廣州車展正式亮相

寶沃汽車(中國)有限公司執行副總裁陳威旭發言寶沃汽車(中國)有限公司執行副總裁陳威旭先生表示:“B-Link智能互聯繫統,是寶沃科技的先鋒性標誌。依託B-Link的‘九屏一雲’服務平台,寶沃汽車將努力為消費者帶來高品質、人性化的服務。

2016年寶沃交出完美成績單,BX7獲得超過35,000台銷售訂單;

德國寶沃BX5廣州車展正式亮相,BX5凝聚了寶沃汽車前沿設計理念與最新技術成果,滿足當前年輕消費者不斷提升的用車需求;

完美的年終成績單與全新車型BX5的推出,宣告了寶沃品牌進入快速穩步發展的全新階段。

【2016年11月18日,中國廣州】在今日開幕的第十四屆廣州國際車展(以下簡稱:廣州車展)上,備受矚目的德國寶沃汽車迎來了在廣州的首次亮相,現場除了全新重磅車型BX5的展出外,寶沃還分享了進入中國市場以來的收穫與成績。無論是全球戰略還是中國布局,從歐洲新工廠建設到亞洲新產品發布、從產品品質到消費者口碑,寶沃在廣州車展都交出了一張令人滿意的年終成績單。

德國寶沃汽車集團管理委員會主席及全球CEO華立新、寶沃汽車(中國)執行副總裁陳威旭、寶沃汽車(中國)副總裁兼營銷公司總經理賈亞權、德國寶沃汽車集團全球市場及銷售副總裁Tom Anliker、德國寶沃汽車集團全球設計執行總監Roland Sternmann、德國寶沃汽車集團全球品牌總監Tomas Caetano上台與全新車型寶沃BX5合影

德國寶沃汽車集團管理委員會主席及全球CEO華立新先生表示:“2016年是德國寶沃汽車值得慶祝的一年,我們在全球市場取得了快速、穩定的發展。在中國——全球最大的汽車市場,寶沃不但成功實現了本地化生產和核心市場布局,而且今年上市的首款SUV車型BX7也取得了優異的成績,贏得了消費者的高度認可。同時在歐洲,拉丁美洲等全球其他區域,寶沃的市場布局與產品戰略也在穩步推進,取得了令人滿意的成績。”

德國寶沃汽車集團管理委員會主席及全球CEO華立新致辭

全新重磅車型BX5正式亮相

德國寶沃汽車計劃以每年發布兩款新車的節奏,進一步擴大產品序列。BX5在廣州車展的正式亮相,體現了寶沃汽車的堅定承諾。BX5繼承了經典的寶沃家族設計語言,在向經典致敬的同時,也開創了自身專屬的魅力風格;同時BX5搭載了全新1.8T渦輪增壓發動機、博格華納第五代四驅系統和B-link智能互聯繫統,帶來卓越性能和智聯駕乘服務體驗,激發出忠於本心的駕駛慾望,滿足當前年輕消費者不斷提升的用車需求。

寶沃BX5亮相

BX5的推出,不僅匯聚了寶沃汽車的前沿設計理念與最新技術成果,也是對全球用戶熱忱期待的有力回應,宣告寶沃品牌正進入快速穩步發展的全新階段。

寶沃在華2016交出滿意成績單

2016,在“B-G-W全球戰略”驅動下,德國寶沃汽車在中國演繹了精彩的拓局之旅。首款創新力作“德國寬體智聯”SUV BX7上市后,憑藉著卓越的產品品質,獨特的設計美學以及創新智聯科技成功地贏得了消費者喜愛。到目前BX7已經獲得35,000台銷售訂單,交出了一份完美的成績單。在產品上市的同時,寶沃汽車也在积極推進市場布局,目前寶沃在華總計簽約建設超過140家4S店,銷售網絡已經實現了對華北、華東、華南、東北、西北125個核心市場的有效覆蓋。到明年,寶沃汽車計劃將經銷店增至200家,最終實現對中國市場的全面覆蓋。

為了全力提升中國用戶智能用車體驗,寶沃推出的B-link智能互聯繫統,涵蓋全知覺交互、全景智能監測、智能互聯和九屏一雲四大模塊,滿足年輕消費者對更智能、更個性的消費體驗追求。其中,寶沃於成都車展發布的“九屏一雲”服務平台(Screen9 Service platform),是在全新變革的大數據時代下,為用戶打造全生命周期車生活體驗,實現直接與消費者互動的商業形態。寶沃通過“九屏”,即TV終端、pC終端、手機終端、車機終端、銷售終端、售後服務、生產終端、呼叫終端、總監控終端的智能聯動,實踐数字化B2C,帶領用戶快速進入更智能、更互聯、更生態的大數據車生活時代。

寶沃汽車(中國)有限公司執行副總裁陳威旭發言

寶沃汽車(中國)有限公司執行副總裁陳威旭先生表示:“B-Link智能互聯繫統,是寶沃科技的先鋒性標誌。依託B-Link的‘九屏一雲’服務平台,寶沃汽車將努力為消費者帶來高品質、人性化的服務。這不僅是寶沃品牌與消費者的真誠互動,其所提供的面向未來汽車生活的智能服務亦將使用戶全生命周期車生活體驗成為現實。消費者的認可與信賴,是寶沃汽車未來發展的強力保障。”

此外,寶沃汽車藉助大數據將“汽車工業4.0”與“互聯網+”進行無縫融合,與全球頂尖供應商SAp、KUKA合作,在中國成功建立了以“德國工業4.0”理念為依託的智能工廠,完成了從供應鏈透明化、智能物流、柔性化生產、大規模個性化定製、互聯網營銷、車聯網服務的全產業鏈的智能化。目前,寶沃汽車中國工廠擁有全球首條八車型智能系統,一期產能10萬/年,最高產能36萬/年。

擁有全球首條八車型智能生產系統的寶沃工業4.0智能工廠

全球市場布局快速、穩步推進

积極布局中國市場的同時,德國寶沃汽車全球市場開發工作也在穩步推進。今年4月,德國寶沃汽車集團開啟第二次全球經銷商大會,向全球28個國家,近100家經銷商代表發布了寶沃全球品牌戰略及上市計劃;10月德國寶沃汽車集團在歐洲、拉美市場同時加速布局與建設,展現出了強勁的發展勢頭。根據市場布局計劃,德國寶沃汽車在中亞、東歐及拉美等市場,將計劃以SKD、CBU等方式導入市場。

德國寶沃汽車在全球戰略指導下,最大化整合全球優勢資源,於今年3月在德國總部斯圖加特與三大全球頂尖智能與電動技術合作夥伴,德國SAp、博世集團,及韓國LG电子,正式簽署戰略合作協議,全力打造行業領先的智能電動出行解決方案。此次合作,德國寶沃汽車將在雲計算、移動互聯、智能智造等方面得到全面提升,支撐各個系統的核心技術升級。

在寶沃品牌發源地德國不萊梅,寶沃將建設歐洲工廠,計劃2017年奠基,2018年中期投產。在初始階段,主要集中生產寶沃電動版系列車型。工廠將秉承德國領先的“汽車工業4.0”理念,整合全球優勢資源,實現智能化生產。未來,在歐洲市場,寶沃將以不萊梅工廠為基礎,全力打造純電動及插電式混合動力車型,開啟重返歐洲市場的序幕。

過去的一年,寶沃汽車憑藉清晰的市場戰略布局,不僅在中國市場創造了卓越佳績,也為全球市場的成功推進打下堅實基礎。在這一年,BX7強勁的市場表現證明了寶沃汽車的不凡實力與卓越品質,此次廣州車展全新產品BX5的登場,將為消費者帶來更多新的驚喜與期待。相信,隨着明年BX5上市,以及寶沃汽車新產品的陸續發布,寶沃汽車將綻放更多精彩!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

Apple TV 正式登上 Chromecast with Google TV 電視棒

眼看這宣佈已經是去年的事了,但 Chromecast with Google TV 加入 Apple TV app 總算也在今天成為現實 — 其實原本預計也是說年初,所以也不算是遲來,但相信大家真的期待了相當久,小編也因為這點在考慮是否要入手新世代帶有遙控器的 Google TV 電視棒。繼續閱讀 Apple TV 正式登上 Chromecast with Google TV 電視棒報導內文。

▲圖片來源:Google

Apple TV 正式登上 Chromecast with Google TV 電視棒

如果沒打算購入要價至少近 5 千起跳的 Apple TV 電視盒(還是 HD 版本的),卻又想要享受慵懶在客廳隨手一開遙控器,就能欣賞 Apple TV+ 各式影集的體驗的話。先前可能就只有花更多錢更換其他搭載 Apple TV app 的智慧電視才能實現。

不過去年底當 Google 正式宣佈 Apple TV app 將會登上 Chromecast with Google TV 的消息後,就瞬間將在電視上看蘋果原創串流影視服務的門檻再度降低。而在預告之後,這樣的功能更新也正式到來 — 說真的,即便是用 iPad 或 iPhone 連線投放到電視上的 Lightning 數位 AV 轉接器,也要 NT$1,490 啊… 唯一的問題大概就剩下台灣 Google 官方還沒正式引進,還得要靠代購才能入手的這點了。

根據 Google 官方部落格的資訊,可支援觀看 Apple TV+ 的 Apple TV app,現在已經可以在新款 Chromecast with Google TV 內的 For you 標籤頁找到,還能支援將影集存入 Google TV 觀看列表的功能;其他支援 Google TV 的智慧電視,也確認將會在未來數個月內提供。

最新一代的 Chromecast 產品,除了外型改為橢圓外,還新增了可一鍵執行 Google Assistant 語音命令的便利遙控器。能播放最高 4K HDR 60fps 的影片,也可以執行 Android TV 應用商店支援的應用乃至於遊戲。以其 US$50 的定價(約新台幣 1,400),卻可以支援包括 Netflix、YouTube、HBO Max 以及這次新增的 Apple TV+,的確使其成為相當高 CP 值的電視棒選擇。

首個支援的產品則是最新直接提供遙控器的 Chromecast with Google TV — 想知道它好不好用的,可以參考我們的 Chromecast with Google TV 開箱體驗(傳送門)。

本篇圖片 / 引用來源

延伸閱讀:

歷久彌新的慢時尚「萬秀的洗衣店」在 Today at Apple 分享穿搭美照創作心得

效率至上輕薄有型!NIID FINO IV 隨身型動包開箱體驗

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

OPPO X 2021 動手玩影片曝光,可依照手掌大小伸縮螢幕

毫無疑問地,在 2021 年裡面折疊手機肯定還是部份廠商的重點之一,像是華為預計在本月推出 Mate X2 ,對於可改變螢幕大小的外型上,在 2021 年似乎還有更多令人期待的形式,LG 也已經確認過有一款會在今年量產的伸縮螢幕手機。無獨有偶去年 OPPO 在秋天也展示了伸縮螢幕概念手機,從日前最新曝光的 OPPO X 20201 概念機動手影片,看起來似乎也準備好了。

OPPO X 2021 動手玩影片曝光,可依照手掌大小伸縮螢幕

法國 YouTuber Brandon Le Proktor 率先上傳了一部長達 8 分鐘的影片,其中展示了整個 OPPO X 2021 完全展開時的樣貌;在幾天後,德國 YouTube 頻道 allroundpc 也發表了自家對這款概念新機動手玩得最新影片。紐西蘭網站 Newshub 也發表了一篇動手玩文章。這些內容中其實並沒有展示任何關於 OPPO X 2021 在之前所未公開的細節,可見皆是在有限的受控環境中體驗、拍攝。

最初,OPPO 在去年 11 月間的 INNO 上展示了這個新概念機,從影片中我們可以看到螢幕上沒有可見的皺褶痕跡,隱藏的螢幕部分以金屬框架支撐著隱藏在手機左側的邊框中,採用 OPPO 自家的整合式捲動馬達,本質上是以一對能夠產生相等力道的馬達將螢幕以一致的方式將螢幕展開。只需要在手機左側清掃一下或是按兩下按鈕就能將整個 7.4 吋螢幕(1785 x 2592 )展開。從展示中看起來,似乎在系統介面似乎做了不錯的改良,使之能夠即時跟隨擴展的螢幕而變動。

 

這些動手玩影片的出現,表示 OPPO 對這種捲動螢幕的外觀越來越有信心,結構上也越來越成熟,但 OPPO X 2021 還沒有準備好推出,該公司並沒有確切地表示這款新機會在何時上市,不過還真得挺讓人期待。

◎資料來源:XDA Develope

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

緬甸發現新物種「波巴葉猴」 僅剩250隻瀕臨絕種

摘錄自2020年11月11日自由時報報導

科學家發現一種生活在緬甸中部森林的靈長類新物種「波巴葉猴」(Popa langur,暫譯),但這種體型輕巧的樹棲動物目前數量極少,已瀕臨滅絕。

《法新社》報導,週三發表於《Zoologic Research》期刊的一份詳細研究報告指出,研究員透過森林中採集的糞便和倫敦自然歷史博物館收藏的標本,發現波巴葉猴是一個新物種,已存在至少100萬年。其腹部呈灰棕色和白色,手和腕毛髮為黑色,尾巴將近1公尺比身體還長,重約8公斤。但是,波巴葉猴目前野外只剩下200至250隻,大約100隻生活在波巴山,因此專家建議,將這種食葉動物列為極危物種(Critically Endangered)。

研究發現,由於農地擴張、非法和不可持續性的林業開採,導致這種帶有「白眼圈」的猴子受到狩獵、棲息地喪失、退化等各方面的威脅。FFI緬甸計畫的靈長類動物學家Ngwe Lwin說,迫切需要進行其他野外調查和保護措施。

生物多樣性
國際新聞
緬甸
瀕危物種
猴子

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

暖化、伐木威脅馬達加斯加 東部雨林、特有種可能在50年後消失

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:ENS

紐約市立大學研究生中心的研究發現,若再不積極因應森林砍伐和人類引起的氣候變遷問題,兩者的綜合效應到了2070年可能使整個馬達加斯加東部的雨林消失,影響該島國特有的數千種植物、哺乳動物、爬行動物和兩棲動物。

研究發表在當期《自然氣候變遷》(Nature Climate Change)期刊。研究指出,保護區有助於減輕破壞,而環境人士則致力於尋求長期解決方案,以解決溫室氣體排放失控和隨之而來的氣候變遷。

研究確立了應優先保護的完整森林區域,以加強受威脅物種的恢復能力和生存能力。

位於馬達加斯加境內拉努馬法納國家公園外,由於農業用途而遭到砍燒的森林。照片來源:Nina Beeby(CC BY-ND 4.0)

馬達加斯加位於印度洋,是僅次於澳洲的世界第二大島國,距東非海岸250英里(400公里)。由於與周邊各大洲長期處於隔離狀態,馬達加斯加有許多其他地方所沒有的動植物。

馬達加斯加是生物多樣性熱點,80%至90%的動植物物種為特有種,但數十年來的濫墾濫伐破壞了許多特殊和瀕危野生動物的棲地,包括瀕危的狐猴。

目前有兩種領狐猴瀕臨滅絕,牠們在生態系統中的角色是散播植物種子,而這些植物為雨林中的其他動物提供食物和庇護所。

研究主要作者、紐約市立大學研究生中心和亨特學院人類學教授巴登(Andrea Baden)博士說:「由於狐猴是重要的種子傳播者,對生活環境劣化也很敏感,因此牠是馬達加斯加整個東部雨林健康狀況的關鍵指標。」

非政府組織保護國際(Conservation International)認為,狐猴是馬達加斯加的代表性哺乳動物。在沒有猴子和其他競爭者的情況下,這些靈長類動物已經適應了當地遼闊的棲息地,並演化出許多不同的物種。

由於狐猴是重要的種子傳播者,因此牠是馬達加斯加整個東部雨林健康狀況的關鍵指標。照片來源:Franck Rabenahy(CC BY-ND 4.0)

截至2012年,已正式確立103個狐猴的物種和亞種,其中有39種是動物學家在2000年至2008年間發現的。牠們幾乎都是稀有、易危或瀕危物種。自人類抵達馬達加斯加以來,至少有17種狐猴滅絕。

巴登博士和她的團隊在馬達加斯加研究兩種極度瀕危的領狐猴,利用長達三十年的研究資料,分析該國東部熱帶雨林面臨的威脅。

巴登說:「我們預測森林砍伐和氣候變遷的影響時,發現光是森林砍伐和氣候變遷兩個因素,就足以使狐猴棲息地減少50%以上。更令人震驚的是,這兩個因素到本世紀末將明顯減少熱帶雨林棲息地。」

研究人員的資料顯示,馬達加斯加東部雨林破壞的速度和強度將取決於該國是否制定嚴格的保護措施來防止毀林或因應鬆散的政策。

森林是狐猴的庇護所,也是連接牠們活動範圍的生態廊道。保護森林的工作非常重要,因為狐猴是當地的關鍵物種,在這個全球生物多樣性最豐富的地區,牠們的存續和許多其他動植物的存續息息相關。

自人類抵達馬達加斯加以來,至少有17種狐猴滅絕。照片來源:Varecia Garbutt(CC BY-ND 4.0)

馬達加斯加有許多特有哺乳動物,例如馬島獴(Fossa, Cryptoprocta ferox)。島上記錄到300多種鳥類,其中60%以上是特有種,還有全世界三分之二的變色龍物種,包括已知最小的一種。科學家認為。馬達加斯加可能是所有變色龍的起源地。

在馬達加斯加的14,883種植物中,有80%以上是特有種,包括五個植物科。島上許多原生植物物種被用作草藥。像長春花鹼和長春新鹼都是馬達加斯加長春花的生物鹼,用於治療霍奇金氏病、白血病和其他癌症。

巴登說:「我們的研究結果能幫助非營利組織、國家公園管理和更廣泛的狐猴群聚保育。結果顯示,森林覆蓋度和連結度是領狐猴和所有棲息於森林的野生動物生存的關鍵。保護區對於物種的生存至關重要。」

非營利組織已經在著手保護這個獨特而受威脅的地區。保護國際自1996年起就在馬達加斯加東部進行自然保育計畫。總部位於美國的「保護國際」正在協助馬達加斯加政府制定和實施「具有保育意識的永續發展策略」。

保護國際正在馬達加斯加東部的Ankeniheny-Zahamena廊道執行測試計畫,目的是產生碳信用額度,可以出售給想抵消碳排放量的公司或其他買家。這個計畫由外部審核方雨林聯盟(Rainforest Alliance)驗證,透過保護協議吸引社區參與、提供社區財政激勵措施,保護他們的森林並監測威脅。

世界野生動物基金會(WWF)在該地區也已經耕耘了三十多年,與當地社區合作保護馬達加斯加的獨特環境。

2020年是馬達加斯加脫離法國獨立60週年,將種下6000萬棵幼苗綠化馬達加斯加。在環境與永續發展部的邀請下,約有20個環境組織和多所大學的學生會參與這項公民活動。

環境與永續發展部植樹造林與景觀和森林管理總監傑克斯(Jaozandry Jean Jacques)表示,植樹造林活動將在2020年1月展開。

Climate, Logging Menace Madagascar’s Unique Ecology JOHANNESBURG,New York,January 2, 2020 (ENS)

Left unchecked, the combined effects of deforestation and human-induced climate change could eliminate Madagascar’s entire eastern rainforest habitat by 2070, impacting thousands of plants, mammals, reptiles, and amphibians endemic to the island nation, finds new research from The Graduate Center at the City University of New York, CUNY.

Published in the current issue of the journal “Nature Climate Change,” the study also shows that protected areas will help to lessen the devastation while environmentalists work toward long-term solutions for ending runaway greenhouse gas emissions and the resulting climate change.

The study identifies areas of intact forest that could be prioritized for protection to enable resilience and survival of threatened species.

Madagascar, the world’s second-largest island country after Australia, lies in the Indian Ocean, 250 miles (400 kilometers) off the coast of East Africa. As a result of the island’s long isolation from neighboring continents, Madagascar is inhabited by animals and plants found nowhere else on Earth

It is a biodiversity hotspot where 80 to 90 percent of its animal and plant species are exclusive to the area, but the land has been devasted by decades of deforestation and overharvesting, destroying much of the land cover that provides habitat for unique animals, including endangered varieties of lemurs.

In particular, two species of ruffed lemurs are now critically endangered, and these animals play a central role in dispersing the seeds of plant species that provide food and shelter for other animals across the rainforest.

“Because of their essential role as seed dispersers and their sensitivity to habitat degradation, ruffed lemurs serve as a critical indicator of the health of Madagascar’s entire eastern rainforest,” said Dr. Andrea Baden, a professor of anthropology at The Graduate Center, CUNY and Hunter College and the study’s primary investigator.

Lemurs have been characterized as “Madagascar’s flagship mammal species” by Conservation International. In the absence of monkeys and other competitors, these primates have adapted to a wide range of habitats and diversified into numerous species.

As of 2012, there were officially 103 species and subspecies of lemur, 39 of which were described by zoologists between 2000 and 2008. They are almost all classified as rare, vulnerable, or endangered. At least 17 species of lemur have become extinct since humans arrived on Madagascar.

Dr. Baden and her team employed a case study of the two critically endangered ruffed lemurs using three decades of research throughout Madagascar to analyze threats to the country’s eastern tropical rainforest.

“When we projected the impact of deforestation and climate change, we found that deforestation alone and climate change alone could reduce ruffed lemur habitat by over 50 percent,” said Baden. “Even more alarming, these two factors together are projected to essentially decimate suitable rainforest habitat by the end of the century.”

The researchers’ data suggest that the speed and intensity of destruction to Madagascar’s eastern rainforest will be determined by whether the country institutes strict protections against deforestation or a relaxed set of policies.

Protecting forested areas that provide shelter to ruffed lemurs and serve as corridor links to their strongholds is particularly important to survival given their role as a keystone species that enables the survival of a large number of other animal and plant species in one of the world’s most biodiverse regions.

A number of other mammals, including the cat-like fossa, are endemic to Madagascar. Over 300 species of birds have been recorded on the island, of which over 60 percent are endemic. The island nation is inhabited by two-thirds of the world’s chameleon species, including the smallest known, and scientists have proposed that Madagascar may be the origin of all chameleons.

More than 80 percent of Madagascar’s 14,883 plant species are found nowhere else in the world, including five plant families. Many plant species native to the island are used as herbal remedies. The drugs vinblastine and vincristine are vinca alkaloids, used to treat Hodgkin’s disease, leukemia, and other cancers, were derived from the Madagascar periwinkle.

“The results from our study will be useful to nonprofit organizations, park management, and the broader conservation community,” Baden said. “Our results indicate potential conservation opportunities for ruffed lemurs and any of the rainforest-dwellers that rely on forest cover and connectivity. Protected areas are vital to species persistence.”

Nonprofit gorups are already at work protecting this unique and threatened area.

Conservation International has had conservation projects in eastern Madagascar since 1996. The nonprofit organization based in the United States is currently supporting the government of Madagascar in the development and implementation of “a conservation-conscious sustainable development strategy for the area.”

Conservation International has developed a pilot project in the Ankeniheny-Zahamena Corridor of eastern Madagascar that aims to generate carbon credits that can be sold to companies or other buyers looking to offset carbon emissions. Validated by an external auditor, the Rainforest Alliance, the project engages communities through conservation agreements that give these communities financial incentives to conserve their forests and monitor threats.

The World Wildlife Fund, WWF, has been active there for more than three decades, working with local communities to protect Madagascar’s unique environment.

For the 60th anniversary of Madagascar’s independence from France in 1960, 60 million young plants will be planted to green Madagascar.

In response to an invitation from the Ministry of the Environment and Sustainable Development, MEDD, some 20 environmental organizations and several university students are involved in this citizen mobilization.

Jaozandry Jean Jacques, director of Reforestation and Management of Landscapes and Forests within the MEDD, says, “We plan to officially open reforestation in Madagascar in January 2020.”

※ 全文及圖片詳見:ENS

※ 本文與 行政院農業委員會 林務局  合作刊登

森林砍伐
氣候變遷
熱帶雨林
狐猴
特有種
種樹
森林
國際新聞
馬達加斯加
全球變遷
生態保育
生物多樣性
氣候變遷

作者

姜唯

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

林大利

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

DirectX11 With Windows SDK–31 陰影映射

前言

陰影既暗示着光源相對於觀察者的位置關係,也從側面傳達了場景中各物體之間的相對位置。本章將起底最基礎的陰影映射算法,而像複雜如級聯陰影映射這樣的技術,也是在陰影映射的基礎上發展而來的。

學習目標:

  1. 掌握基本的陰影映射算法
  2. 熟悉投影紋理貼圖的工作原理
  3. 了解陰影圖走樣的問題並學習修正該問題的常用策略

DirectX11 With Windows SDK完整目錄

Github項目源碼

歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什麼問題也可以在這裏彙報。

核心思想

陰影映射技術的核心思想其實不複雜。對於場景中的一點,如果該點能夠被攝像機觀察到,卻不能被光源定義的虛擬攝像機所觀察到,那麼場景中的這一點則可以被判定為光源所照射不到的陰影區域。

以下圖為例,眼睛觀察到地面上最左邊的一點,並且從光源處觀察也能看到該點。因此該點不會產生陰影。

再看下面的圖,眼睛可以觀察到地面上中間那一點,但是從光源處觀察不能看到該點。因此該點會產生陰影。

具體落實下來應該怎麼做呢?對於點光源來說,由於它的光是朝所有方向四射散開的,但為了方便,我們可以像攝像機那樣選取視錐體區域(使用一個觀察矩陣 + 透視投影矩陣來定義),然後經過正常的變換后就能計算出光源到區域內物體的深度值;而對於平行光(方向光)來說,我們可以採用正交投影的方式來選取一個長方體區域(使用一個觀察矩陣 + 正交投影矩陣定義)。和一般的渲染流程不同的是,我們只需要記錄深度值到深度緩衝區,而不需要將顏色繪製到後備緩衝區。

陰影貼圖

陰影貼圖技術也是一種變相的“渲染到紋理”技術。它以光源的視角來渲染場景深度信息,即在光源處有一個虛擬攝像機,它將觀察到的物體的深度信息保存到深度緩衝區中。這樣我們就可以知道那些離光源最近的像素片元信息,同時這些點自然是不在陰影範圍之中。

通常該技術需要用到一個深度/模板緩衝區、一個與之對應的視口、針對該深度/模板緩衝區的着色器資源視圖(SRV)和深度/模板視圖(DSV),而用於陰影貼圖的那個深度/模板緩衝區也被稱為陰影貼圖

光源的投影

在考慮點光源的投影和方向光的投影時可能會有些困難,但這兩個問題其實可以轉化成虛擬攝像機的透視投影和正交投影。

對於透視投影來說,其實我們也已經非常熟悉了。在這種做法下我們只考慮虛擬攝像機的視錐體區域(即儘管點光源是朝任意方向照射的,但我們只看點光源往該視錐體範圍內照射的區域),然後對物體慣例進行世界變換、以光源為視角的觀察變換、光源的透視投影變換,這樣物體就被變換到了以光源為視角的NDC空間。

而對於正交投影而言,我們也是一樣的做法。正交投影的視景體是一個軸對齊於觀察坐標系的長方體。儘管我們不好描述一個方向光的光源,但為了方便,我們把光源定義在視景體xOy切面中心所處的那條直線上。這樣我們就只需要給出視景體的寬度、高度、近平面、遠平面信息就可以構造出一個正交投影矩陣了。

我們可以看到,正交投影的投影線均平行於觀察空間的z軸。

正交投影矩陣在第四章變換已經講過,就不再贅述。

投影紋理坐標

投影紋理貼圖技術能夠將紋理投射到任意形狀的幾何體上,又因為其原理與投影機的工作方式比較相似,由此得名。例如下圖中,右邊的骷髏頭紋理被投射到左邊場景中的多個幾何體上。

投影紋理貼圖的關鍵在於為每個像素生成對應的投影紋理坐標,從視覺上給人一種紋理被投射到幾何體上的感覺。

下圖是光源觀察的視野,其中點p是待渲染的一點,而紋理坐標(u, v)則指定了應當被投射到3D點p上的紋素,並且坐標(u, v)與投影到屏幕上的NDC坐標有特定聯繫。我們可以將投影紋理坐標的生成過程分為如下步驟:

  1. 將3D空間中一點p投影到光源的投影窗口,並將其變換到NDC空間。
  2. 將投影坐標從NDC空間變換到紋理空間,以此將它們轉換為紋理坐標

而步驟2中的變換過程則取決於下面的坐標變換:

\[u=0.5x+0.5\\ v=-0.5y+0.5 \]

即從x, y∈[-1, 1]映射到u, v∈[0, 1]。(y軸和v軸是相反的)

這種線性變換可以用矩陣表示:

\[\mathbf{T}=\begin{bmatrix} 0.5 & 0 & 0 & 0 \\ 0 & -0.5 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0.5 & 0.5 & 0 & 1 \\ \end{bmatrix}\\ \begin{bmatrix} x & y & 0 & 1 \end{bmatrix}\mathbf{T}=\begin{bmatrix} u & v & 0 & 1 \end{bmatrix} \]

那麼物體上的一點p從局部坐標繫到最終的紋理坐標點t的變換過程為:

\[\mathbf{p}\mathbf{W_{Obj}}\mathbf{V_{Light}}\mathbf{P_{Light}}\mathbf{T}=\mathbf{t} \]

這裏補上了世界變換矩陣,是因為這一步容易在後面的代碼實踐中被漏掉。但此時的t還需要經過透視除法,才是我們最終需要的紋理坐標。

HLSL代碼

下面的HLSL代碼展示了頂點着色器計算投影紋理坐標的過程:

// 頂點着色器
VertexPosHWNormalTexShadowPosH VS(VertexPosNormalTex vIn)
{
    VertexPosHWNormalTexShadowPosH vOut;
    
    matrix viewProj = mul(g_View, g_Proj);
    vector posW = mul(float4(vIn.PosL, 1.0f), g_World);

    vOut.PosW = posW.xyz;
    
    // ...
    
    // 把頂點變換到光源的投影空間
    vOut.ShadowPosH = mul(posW, g_ShadowTransform);
    return vOut;
}

// 像素着色器
float4 PS(VertexPosHWNormalTexShadowPosH pIn) : SV_Target
{
    // 透視除法
    pIn.ShadowPosH.xyz /= pIn.ShadowPosH.w;
    
    // NDC空間中的深度值
    float depth = pIn.ShadowPosH.z;
    
    // 通過投影紋理坐標來對紋理採樣
    // 採樣出的r分量即為光源觀察該點時的深度值
    float4 c = g_ShadowMap.Sample(g_Sam, pIn.ShadowPosH.xy);
    
    // ...
}

視錐體之外的點

在渲染管線中,位於視錐體之外的幾何體是要被裁剪掉的。但是,在我們以光源設置的視角投影幾何體而為之生成投影紋理坐標時,並不需要執行裁剪操作——只需要簡單投影頂點即可。因此,位於視錐體之外的幾何體頂點會得到[0, 1]區間之外的投影紋理坐標。然後具體的採樣行為則需要依賴於我們設置的採樣器。

一般來說,我們並不希望對位於視錐體外的幾何體頂點進行貼圖,因為這並沒有任何意義。考慮到可視深度在NDC空間的最大值為1.0f,我們可以採用邊界深度值為1.0f的邊框尋址模式

另一種做法則是結合聚光燈的策略,使聚光燈照射範圍之外的部分不受光照,亦即不在陰影的計算範圍內。

透視除法與投影的其他問題

來到正交投影,因為我們依然是要計算出NDC坐標,對於NDC空間範圍外的點,我們依然可以採用上面的尋址模式策略,但聚光燈的策略就不適用了。

此外,正交投影無需進行透視除法,因為正交投影后的坐標w值總是1.0f。但保留透視除法可以讓我們的這套着色器可以同時工作在正交投影和透視投影上。如果沒有透視除法,則只能在正交投影中工作。

算法思路

  1. 從光源的視角將場景深度以“渲染到紋理”的形式繪製到名為陰影貼圖的深度緩衝區中
  2. 從玩家攝像機的視角渲染場景,計算出該點在光源視角下NDC坐標,其中z值為深度值,記為d(p)
  3. 上面算出的NDC坐標的xy分量變換為陰影貼圖的紋理坐標uv,然後進行深度值採樣,得到s(p)
  4. 當d(p) > s(p)時, 像素p位於陰影範圍之內;自然相反地,當d(p) <= s(p)時,像素p位於陰影範圍之外(至於為什麼還有<,後面會提到)

改進TextureRender

既然陰影貼圖和RTT有着許多相似的地方,那何不把它也放到TextureRender裏面共用呢?只要添加一個開關控制該RTT是否用作陰影貼圖即可。

class TextureRender
{
public:
    template<class T>
    using ComPtr = Microsoft::WRL::ComPtr<T>;

    TextureRender() = default;
    ~TextureRender() = default;
    // 不允許拷貝,允許移動
    TextureRender(const TextureRender&) = delete;
    TextureRender& operator=(const TextureRender&) = delete;
    TextureRender(TextureRender&&) = default;
    TextureRender& operator=(TextureRender&&) = default;


    HRESULT InitResource(ID3D11Device* device,
        int texWidth,
        int texHeight,
        bool shadowMap = false,
        bool generateMips = false);

    // 開始對當前紋理進行渲染
    // 陰影貼圖無需提供背景色
    void Begin(ID3D11DeviceContext* deviceContext, const FLOAT backgroundColor[4]);
    // 結束對當前紋理的渲染,還原狀態
    void End(ID3D11DeviceContext * deviceContext);
    // 獲取渲染好的紋理的着色器資源視圖
    // 陰影貼圖返回的是深度緩衝區
    // 引用數不增加,僅用於傳參
    ID3D11ShaderResourceView* GetOutputTexture();

    // 設置調試對象名
    void SetDebugObjectName(const std::string& name);

private:
    ComPtr<ID3D11ShaderResourceView>        m_pOutputTextureSRV;          // 輸出的紋理(或陰影貼圖)對應的着色器資源視圖
    ComPtr<ID3D11RenderTargetView>          m_pOutputTextureRTV;          // 輸出的紋理對應的渲染目標視圖
    ComPtr<ID3D11DepthStencilView>          m_pOutputTextureDSV;          // 輸出紋理所用的深度/模板視圖(或陰影貼圖)
    D3D11_VIEWPORT                          m_OutputViewPort = {};        // 輸出所用的視口

    ComPtr<ID3D11RenderTargetView>          m_pCacheRTV;                  // 臨時緩存的後備緩衝區
    ComPtr<ID3D11DepthStencilView>          m_pCacheDSV;                  // 臨時緩存的深度/模板緩衝區
    D3D11_VIEWPORT                          m_CacheViewPort = {};         // 臨時緩存的視口

    bool                                    m_GenerateMips = false;       // 是否生成mipmap鏈
    bool                                    m_ShadowMap = false;          // 是否為陰影貼圖

};

在作為RTT時,需要創建紋理與它的SRV和RTV、深度/模板緩衝區和它的DSV、視口

而作為陰影貼圖時,需要創建深度緩衝區與它的SRV和DSV、視口

下面的代碼只關注創建陰影貼圖的部分:

HRESULT TextureRender::InitResource(ID3D11Device* device, int texWidth, int texHeight, bool shadowMap, bool generateMips)
{
    // 防止重複初始化造成內存泄漏
    m_pOutputTextureSRV.Reset();
    m_pOutputTextureRTV.Reset();
    m_pOutputTextureDSV.Reset();
    m_pCacheRTV.Reset();
    m_pCacheDSV.Reset();

    m_ShadowMap = shadowMap;
    m_GenerateMips = false;
    HRESULT hr;
    
    // ...
    
    // ******************
    // 創建與紋理等寬高的深度/模板緩衝區或陰影貼圖,以及對應的視圖
    //
    CD3D11_TEXTURE2D_DESC texDesc((m_ShadowMap ? DXGI_FORMAT_R24G8_TYPELESS : DXGI_FORMAT_D24_UNORM_S8_UINT),
        texWidth, texHeight, 1, 1,
        D3D11_BIND_DEPTH_STENCIL | (m_ShadowMap ? D3D11_BIND_SHADER_RESOURCE : 0));

    ComPtr<ID3D11Texture2D> depthTex;
    hr = device->CreateTexture2D(&texDesc, nullptr, depthTex.GetAddressOf());
    if (FAILED(hr))
        return hr;

    CD3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc(depthTex.Get(), D3D11_DSV_DIMENSION_TEXTURE2D, DXGI_FORMAT_D24_UNORM_S8_UINT);

    hr = device->CreateDepthStencilView(depthTex.Get(), &dsvDesc,
        m_pOutputTextureDSV.GetAddressOf());
    if (FAILED(hr))
        return hr;

    if (m_ShadowMap)
    {
        // 陰影貼圖的SRV
        CD3D11_SHADER_RESOURCE_VIEW_DESC srvDesc(depthTex.Get(), D3D11_SRV_DIMENSION_TEXTURE2D, DXGI_FORMAT_R24_UNORM_X8_TYPELESS);

        hr = device->CreateShaderResourceView(depthTex.Get(), &srvDesc,
            m_pOutputTextureSRV.GetAddressOf());
        if (FAILED(hr))
            return hr;
    }

    // ******************
    // 初始化視口
    //
    m_OutputViewPort.TopLeftX = 0.0f;
    m_OutputViewPort.TopLeftY = 0.0f;
    m_OutputViewPort.Width = static_cast<float>(texWidth);
    m_OutputViewPort.Height = static_cast<float>(texHeight);
    m_OutputViewPort.MinDepth = 0.0f;
    m_OutputViewPort.MaxDepth = 1.0f;

    return S_OK;
}

需要注意的是,在創建深度緩衝區時,如果還想為他創建SRV,就不能將DXGI格式定義成DXGI_FORMAT_D24_UNORM_S8_UINT這些帶D的類型,而應該是DXGI_FORMAT_R24G8_TYPELESS

然後在創建陰影貼圖的SRV時,則需要指定為DXGI_FORMAT_R24_UNORM_X8_TYPELESS

開始陰影貼圖的渲染前,不需要設置RTV,只需要綁定DSV。

void TextureRender::Begin(ID3D11DeviceContext* deviceContext, const FLOAT backgroundColor[4])
{
    // 緩存渲染目標和深度模板視圖
    deviceContext->OMGetRenderTargets(1, m_pCacheRTV.GetAddressOf(), m_pCacheDSV.GetAddressOf());
    // 緩存視口
    UINT num_Viewports = 1;
    deviceContext->RSGetViewports(&num_Viewports, &m_CacheViewPort);

    // 清空緩衝區
    // ... 
    deviceContext->ClearDepthStencilView(m_pOutputTextureDSV.Get(), D3D11_CLEAR_DEPTH | (m_ShadowMap ? 0 : D3D11_CLEAR_STENCIL), 1.0f, 0);
    
    // 設置渲染目標和深度模板視圖
    deviceContext->OMSetRenderTargets((m_ShadowMap ? 0 : 1), 
        (m_ShadowMap ? nullptr : m_pOutputTextureRTV.GetAddressOf()), 
        m_pOutputTextureDSV.Get());
    // 設置視口
    deviceContext->RSSetViewports(1, &m_OutputViewPort);
}

渲染完成后,和往常一樣還原即可。

偏移與走樣

陰影圖存儲的是距離光源最近的可視像素深度值,但是它的分辨率有限,導致每一個陰影圖紋素都要表示場景中的一片區域。因此,陰影圖只是以光源視角針對場景深度進行的離散採樣,這將會導致所謂的陰影粉刺等圖像走樣問題。如下圖所示(注意圖中地面上光影之間輪流交替的“階梯狀”條紋):

而下圖則簡單展示了為什麼會發生陰影粉刺這種現象。由於陰影圖的分辨率有限,所以每個陰影圖紋素要對應於長江中的一塊區域(而不是點對點的關係,一個坡面代表陰影圖中一個紋素的對應範圍)。從觀察點E查看場景中的兩個點p1與p2,它們分別對應於兩個不同的屏幕像素。但是,從光源的觀察角度來看,它們卻都有着相同的陰影圖紋素(即s(p1)=s(p2)=s,由於分辨率的原因)。當我們在執行陰影圖檢測時,會得到d(p1) > s 及 d(p2) <= s這兩個測試結果,這樣一來,p1將會被繪製為如同它在陰影中的顏色,p2將被渲染為好似它在陰影之外的顏色,從而導致陰影粉刺。

因此,我們可以通過偏移陰影圖中的深度值來防止出現錯誤的陰影效果。此時我們就可以保證d(p1) <= s 及 d(p2) <= s。但是尋找合適的深度偏移需要反覆嘗試。

偏移量過大會導致名為peter-panning(彼得·潘,即小飛俠,他曾在一次逃跑時弄丟了自己的影子)的失真效果,使得陰影看起來與物體相分離。

然而,並沒有哪一種固定的偏移量可以正確地運用於所有幾何體的陰影繪製。特別是下圖那種(從光源的角度來看)有着極大斜率的三角形,這時候就需要選取更大的偏移量。但是,如果試圖通過一個過大的深度偏移量來處理所有的斜邊,則又會造成peter-panning問題。

因此,我們繪製陰影的方式就是先以光源視角度量多邊形斜面的斜率,併為斜率較大的多邊形應用更大的偏移量。而圖形硬件內部對此有相關技術的支持,我們通過名為斜率縮放偏移的光柵化狀態屬性就能夠輕鬆實現。

typedef struct D3D11_RASTERIZER_DESC {
    // ...
    INT             DepthBias;
    FLOAT           DepthBiasClamp;
    FLOAT           SlopeScaledDepthBias;
    BOOL            DepthClipEnable;
    // ...
} D3D11_RASTERIZER_DESC;
  1. DepthBias:一個固定的應用偏移量。
  2. DepthBiasClamp:所允許的最大深度偏移量。以此來設置深度偏移量的上限。不難想象,及其陡峭的傾斜度會導致斜率縮放偏移量過大,從而造成peter-panning失真
  3. SlopeScaledDepthBias:根據多邊形的斜率來控制偏移程度的縮放因子。

注意,在將場景渲染至陰影貼圖時,便會應用該斜率縮放偏移量。這是由於我們希望以光源的視角基於多邊形的斜率而進行偏移操作,從而避免陰影失真。因此,我們就會對陰影圖中的數值進行偏移計算(即由硬件將像素的深度值與偏移值相加)。在本Demo中採用的具體數值如下:

// [出自MSDN]
// 如果當前的深度緩衝區採用UNORM格式並且綁定在輸出合併階段,或深度緩衝區還沒有被綁定
// 則偏移量的計算過程如下:
//
// Bias = (float)DepthBias * r + SlopeScaledDepthBias * MaxDepthSlope;
//
// 這裏的r是在深度緩衝區格式轉換為float32類型后,其深度值可取到大於0的最小可表示的值
// MaxDepthSlope則是像素在水平方向和豎直方向上的深度斜率的最大值
// [結束MSDN引用]
//
// 對於一個24位的深度緩衝區來說, r = 1 / 2^24
//
// 例如:DepthBias = 100000 ==> 實際的DepthBias = 100000/2^24 = .006
//
// 本Demo中的方向光始終與地面法線呈45度夾角,故取斜率為1.0f
// 以下數據極其依賴於實際場景,因此我們需要對特定場景反覆嘗試才能找到最合適
rsDesc.DepthBias = 100000;
rsDesc.DepthBiasClamp = 0.0f;
rsDesc.SlopeScaledDepthBias = 1.0f

注意:深度偏移發生在光柵化期間(裁剪之後),因此不會對幾何體裁剪造成影響。

RenderStates中我們添加了這樣一個光柵化狀態:

// 深度偏移模式
rasterizerDesc.FillMode = D3D11_FILL_SOLID;
rasterizerDesc.CullMode = D3D11_CULL_BACK;
rasterizerDesc.FrontCounterClockwise = false;
rasterizerDesc.DepthClipEnable = true;
rasterizerDesc.DepthBias = 100000;
rasterizerDesc.DepthBiasClamp = 0.0f;
rasterizerDesc.SlopeScaledDepthBias = 1.0f;
HR(device->CreateRasterizerState(&rasterizerDesc, RSDepth.GetAddressOf()));

MSDN文檔Depth Bias講述了該技術相關的全部規則,並且介紹了如何使用浮點深度緩衝區進行工作。

百分比漸近過濾(PCF)

在使用投影紋理坐標(u, v)對陰影圖進行採樣時,往往不會命中陰影圖中紋素的準確位置,而是通常位於陰影圖中的4個紋素之間。然而,我們不應該對深度值採用雙線性插值法,因為4個紋素之間的深度值不一定滿足線性過渡,插值出來的深度值跟實際的深度值有偏差,這樣可能會導致把像素錯誤標入陰影中這樣的錯誤結果(因此我們也不能為陰影圖生成mipmap)。

出於這樣的原因,我們應該對採樣的結果進行插值,而不是對深度值進行插值。這種做法稱為——百分比漸近過濾。即我們以點過濾(MIN_MAG_MIP_POINT)的方式在坐標(u, v)、(u+△x, v)、(u, v+△x)、(u+△x, v+△x)處對紋理進行採樣,其中△x=1/SHADOW_MAP_SIZE(除以的是引用貼圖的寬高)。由於是點採樣,這4個採樣點分別命中的是圍繞坐標(u, v)最近的4個陰影圖紋素s0、s1、s2、s3,如下圖所示。

接下來,我們會對這些採集的深度值進行陰影圖檢測,並對測試的結果展開雙線性插值。

static const float SMAP_SIZE = 2048.0f;
static const float SMAP_DX = 1.0f / SMAP_SIZE;

// ...

//
// 採樣操作
//

// 對陰影圖進行採樣以獲取離光源最近的深度值
float s0 = g_ShadowMap.Sample(g_SamShadow, tex.xy).r;
float s1 = g_ShadowMap.Sample(g_SamShadow, tex.xy + float2(SMAP_DX, 0)).r;
float s2 = g_ShadowMap.Sample(g_SamShadow, tex.xy + float2(0, SMAP_DX)).r;
float s3 = g_ShadowMap.Sample(g_SamShadow, tex.xy + float2(SMAP_DX, SMAP_DX)).r;

// 該像素的深度值是否小於等於陰影圖中的深度值
float r0 = (depth <= s0);
float r1 = (depth <= s1);
float r2 = (depth <= s2);
float r3 = (depth <= s3);

//
// 雙線性插值操作
//

// 變換到紋素空間
float2 texelPos = SMAP_SIZE * tex.xy;

// 確定插值係數(frac()返回浮點數的小數部分)
float2 t = frac(texelPos);

// 對比較結果進行雙線性插值
return lerp(lerp(r0, r1, t.x), lerp(r2, r3, t.x), t.y);

若採用這種計算方法,則一個像素就可能局部處於陰影之中,而不是非0即1.例如,若有4個樣本,三個在陰影中,一個在陰影外,那麼該像素有75%處於陰影之中。這就讓陰影內外的像素之間有了更加平滑的過渡,而不是稜角分明。

但這種過濾方法產生的陰影看起來仍然非常生硬,且鋸齒失真問題的最終處理效果還是不能令人十分滿意。PCF的主要缺點是需要4個紋理樣本,而紋理採樣本身就是現代GPU代價較高的操作之一,因為存儲器的帶寬與延遲並沒有隨着GPU計算能力的劇增而得到相近程度的巨大改良。幸運的是,Direct3D 11+版本的圖形硬件對PCF技術已經有了內部支持,上面的一大堆代碼可以用SampleCmpLevelZero函數來替代。

float percentage = g_ShadowMap.SampleCmpLevelZero(g_SamShadow, shadowPosH.xy, depth).r;

方法中的LevelZero部分意味着它只能在最高的mipmap層級中進行採樣。另外,該方法使用的並非一般的採樣器對象,而是比較採樣器。這使得硬件能夠執行陰影圖的比較測試,並且需要在過濾採樣結果之前完成。對於PCF技術來說,我們需要使用的是D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT過濾器,並將比較函數設置為LESS_EQUAL(由於對深度值進行了偏移,所以也要用到LESS比較函數)。

函數中傳入的depth將會出現在比較運算符的左邊,即:

depth <= sampleDepth

RenderStates中我們添加了這樣一個採樣器:

ComPtr<ID3D11SamplerState> RenderStates::SSShadow = nullptr;

// 採樣器狀態:深度比較與Border模式
ZeroMemory(&sampDesc, sizeof(sampDesc));
sampDesc.Filter = D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT;
sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_BORDER;
sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_BORDER;
sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_BORDER;
sampDesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL;
sampDesc.BorderColor[0] = { 1.0f };
sampDesc.MinLOD = 0;
sampDesc.MaxLOD = D3D11_FLOAT32_MAX;
HR(device->CreateSamplerState(&sampDesc, SSShadow.GetAddressOf()));

注意:根據SDK文檔所述,只有R32_FLOAT_X8X24_TYPELESSR32_FLOATR24_UNORM_X8_TYPELESSR16_UNORM格式才能用於比較過濾器。

在PCF的基礎上進行均值濾波

到目前為止,我們在本節中一直使用的是4-tap PCF核(輸入4個樣本來執行的PCF)。PCF核越大,陰影的邊緣輪廓也就越豐滿、越平滑,當然,花費在SampleCmpLevelZero函數上的開銷也就越大。在本Demo中,我們是按3×3正方形的均值濾波方式來執行PCF。由於每次調用SampleCmpLevelZero函數實際所執行的都是4-tap PCF,所以一共採樣了36次,其中有4×4個獨立採樣點。此外,採用過大的濾波核還會導致之前所述的陰影粉刺問題,但本章不打算講述,有興趣可以回到龍書閱讀(過大的PCF核)。

顯然,PCF技術一般來說只需在陰影的邊緣進行,因為陰影內外兩部分並不涉及混合操作(只有陰影邊緣才是漸變的)。基於此,只要能對陰影邊緣的PCF設計相應的處理方案就好了。但這種做法一般要求我們所用的PCF核足夠大(5×5及更大)時才划算(因為動態分支也有開銷)。不過最終是要效率還是要畫質還是取決於你自己。

注意:實際工程中所用的PCF核不一定是方形的過濾柵格。不少文獻也指出,隨機的拾取點也可以作為PCF核。

考慮到在做比較時,如果處於陰影外的值為1,在陰影內的值為0,在採用SampleCmpLevelZero和均值濾波后,我們用範圍值0~1來表示處於陰影外的程度。隨着值的增加,該點也變得越亮。我們可以使用下面的函數來計算3×3正方形的均值濾波下的陰影因子:

float CalcShadowFactor(SamplerComparisonState samShadow, Texture2D shadowMap, float4 shadowPosH)
{
	// 透視除法
    shadowPosH.xyz /= shadowPosH.w;
	
	// NDC空間的深度值
    float depth = shadowPosH.z;

	// 紋素在紋理坐標下的寬高
    const float dx = SMAP_DX;

    float percentLit = 0.0f;
    const float2 offsets[9] =
    {
        float2(-dx, -dx), float2(0.0f, -dx), float2(dx, -dx),
		float2(-dx, 0.0f), float2(0.0f, 0.0f), float2(dx, 0.0f),
		float2(-dx, +dx), float2(0.0f, +dx), float2(dx, +dx)
    };
                      
	[unroll]
    for (int i = 0; i < 9; ++i)
    {
        percentLit += shadowMap.SampleCmpLevelZero(samShadow,
			shadowPosH.xy + offsets[i], depth).r;
    }
    
    return percentLit /= 9.0f;
}

然後在我們的光照模型中,只有第一個方向光才參与到陰影的計算,並且陰影因子將與直接光照(漫反射和鏡面反射光)項相乘。

// ...
float shadow[5] = { 1.0f, 1.0f, 1.0f, 1.0f, 1.0f };
 
// 僅第一個方向光用於計算陰影
shadow[0] = CalcShadowFactor(g_SamShadow, g_ShadowMap, pIn.ShadowPosH);
    
[unroll]
for (i = 0; i < 5; ++i)
{
    ComputeDirectionalLight(g_Material, g_DirLight[i], pIn.NormalW, toEyeW, A, D, S);
    ambient += A;
    diffuse += shadow[i] * D;
    spec += shadow[i] * S;
}

// ...

由於環境光是間接光,所以陰影因子不受影響。並且,陰影因子也不會對來自環境映射的反射光構成影響。

C++端代碼實現

EffectHelper的引入

本章開始的代碼引入了EffectHelper來管理着色器所需的資源(我們可以無需手動創建並交給它來託管),並應用在了所有的Effect類當中。除了IEffect接口類,目前還引入了IEffectTransform接口類來統一變換的設置。隨着抽象類的增加,像GameObject這樣的類就可以對IEffect接口類對象查詢是否有某一特定接口類或具體類來執行額外的複雜操作。

此外,SkyRender類也因此有了輕微的變動。具體想了解還是去源碼翻閱,這裏不展開。

構建陰影貼圖與更新

首先我們要在GameApp::InitResource中創建一副2048×2048的陰影貼圖:

m_pShadowMap = std::make_unique<TextureRender>();
HR(m_pShadowMap->InitResource(m_pd3dDevice.Get(), 2048, 2048, true));

在本Demo中,光照方向每幀都在變動,我們希望讓投影立方體與光照所屬的變換軸對齊,並且中心能夠坐落在原點。因此在GameApp::UpdateScene可以這麼做:

//
// 投影區域為正方體,以原點為中心,以方向光為+Z朝向
//
XMMATRIX LightView = XMMatrixLookAtLH(dirVec * 20.0f * (-2.0f), g_XMZero, g_XMIdentityR1);
m_pShadowEffect->SetViewMatrix(LightView);

// 將NDC空間 [-1, +1]^2 變換到紋理坐標空間 [0, 1]^2
static XMMATRIX T(
    0.5f, 0.0f, 0.0f, 0.0f,
    0.0f, -0.5f, 0.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.0f,
    0.5f, 0.5f, 0.0f, 1.0f);
// S = V * P * T
m_pBasicEffect->SetShadowTransformMatrix(LightView * XMMatrixOrthographicLH(40.0f, 40.0f, 20.0f, 60.0f) * T);

至於繪製部分,本Demo將和陰影有聯繫的場景對象放入了另一個重載函數DrawScene中(具體實現不在這給出),總體情況如下:

void GameApp::DrawScene()
{
    // ...

    // ******************
    // 繪製到陰影貼圖

    m_pShadowMap->Begin(m_pd3dImmediateContext.Get(), nullptr);
    {
        DrawScene(true);
    }
    m_pShadowMap->End(m_pd3dImmediateContext.Get());

    // ******************
    // 正常繪製場景
    m_pBasicEffect->SetTextureShadowMap(m_pShadowMap->GetOutputTexture());
    DrawScene(false, m_EnableNormalMap);

    // 繪製天空盒
    m_pDesert->Draw(m_pd3dImmediateContext.Get(), *m_pSkyEffect, *m_pCamera);

    // 解除深度緩衝區綁定
    m_pBasicEffect->SetTextureShadowMap(nullptr);
    m_pBasicEffect->Apply(m_pd3dImmediateContext.Get());

    // ...

}

演示

本Demo提供了5種斜率下的方向光,對應主鍵盤数字鍵1-5,Q鍵開關法線貼圖,E鍵開關陰影貼圖的显示,G鍵切換陰影貼圖的显示模式。

透明物體的陰影繪製

但我們的例程還沒有處理透明物體的陰影繪製。如果我們直接在場景中繪製一顆樹(貼圖存在Alpha值為0的部分),可以看到下圖的陰影並不正確:

因此,我們需要在繪製陰影貼圖的時候增加一個像素着色器用以進行Alpha裁剪,把Alpha值低於0.1的紋素給剔除掉,不要讓其寫入到陰影貼圖:

Texture2D g_DiffuseMap : register(t0);
SamplerState g_Sam : register(s0);

struct VertexPosHTex
{
    float4 PosH : SV_POSITION;
    float2 Tex : TEXCOORD;
};

// 這僅僅用於Alpha幾何裁剪,以保證陰影的显示正確。
// 對於不需要進行紋理採樣操作的幾何體可以直接將像素
// 着色器設為nullptr
void PS(VertexPosHTex pIn)
{
    float4 diffuse = g_DiffuseMap.Sample(g_Sam, pIn.Tex);
    
    // 不要將透明像素寫入深度貼圖
    clip(diffuse.a - 0.1f);
}

我們只在繪製樹的時候使用帶有像素着色器的版本,其餘物體照常繪製。並且因為我們的BasicEffect默認繪製就帶有Alpha裁剪,無需做這部分改動。最終效果如下:

練習題

  1. 嘗試4096×4096、1024×1024、512×512、256×256這幾種不同分辨率的陰影貼圖
  2. 嘗試以單次點採樣陰影檢測來修改本演示程序(即不採用PCF)。我們將欣賞到硬陰影與鋸齒狀的陰影邊緣
  3. 關閉斜率縮放偏移來觀察陰影粉刺
  4. 將斜率縮放偏移值放大10倍,觀察peter panning失真的效果
  5. 實現單點光源下的陰影(必要時可以考慮像CubeMap那樣使用6個正方形貼圖)
  6. 修改項目代碼,把繪製房屋改成繪製上圖中的樹(模型已給出),要求陰影显示正確

DirectX11 With Windows SDK完整目錄

Github項目源碼

歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什麼問題也可以在這裏彙報。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

樹莓派使用 OLED 屏显示圖片及文字

樹莓派默認是不帶显示屏的,如果想要查看系統的一些信息,需要使用電腦登錄到樹莓派,或者通過 HDMI 連接外接显示器查看。這樣做總是有點麻煩,我們可以通過外接一個 OLED 屏來显示一些關鍵參數或者圖片。本文將詳細介紹操作方法。

OLED 模組介紹

OLED 屏主要有兩種:128×32 和 128×64 ,主要顏色是白、黃、藍。OLED 屏的特點是功耗低,價格便宜,使用 I2C 接口與主機連接。本文所使用的是 128×64 尺寸的屏幕,外形如下:

它的接口很簡單,只有 4 個 Pin 腳:VCC,GND,SDA,SCL,所以它與樹莓派的連接也很簡單,如下圖所示(本文使用樹莓派 3B):

開啟 I2C 接口

樹莓派默認是不開啟 I2C 接口的,所以我們需要手動打開它。執行以下命令:

$ sudo apt-get install -y python-smbus
$ sudo apt-get install -y i2c-tools
$ sudo raspi-config

然後按以下動圖方式開啟 I2C 功能。

安裝 OLED 屏的 Python 庫

為了在 OLED 屏上显示文字或圖像,我們需要使用到 Adafruit 的 Python 庫,這個庫支持所有的 SSD1306 相關的显示屏,包括 128×32 和 128×64 屏幕。

首先我們需要下載這個庫:

$ git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

然後進入到目錄,再進行安裝:

$ cd Adafruit_Python_SSD1306
$ sudo python3 setup.py install	# 如果使用 Python2 ,則使用對應命令

找到 OLED 模組地址

安裝好 Python 庫之後,我們可以使用 i2cdetect 命令來找到 OLED 屏的物理地址:

$ i2cdetect -y 1

我們會得到類似這樣的輸出:

不同的模組可能得到不同的輸出。這裏我們的 I2C 地址就是 0x3C。如果你使用的是初代樹莓派(256MB的樹莓派1代B),那麼需要使用下面的命令:

$ i2cdetect -y 0

使用 OLED 屏显示圖像及文字

在剛剛下載的那個庫文件里,有一個 examples 目錄,在那個目錄里,我們可以看到以下內容:

  • animate.py
  • buttons.py
  • image.py
  • shapes.py
  • stats.py

這幾個文件我們可以直接運行,比如:

$ python3 shapes.py

這幾個文件運行的結果如下圖示:

屏幕尺寸適配

以上的幾個示例文件里,它們都默認你的屏幕尺寸是 128×32 ,但它們依然可以跑在 128×64 的屏幕上。如果我們想要看得更舒服一點,我們可以將尺寸進行適配。

在每個 Python 文件里,都有下面這麼一段代碼:

這裏也寫得很清楚了,上下兩行代碼分別代表 128×32 和 128×64 的屏幕,使用何種尺寸的屏幕,只需將對應的代碼前面的 # 去掉即可。

公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

新冠病毒有味可尋? 英國計劃訓練狗狗嗅出感染者

摘錄自2020年4月9日香港01 報導

新冠病毒(COVID-19)疫情持續,英國慈善組織「醫療偵測犬」(Medical Detection Dogs)與倫敦衞生與熱帶醫學院(London School of Hygiene and Tropical Medicine)及杜倫大學(University of Durham)合作,研究能否利用狗檢測新冠病毒。

該組織表示,狗是世上最強大的生物探測器之一,能檢測出毒品、爆炸品和食物的氣味,且早已被利用在公共衛生範疇。主席葛斯特博士(Dr. Claire Guest)稱,原則上,一定數量的病毒會改變感染者身上氣味,狗能嗅出當中分別,以識別患者甚至沒有徵狀的感染者;現在研究人員正在尋找方法,讓狗狗可以在安全情況下,嗅出病人身上病毒的氣味;如果研究成功,這種快捷準確且非入侵性的檢測方法,可以大大減輕國民保健服務(NHS)的負擔。

研究人員表示,經訓練的狗約可於六星期內投入檢測病毒工作,預計一隻可在1小時內平均檢測約250人,長遠而言,這些狗日後更可在機場或其他出入境關口為旅客檢測,以預防新一波的疫情爆發。

生活環境
國際新聞
英國
武漢肺炎
公共衛生
動物福利

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!