穴の開かない Marching Cubes 法の lookup table 2種

マーチングキューブ法によるメッシュの生成ではいくつかのケースで曖昧性があり、解像度が不十分だと穴が開いてしまうことがあることが知られていますが、実は分類方法と三角形の作り方を工夫することで穴が開かない lookup table を作ることができます

ググってもすぐに見つからなかったので、lookup table を手動で作るためのツールを作りました。22パターンあって面倒ですが頑張ってください(記事の最後に自分で作ったテーブルを載せておきます)。

Read more… 穴の開かない Marching Cubes 法の lookup table 2種

このエントリーをはてなブックマークに追加

立方体メッシュの頂点と三角形

毎回忘れて計算し直してるのでメモ。
面は反時計回りを表とする三角形で構成されています。適当に加工して使ってください。

頂点

v0 = [-1, -1, -1]
v1 = [-1, -1, 1]
v2 = [-1, 1, -1]
v3 = [-1, 1, 1]
v4 = [1, -1, -1]
v5 = [1, -1, 1]
v6 = [1, 1, -1]
v7 = [1, 1, 1]

[[v1, v2, v0], [v1, v3, v2]] // -x
[[v5, v4, v6], [v5, v6, v7]] // +x
[[v1, v0, v4], [v1, v4, v5]] // -y
[[v3, v7, v6], [v3, v6, v2]] // +y
[[v0, v2, v6], [v0, v6, v4]] // -z
[[v1, v5, v7], [v1, v7, v3]] // +z

このエントリーをはてなブックマークに追加

浮動小数点数を pack して得た整数を同じサイズの浮動小数点数として保存してはならない

やってしまいました。

ここに vec2 の変数があります。

vec2 v;

各要素の精度を 16 ビットまで落として、一つの 32 ビット整数に pack します。

uint a = packHalf2x16(v);

そのままでは出力できなかったので、同じく 32 ビットの浮動小数点数である float に変換して書き出します。

float output = uintBitsToFloat(a);

次読んだときにはデータは消えていました。

Read more… 浮動小数点数を pack して得た整数を同じサイズの浮動小数点数として保存してはならない

このエントリーをはてなブックマークに追加

Clock: 解説

特殊な物理シミュレーションを利用したデジタル時計 Clock を公開しました。

以下、一見不可解な動きがどのようにして実現されているかの解説となります。

まだ作品を見ていない人は、先に動きを観察して仕組みを考えてみるとより楽しめると思います。

Read more… Clock: 解説

このエントリーをはてなブックマークに追加

浮動小数点数テクスチャの対応状況が奇妙なデバイスが存在している件

先日とある方からの報告により発覚したのでメモ。
WebGL で浮動小数点数テクスチャ (float, half-float) を使うときに注意しておかないと、特定のデバイスで「本当はサポートされているのに浮動小数点数テクスチャが使えない」状況に陥ります。

Read more… 浮動小数点数テクスチャの対応状況が奇妙なデバイスが存在している件

このエントリーをはてなブックマークに追加