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

はじめに

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

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

wikipedia - Constructive Solid Geometry

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

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

https://github.com/evanw/csg.js

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

しかもMIT ライセンス.

ありがたや.

https://github.com/dabroz/csgjs-cpp

csgjs-cpp の Example を公開

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

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

https://github.com/icchi-h/csgjs-cpp

csgjs モデルの可視化

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

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

https://github.com/icchi-h/plot-csgjs-cpp-model>

demo

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

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

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

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