TP Notes
全部
CSS
SVG
資源收集
HTML
其它
關於我
2020年6月4日 星期四
用 CSS 畫 3D 物件
第一次看到只用 CSS 就可以畫 3D 物件覺得非常神奇, 想當初在設計導航程式時,在那記憶體只有 16M 的機器上,要跑全台灣/全中國地圖,而且導航除了需要旋轉地圖到行進方向,最好還要有 2.5D 的斜角視圖才可以看到遠方更多的資訊,當時所有計算全部自己寫,光旋轉就要一堆 sin , cos 的計算,而現在只要一行指令就可以旋轉了...... 3D 的基礎,投影面和視點, 在 CSS 上也必須分層建立好 首先先建一個 view 裡面指定投影距離 **perspective:400px;** 在 view 裡頭建立 camera , 這裡有個很重要的參數 **transform-style: preserve-3d;** 然後在 camera 裡再建立 obj , 同樣的這裡也必須加上 **transform-style: preserve-3d;** ,然後就可以在 obj 中放面的資料 最簡單的範例如下 : ``` $mmcode(r0) ```
------------------------------------- 如果只有一個物件,可以省略 obj 那一層,也就是每個面都是一個物件的概念, 例如以下範例,利用八個面組成一顆鑽石
``` $mmcode(r3) ```
------------------------------------- 掌握這個方式後,就可以開始玩 3D 了,這裡寫了一個有趣的展示,只用 CSS 就可以做出早期德軍總部的隧道畫面,這裡用了一個參數 **backface-visibility: hidden;-webkit-backface-visibility: hidden;** 可以把背對的面隱藏,在這個範例中我有偷懶一下,並沒有把所有的面都設到正確的方向,只有一個 aa2 那個面需要在背對時隱藏。
``` $mmcode(r1) ```
--------------------------------- 加上 javascript 產生面, 可以做個球, 只要花點時間,光靠 CSS 就可以做出旋轉地球了呢 !
``` $mmcode(r2) ```
------------------------------------ 因為 div 是矩形, 雖然可以利用 clip-path 來做裁切,但是裡頭的貼圖並不會跟著變形,如果把解析度提高,那麼每個面都會接近矩形,效果很不錯,只是效能會很差,在調整了一下適當大小,又用了些偷懶的方式,沒有精算的很準確, 最後附上旋轉五色鳥做為這篇的結束,
``` $mmcode(r5) ```
沒有留言:
張貼留言
‹
›
首頁
查看網路版
沒有留言:
張貼留言