Three.js ConvexGeometry 多面体
質問をさせていただいてもよろしいでしょうか?
「それぞれあらかじめ設定された方向に向かって、中心から、それぞれ変数に応じた距離に頂点を複数設置し、それらを結んで多面体を生成する」
という制作に現在挑戦しております。
そこで、ConvexGeometryを使ってみました。
(図1)は変数でなく一律の定数で多面体を描画したものです。
しかし、ConvexGeometryの仕様が「凸包」のため、
外側に出っ張る分には良い(図2)のですが、
距離が比較的短い頂点(値が小さい変数)が生じた場合は、
図形に埋もれて隠れてしまうという問題に直面してしまいました。
(図3で隠れた頂点は本来中心に位置しています。)
全ての頂点情報が図形に反映されるようにしたいです。
ConvexGeometryですが、埋没した頂点は削除されるのが仕様になっているようです。
一番自由度が高いのがGeometryらしいので、そちらの方を使うと上手くいくかもしれません。
ConvexGeometry
ConvexGeometry - three.js wiki - アットウィキ
Geometry
https://threejs.org/docs/index.html?q=geom#Reference/Core/Geometry
この記事は、webgl-jp Slack内の情報を元に構成されています。
WebGL 波動 拡散
WebGL Canvas2D 原点位置の違い
この記事は、webgl-jp Slack内の情報を元に構成されています。
canvas2dで画像を読み込み、各頂点色を抜き出し、抜き出した色をパーティクルに適応するということをやっているのですが、canvas2dとwebglの原点位置の違いから、画像が90度反時計回りに表示されています。
多分行列で回転掛けるのだと思うのですが、javascriptのFloat32Arrayは1次元配列なのでそのままじゃ計算できない気がします。
これは WebGL 云々というより、パーティクルに相当する頂点のひとつひとつに、どのように色をアタッチするのかを変えることによって解決すべきじゃないかな。
行列なんかで回転させる処理を記述してしまうと、そのあとが大変になってしまいそう。
たとえば、一次元配列の imagedata を、恐らく二重の for ループとかで処理していると思うんですけど、外側と内側との役割を反転させるだけでも、色のアタッチされる順序が変化するような気がするけど、どうですかね。
上のコードに、そのまま imagedata から抜いてきた色を適用するとしたらを下に書きますね。
要は RGBA ごとに格納されている一次元配列の imagedata から、きちんと縦方向と横方向が破綻しないように色を抜き出して VBO の元になるデータに突っ込むわけです。
altJS JavaScriptの代替
この記事は、webgl-jp Slack内の情報を元に構成されています。
みなさんAltJS何使ってるんですかね。現在はTypeScriptなのですが、Hexeに移行しようと思って、ちょっと気になりました。
Hexeに詳しくないんですがTypeScriptだと何か問題ありました?
画作りのアルゴリズムをなるべく簡潔に書くことを目的としてるので、ASライクなHexeに惹かれてるという。
TSは悪くないんですけどね。やっぱり事前の設定の手間がまだまだ多いなあとは思ってます。
あとコンパイル先が柔軟な点とか、独自のアニメーションライブラリとかですね。Hexe使ってる人がまわりにあまりいないので、少しここらへんの事情は気になりますね。
TweenXCore - lightweight motion library for haxe
独自にeasingを作れるこいつと併用すると良い的な情報がタイムラインに流れてきたのがきっかけですかね。
Hexe自体がASの後継をめざしてるっぽく、独自のグラフィックライブラリを使ってサクッとゲーム作れたりすることが売りだそうです。
WebGL Geometryを作る数学 波紋
この記事は、webgl-jp Slack内の情報を元に構成されています。
bloomを使ってみたくて、波を作ってみました。
波紋の動きは、いるかのボックスさんの記事を参考にさせていただきました。
いるかのボックス: Three.jsで波紋エフェクトをつくる
CircleGeometryでは間に頂点を増やせないな、と思っていたら、RingGeometryという素晴らしい形状がありました。
既存のジオメトリを工夫してつかうだけでもいろいろできそうですね。
こんな数式を叩いたらこういうGeometryになりますよ、みたいなまとめってどっかに落ちてたりしますか?
頂点組み立てるための、ってことですか?
レイマーチの距離関数とかは結構あるけどね。
ロジカルに数式的なもので表現できる場合は「数学さえ」ちゃんとわかっていれば結構書けます。
http://www.3d-meier.de/tut3/Seite0.html
こちらの数式を用いると色々生成できます。
参考情報です。
Three.js ColorMap LookupTable
three.jsにcolormap lookup tableがあるのを知りました。
データ値の範囲からカラー値を決定するために使用されるようです。
コンストラクタ Lut( colormap, numberOfColors )
colormapは、カラーマップを設定する引数。使用可能なカラーマップは、"rainbow", "cooltowarm", "blackbody"です。
numberOfColorsは、データ配列を表すために使用される色の数を設定する引数。
詳細はこちらです。
https://threejs.org/docs/#examples/Lut
https://threejs.org/examples/webgl_geometry_colors_lookuptable.html
cx20さんのサンプルです。コメントで教えていただきました。