AR 3Dモデル
とろろ昆布  2019/05/23(Thu) 13:59
ARマーカーから3Dモデルを出現させることは可能でしょうか?
記事編集
Reputeless  2019/05/23(Thu) 21:12
不可能ではありませんが、難しいので OpenSiv3D に実装されるのを待ったほうが良いです。
旧 Siv3D で AR マーカーの 3D 位置と回転情報を取得するサンプルです↓

# include <Siv3D.hpp>

void Main()
{
Webcam webcam(0);
webcam.start();

const double markerSize_m = 0.05; // マーカーのサイズ (m)
webcam.startAR(markerSize_m, L""); // 第二引数にカメラのカリブレーション情報 (XML)のファイルパス

DynamicTexture texture;
Array<ARMarker> markers;

const Font font(40, Typeface::Bold);

while (System::Update())
{
if (webcam.hasNewFrame())
{
webcam.getFrame(texture);
}

if (webcam.hasNewMarkers())
{
webcam.getMarkers(markers);
}

texture.draw();

for (const auto& marker : markers)
{
marker.pos; // 3D の位置情報
marker.rotation3D; // 3D の回転情報

marker.quad.drawFrame(4, Palette::Red);

font(marker.id).drawCenter(marker.screenPos, Palette::Red);
}
}
}


カメラのカリブレーションファイルは、
OpenCV 2.4.X に付属するサンプル samples/cpp/calibration.cpp に従って作成されている必要があります。
例: https://gist.github.com/Reputeless/6eb8574cd1c31eb4e200876e40b798ec
編集
とろろ昆布  2019/05/24(Fri) 00:25
そうなんですか、何度も質問して申し訳ないのですが
こちらの画像の様な事をするのが難しいという事でしょうか?
この様なものを作るのにカメラキャリブレーションが必要という事でしたら試してみます。



編集
Reputeless  2019/05/24(Fri) 10:11
上記のコードを使えば実現できます。
編集
とろろ昆布  2019/05/24(Fri) 14:29
上記のコードで上記のリンクからcamera.xmlをダウンロードし、第二引数にL"camera.xml"といれた結果例外cv::Exceptionと出ました。何度も質問してもうわけないのですが解決方法はありますか?
編集
Reputeless  2019/05/24(Fri) 16:39
XML ファイルは BOM なしの形式で保存してください。
ファイルが正しいパスにない場合も同様の例外が発生します。
編集
とろろ昆布  2019/05/24(Fri) 22:02
ありがとうございます。例外の方は解決できました。
質問が重なってしまい大変申し訳ありませんが、もう一つお聞きしたいです。
上記のソースコードではサンプル同様、マーカーIDが表示されるコードになっていますが、
const Model model(L"Example/Well/Well.wavefrontobj")を用いて3Dモデルをマーカー上に
出現させるにはどの様なコードを加えたらよいでしょうか?model.draw()だけでは平面の画像
だけしか出ないので困ってました。
編集
Reputeless  2019/05/26(Sun) 09:45
描画順序が 3D → 2D なので、Graphics::Render2D(); を使って
2D → 3D → 2D としてみてください。
編集
とろろ昆布  2019/05/27(Mon) 00:27
  〜省略〜
texture.draw();

for (const auto& marker : markers)
{
marker.pos;
marker.rotation3);

Graphics::Render2D();

model.draw();
}
今上記のような状態ですが、2D→3D→2Dということは
2D(カメラのtexture.draw)→3D(3Dモデルのmodel.draw)→2D(?)ともう一つ必要ということでしょうか?
現在の状態では、マーカを認識すると2Dで3Dモデルが出てくる状態です。
編集
とろろ昆布  2019/05/27(Mon) 12:08
追記
マーカを認識して3Dモデルは描画されていますが、
スクリーンの中央に出ていて、カメラを動かしても一面しか見れない状態です。
編集
Reputeless  2019/05/27(Mon) 22:32
Graphics::Render2D() は 1 フレームで何度も呼ばないでください。


・2D や 3D を draw
・Graphics::Render2D();//ここで2Dだけ画面に描画される
・2D や 3D を draw
・// まだ画面に描画されていないものが 3D → 2D の順で画面に描画

の順序が基本です。

model.draw() では Vec3(0,0,0) に表示されるだけなので、工夫して適当な座標に表示してください。
編集
とろろ昆布  2019/05/27(Mon) 22:56
色々とありがとうございました。
なんとかやりたいところまでできました。
編集
件名
Re: AR 3Dモデル
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -