第22羽「少女はテクスチャを纏いCSSを駆りてDOMツリーを行く」
この記事はごちうさ住民 Advent Calendar 2014 22日目の記事です。
こんにちは、@spring_rainingです。これを書いてる時点でアドベントカレンダーの掲載日を過ぎてます。ごめんなさい。
ごちうさ、かわいいですね。ごちうさに登場してくる女の子はみんなかわいいですが、リゼちゃんのふとももとか、最高だと思います。
こんなに素晴らしい曲線美が地球上に存在していいのだろうか
まあ、それはともかく、まずはこちらをご覧ください。(ご覧になれない人はhttp://harusamex.com/rizeに行くとご覧になれるかもしれないです)
かわいいですね。 上のリゼちゃんはドラッグやタッチで回転できるようになっていますが、実はこれはFlashやWebGLを使わず、CSSだけで実装されています。
追記(12/24):FirefoxやSafariだとちゃんと表示されないようですね・・・Chromeで見てみてください。
この通りDOM要素です。
どういう仕組みで動いているかというと、CSSにはtransformというパラメータがあり、このパラメータの3D変形機能を用いて、各ポリゴンをゴリゴリと3D空間上に置いています。
作りかた
まず、Sculptrisというソフトを使ってモデルを作ります。モデルはブラウザで表示できる程度にまでポリゴン数を落とした後、テクスチャを描きます。
出来上がったモデルからobjファイルと画像ファイル(png)を書き出します。このobjファイルというものは、テキストエディタで開くと分かると思いますが、かなり平易な形式で記述されています。
# OBJ Exported from DrPetter's Sculptris # symmetry 0 usemtl (null) s 0 v 0.490645 1.694354 0.392749 v -0.074690 1.963091 -0.144505 v -0.060433 1.679857 0.671068 v 0.075310 0.478687 0.689210 v 0.237354 0.559744 0.663182 v 0.126801 0.628651 0.706207 : : :
この情報を元に、テクスチャが描かれている画像ファイルから、
これを、transformを使って全てのポリゴンを3D空間に配置すると、3Dモデルが出来上がります。
ただしtranslate3d
を使うだけではペラペラになってしまうので、transform-style
をpreserve-3d
に、perspective
に適当な値を入れておきます。
このプログラムはgithubに上げてるので、objファイルを持ってる人はよければ試してみてください。
spring-raining/CSSRize · GitHub
まとめ
無理せずWebGLを使ったほうが良いと思います。
*1:canvasを使ってる時点でCSSだけで表示するという目的とは外れてる気がしますが、三角形自体はJavaScriptを使わなくても作れます!!という苦しい言い訳🙇🙇🙇