csgjs-cppを使って3次元ブーリアン演算をやってみた

csg.jsのc++版であるcsgjs-cppを使って3次元ブーリアン演算をやってみました.

demo_csgjs-cpp

はじめに

最近, アルバイトの関係でCSG(空間領域構成法)を扱っています.

空間領域構成法: Constructive Solid Geometry, CSG)はソリッドモデリングで使われる技法のひとつである。CSGは手続き的モデリング技法として3次元コンピュータグラフィックスCADでしばしば使われる。ブーリアン演算を使って複雑な表面やオブジェクトを生成することができる。

Constructive Solid Geometry における操作
ブーリアン演算の
和集合
ブーリアン演算の
差集合
ブーリアン演算の
共通部分
CSG Union の例 CSG Difference の例 CSG Intersection の例

wikipedia – Constructive Solid Geometry

調べてみると各言語でいろんなライブラリが提供されています.

その中でもcsg.jsが簡単で使いやすかったです.

仕事の都合上, c++で実装する必要が会ったのですが, なんとcsg.jsのc++版がGitHubで公開されていました.

しかもMITライセンス.

ありがたや.

csgjs-cppのExampleを公開

このcsgjs-cppリポジトリにはcsgjs.cpp本体しか入っていません.

このままでは使いづらかったので, そのヘッダーファイルとサンプルコードを作りました.

csgjsモデルの可視化

こんな簡単に3次元のCSG処理が出来てしまって良いのかというほど手軽に扱えるcsgjs.

演算結果を確認するためopenFrameworksを利用して, csgjs.cpp内で定義されているcsgjs_modelを可視化するプログラムを用意しました.

demo_csgjs-cpp

このサンプルでは, 2つの正方形モデル(赤, 緑)とその積演算の結果(青)を描画しています.

ただ, ここで一つ問題点.

よく見ると分かるんですが, 演算結果の頂点座標が一つ足りません. 描画部分が間違っているなら正方形モデルにも同じ現象が起こるはず. しかし, 正方形モデルは問題なく描画されています.

時間があるときにチェックしたほうが良さそうです.

スポンサーリンク
スポンサーリンク