.wp-block-jetpack-rating-star span.screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal; }

サイトアイコン NegativeMindException

CGALDotNet:計算幾何学ライブラリ CGALのC#ラッパー

プログラムでポリゴンジオメトリを何かしら操作するなら、C++で利用できる計算幾何学ライブラリCGALが有名ですね。色々なアルゴリズムが実装されていて便利。

Unity C#環境で使える似たようなライブラリが無いかと探してみたら、そのものズバリC++のCGALをC#でラップしたCGALDotNetというライブラリがUnityのフォーラムで紹介されていた。

CGALDotNet



CGALはcomputational geometric algorithm library(計算幾何学アルゴリズムライブラリ)の略で、三角形化、ボロノイダイアグラム、ポリゴンと多面体のブール演算、ポイントセット処理、曲線の配置、サーフェスとボリュームメッシュの生成、ジオメトリ処理、アルファシェイプ、凸包アルゴリズム、形状の再構築など、様々なアルゴリズムを提供します。

計算幾何学アルゴリズムには、(浮動小数点などの)計算精度の問題に影響されて無効な結果を生成してしまうものも多くあります。CGALでは、計算精度を損なうことなく任意の数値を扱える正確な数値表現を提供することでこの問題を解決しています。この正確な数値表現は高度に最適化されていますが、パフォーマンスにはトレードオフがあります。正確な結果よりも処理速度が必要な場合、CGALは倍精度を使用した不正確な数値表現も提供しています。

CGALDotNetはC++で書かれたライブラリCGALのC#ラッパーであり、CGALへの手軽なアクセスを提供しますが、いくつか制限があります。CGALDotNetは、ポイント、ベクトル、ボックス、円など、CGALにデータを渡すための様々な幾何学的構造体を提供しています。これらのC#構造体は倍精度に制限されているため、CGALとのデータ受け渡しの際に精度が損なわれる可能性があります。

以下は正確な数値表現でポリゴンを作成する例です。

//create some points.
var points = new Point2d[count];

//create a polygon using the exact predicates exact construction kernel.
var polygon = new Polygon2<EEK>();

//set the polygons points.
polygon.SetPoints(points);

以下は不正確な数値表現でポリゴンを作成する例です。


スポンサーリンク
//create some points.
var points = new Point2d[count];

//create a polygon using the exact predicates inexact construction kernel.
var polygon = new Polygon2<EIK>();

//set the polygons points.
polygon.SetPoints(points);

この正確な計算(exact computation)のパラダイムについては、CGALのページのを参照してください。

CGALDotNetはまだ開発途上で、現在は64ビットのWindows向けバイナリしか提供されていないらしい。
ジオメトリオブジェクトのCGALDotNetGeometryなど、関連するリソースがいくつか別リポジトリで管理されているようだ。



別プロジェクトのCGALDotNetUnityにUnityで利用する場合のサンプルがあり、Unityのデータ形式とCGALDotNetのデータ形式を相互に変換するための拡張メソッドが提供されている↓

Unity Extensions

CGALDotNetは他のプロジェクトから独立するように設計されていますが、C#で記述されているのでそのままUnityと併用できます。

CGALDotNetUnityプロジェクトには、UnityのオブジェクトとCGALDotNetのオブジェクト間の変換を支援する拡張メソッドが用意されています。

以下に例を示します。

//These extension methods need the numeric namespace.
using CGALDotNetGeometry.Numerics;

//Create a CGALDotNet point.
var point1 = new Point3d();

//Convert it to a unity vector.
var vector = point1.ToUnityVector3();

//And back to a CGALDotNet point.
var point2 = point1.ToCGALPoint3();

ポイントやベクトルの配列、レイやボックスなどの形状にも似たメソッドが用意されています。
ポリゴンをGameObjectに変換するメソッドもあります。

//These extension methods need the polygon namespace.
using CGALDotNetGeometry.Polygons;

//Create a polygon.
var polygon = new Polygon2(points);

//Convert polygon to a game object with a triangulated mesh of the polygon.
//Polygon points are 2D and will be converted to 3D for the mesh.
var mesh = polygon.ToUnityMesh("polygon", position, material);

ちょっと触ってみたところ、CGAL側で作成したポリゴンをUnityのGameObjectとして表示するのは楽だけど、UnityのGameObjectからCGALへポリゴンを持って行く方法はあまり整備されてないみたい。


スポンサーリンク

関連記事

BGSLibrary:OpenCVベースの背景差分ライブラリ

Google Colaboratoryで遊ぶ準備

OpenMayaRender

書籍『開田裕治 怪獣イラストテクニック』

映画『ミュータント・タートルズ』を観てきた

C++始めようと思うんだ

機械学習で遊ぶ

OpenCVで動画の手ぶれ補正

ZBrushで仮面ライダー3号を造る 仮面編 Dam Standardブラシでディティールを彫る

Pylearn2:ディープラーニングに対応したPythonの機械学習ライブラリ

Photo Bash:複数の写真を組み合わせて1枚のイラストを制作する

タダでRenderManを体験する方法

トランスフォーマーの変形パターンを覚えるのは楽しいと思うんだ

ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...

ZBrushCore

シン・ゴジラのファンアート

Cartographer:オープンソースのSLAMライブラリ

プログラミングスキルとは何か?

『ゴジラ キング・オブ・モンスターズ』のVFXブレイクダウン

WordPressプラグインによるサイトマップの自動生成

Unity MonoBehaviourクラスのオーバーライド関数が呼び出される順番

BlenderのPython環境にPyTorchをインストールする

ラクガキの立体化 目標設定

ちょっと凝り過ぎなWebキャンペーン:全日本バーベイタム選手権 (MITSUBISHI KAGAKU...

ZBrushでアヴァン・ガメラを作ってみる おでこ(?)のバランス調整

Iridescence:プロトタイピング向け軽量3D可視化ライブラリ

Stanford Bunny

色んな三面図があるサイト

Windows Server 2008にAutodesk Maya 2009をインストール

ZScript

Autodesk CompositeとAutodesk MatchMoverが無料

ZBrushでアヴァン・ガメラを作ってみる 爪とトゲを追加

法線マップを用意してCanvas上でShadingするサンプル

AMIMOTO(PVM版)で作成したインスタンスをAMIMOTO (HVM版)へ移行する

天体写真の3D動画

フルCGのウルトラマン!?

OpenCV 3.1のsfmモジュールのビルド再び

ラクガキの立体化 3Dプリント注文

機械学習のオープンソースソフトウェアフォーラム『mloss(machine learning ope...

PGGAN:段階的に解像度を上げて学習を進めるGAN

Point Cloud Utils:Pythonで3D点群・Meshを扱うライブラリ

Amazon EC2ログイン用の秘密鍵を無くした場合の対処方法

モバイルバージョンを終了