2018年06月11日

glTFのテスト その2

とりあえず読込みできるようになったので、前から作っているGUIに組み込んでみました。
テクスチャがおかしかった問題ですが、モデルによっては頂点カラーのみで、テクスチャ座標を持たないメッシュがあり、こちらで使っている中間データは頂点数=テクスチャ座標数で考えていたので、テクスチャ座標を持たないメッシュがあるとインデックスがずれてしまっていたのが原因でした。

実行結果

いくつかsketchfabのデータを表示してみましたが、大体は問題なさそうです。今回は[1]のデータを表示させていただきました。

glTF_test_002.png

[1] https://sketchfab.com/models/011dc1e272be4245bfe2f7e72503f6ab#
web拍手 by FC2
posted by シンドラー at 22:19 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2018年05月31日

glTFのテスト

いつの間にか5月が終わりましたね。何となくglTF[1]対応をしてみようと思いました。
Khronos Group提唱ですので、OpenGLとの親和性が高そうですね。

今回は[2]のライブラリを使用させていただいて、とりあえずファイルを読み込んで.objに変換してみました。
nodeにmatrixやquaternion等の情報が親子関係で定義されていて、そこにmeshが関連付けられています。
meshにはmaterialやaccessorが関連付けられていて、bufferやimagesから各種データを取り出すことができます。
positionはオブジェクト座標ですので、nodeに記述されている位置姿勢を掛けていく行列操作も必要です。

実行結果

sketchfabというサイトではモデルを全てglTFで保存できるようになっているようで、今回は[3]のモデルをテストとして使用させていただきました。行列掛ける順番間違えたり結構苦労して、まだテクスチャ座標がおかしそうですが、とりあえずMeshLabで表示できたので、おおよその読み込みはできたと思います。

glTF_test_001.png

[1] 次世代の3Dデータフォーマット決定版 glTF 2.0 の概要図を日本語訳してみた
[2] Header only C++ tiny glTF 2.0 library
[3] sketchfab - Oculus Rift CV1
web拍手 by FC2
posted by シンドラー at 22:27 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2018年04月30日

SFMLのテスト その4

いつの間にか4月が終わりますね。5x5では狭いので15x15に広げてみました。後はCSVファイルを読み込めるようにしてみました。解き方も色々工夫できそうですが、なかなかアルゴリズム考えるのも難しいですね。

実行結果

参考として[1]の問題を使わせていただきました。簡単な問題しか解けませんね。

sfml_tgui_001.png
CSV読込み

sfml_tgui_002.png
1回目

sfml_tgui_003.png
2回目

[1] https://www.minicgi.net/logic/
web拍手 by FC2
posted by シンドラー at 18:35 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2018年04月04日

SFMLのテスト その3

TGUIのテストです。お絵描きロジックを自動で解くプログラムでも作ってみようということで、GUIを作ってみました。数値を入力するためのEditBoxと、塗りつぶす所と除外する所の画像を切り分けたかったので、BitmapButtonを使うことにしました。

TGUIにはgui-builderというソフトウェアが付いていますので、基本的な配置はこれを使って行って、後はテキストを編集すると早いかもしれません。

TGUI_002.png

form.txtなどのテキストファイルに出力すると、プログラムから読み込むことができます。
    gui.loadWidgetsFromFile("form.txt");
後はconnect使ってコールバック関数を実装すれば良いかと思います。Gridというクラスがあったので、これを使えば今回のようなプログラムには有効そうでしたが、今のところ無理やりGUIのポインタ経由で操作しています。

後はExampleのMany different widgetsで使われていますが、Themeを使うと比較的楽に部品の設定ができる気がします。

実行結果

TGUI_003.png

とりあえず各行と各列をチェックして、5の時は全部埋めて、0の時は全部×を付ける処理だけ実装しました。ちゃんと解こうとすると大変そうですが、5x5だとあまりパターンもないので楽かもしれません。



web拍手 by FC2
posted by シンドラー at 00:34 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2018年03月31日

SFMLのテスト その2

SFML対応のGUIの一つであるTGUI[1]を試してみました。スライダーやボタン、エディットボックスなど色々使えるみたいです。

CMake使ってソースからコンパイルしてもいいですが、バイナリもダウンロードできます。今回は手軽にバイナリから使いました。サイトにチュートリアルや例題があるので、それを見れば特に問題はないかと思います。

実行結果

例題のScalable login screenです。背景画像はLenna画像に差し替えました。

tgui_test_001.png

いつも使っているTweakBarは、どちらかというとメニュー優先っぽいので、ボタンやエディットボックスを含むGUIを手軽に使いたい場合は良いのではないでしょうか。

[1] TGUI: Texus' Graphical User Interface
web拍手 by FC2
posted by シンドラー at 22:03 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2018年03月15日

curlとCrypto++によるhttps通信についてのメモ

仮想通貨も色々問題が出て価格も下がって大変ですね。プログラムの題材としては良い気もするのですが。以前ZaifのサイトからデータをGETするためにlibcurlとμjsonを使っていたのですが、トレードまで行うためにはPOSTと暗号化が必要になります。

[1]より引用
    signはPOSTする全てのパラメータ(nonceとmethodおよびメソッド毎のパラメータ)を
    URLエンコードしたクエリ形式(param1=val1&param2=val2)のメッセージとして、
    Secret Keyを用いてHMAC-SHA512で署名します。
よく分かりませんが、[2]のPythonのサンプルコードを参考にさせていただくと、サイトで発行できるSecret Keyを使ってHMAC-SHA512に従って署名したデータをHEADERに付けてPOSTするようです。ということで、C++でHMAC-SHA512が使えるライブラリを探したところ、Crypto++[3]というライブラリがありました。

HMACのサンプル[4]を参考にさせていただきましたが、Secret Keyは既に16進数のデータだったのですが、サンプルコードは文字列を16進数に変換する関数も実行されていたので、2回16進数変換をしていてPythonを使った時と結果が異なるのでちょっと悩みました。そのままコピペは駄目ですね。

後はlibcurlを使ってPOST処理を行います。注意点としては、CMakeでライブラリをコンパイルする場合はhttpsをサポートするようにOpenSSLなどのオプションを選ばないといけないことと、httpsを使うときにはcurl-ca-bundle.crtが無いとエラーが出ますので、準備する必要があります。POST処理は[5][6]を参考にさせていただきました。

これでPOST処理がうまくいけば、JSON形式のデータが戻ってきますので、μjsonを使ったり使わなかったりしながら必要なデータを取り出せば一応取引まで可能になります。

後はRaspberry Pi上で動かしているので、ライブラリに関するメモです。libcurlとopensslはapt-getで取得できます。ライブラリがどこにあるのかと思えば/usr/lib/arm-linux-gnueabihf/とかarm-linux-gnueabihfがついた場所に入れられるみたいです。Crypto++はmakeで普通にインストール・動作しましたので、特に問題ないかと思います。

[1] Zaif api document v1.1.1 現物取引API
[2] 個人投資家のためのFinTechプログラミング (日経BPムック)
[3] Crypto++: free C++ Class Library of Cryptographic Schemes
[4] Crypto++ Wiki: HMAC
[5] Post data with libcurl
[6] Http post header fields with libcurl

web拍手 by FC2
posted by シンドラー at 21:20 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2018年03月01日

Appleseedレンダリングエンジンのテスト その12

気がついたら2月が終わっていました…。特に内容を思いつかなかったので小ネタです。
AppleseedレンダラのGlass BSDFを試してみました。モデルは[1]をobjに変換して使用させていただいております。

Appleseedレンダラでモデルを読み込む場合は、オブジェクトタグで定義します。filenameのところにファイル名を書きます。読み込んだオブジェクトはoutという名前で参照できるようにしています。
    <object name="out" model="mesh_object">
        <parameter name="filename" value="glass.obj" />
    </object>
オブジェクトタグで定義したものは、インスタンスとして実体化させる必要があります。
    <object_instance name="out.obj_0_1_inst" object="out.obj_0_1">
        <transform>
            <matrix>
                1.0 0.0 0.0 0.0
                0.0 1.0 0.0 -5.705
                0.0 0.0 1.0 0.0
                0.0 0.0 0.0 1.0
            </matrix>
        </transform>
        <assign_material slot="material_0_1" side="front" material="material_0_1" />
        <assign_material slot="material_0_1" side="back" material="material_0_1" />
    </object_instance>
out.obj_0_1_instがインスタンス名、out.obj_0_1がobjファイルの中に定義されているグループ名だったと思います。out+.の形で子グループにアクセスする感じだと思います。このように、objファイルは1個でも、中に複数グループがあればグループ1個ずつインスタンスを生成することができます。

matrixはモデリング行列です。スケーリング調整、回転、平行移動などさせたい場合はここを変更します。この例では5.705だけY軸方向に下げています。一番右の列が平行移動になるので、行列の転置に気を付ける必要があります。後、この行列はappleseed.studioからは編集できなかったと思います。基本的には他のモデリングソフトのプラグインを使ってくださいということだと思います。

assign_materialがマテリアルの割り当てです。透明な物体の場合はfrontとbackの両面を定義していないとピンク色になってしまいます。

実行結果

中の液体と泡はAlphaを0.5ぐらいにしたLambertモデルだったと思います。グラスの部分は両面デフォルトのGlass BSDFです。液体のあたりは本当はもうちょっと別の設定がいるのかもしれませんが、グラスの部分はグラスっぽいと思います。

appleseed_glass_test_001.png

[1] 発泡ワインセット

web拍手 by FC2
posted by シンドラー at 18:14 | Comment(0) | Rendering | このブログの読者になる | 更新情報をチェックする

2018年01月28日

Appleseedレンダリングエンジンのテスト その11

いつの間にかAppleseed Renderer[1]のバージョンが1.8.1-betaまで上がっていました。1.7でPlastic BRDFというものが実装されていましたので、試してみました。他にもGlass BSDFとかMetal BRDFなど、色々なBRDFが増えているようでした。

実行結果

昔作っていたプログラムでPlastic BRDFのパラメータも出力できるようにしてみました。また、サンプルのCornell Boxを参考に、Cornell Boxの外側だけ出力するようにしました。モデルは以前と同じTda式改変憤怒ミクさんを使用させていただいております。

以前のもの(壁はLambertian、モデルはOren+Ashikhmin)
tda_roku_cornell_ashikhmin2.png

Plastic BRDF(壁もモデルもPlastic)
tda_roku_cornell_plastic2.png

パラメータはデフォルトのものなので調整すればもっと良くなるかもしれません。時間があくと自分で作ったプログラムの操作方法忘れてて困ったものです。

[1] https://appleseedhq.net/
web拍手 by FC2
posted by シンドラー at 18:27 | Comment(0) | Rendering | このブログの読者になる | 更新情報をチェックする

2018年01月20日

SFMLのテスト

結局使いませんでしたが、お絵かきロジックのソフトウェアをSFMLで作ろうかなと考えていたのでサンプルまでの手続きをメモっておきます。

SFMLはマルチメディアライブラリで、下記のモジュールで構成されています。
System:
コアモジュールです。2次元及び3次元ベクトルクラス、時計、スレッド、Unicode文字列などを提供します。
Window:
アプリケーションウィンドウを作成できます。マウスやキーボードなどのユーザ入力を扱えます。
Graphics:
画像やテキスト、形状や色など2次元の描画機能を提供します。
Audio:
音楽の読込やスピーカを使った再生などの機能を提供します。
Network:
ネットワークもカバーしており、HTTPやFTPのプロトコルでLANやインターネットを通じてデータを送ることができます。

モジュールの詳細についてはドキュメントを参照してください。
http://www.sfml-dev.org/documentation.php

SFMLはオープンソースで、ライセンスはzlib/libpngライセンスです。商用/非商用どちらでも使用できます。

ダウンロードとインストール
ビルド済みのライブラリをダウンロードするか、ソースコードをGitなどから取得してコンパイルすることもできます。
CMakeを使ってVisual Studio用のソリューションファイルを作成することもできます。これらの手順は下記の場所にチュートリアルがあります。
http://www.sfml-dev.org/tutorials.php

今回はCMake GUIを使ってVisual Studio 2013のプロジェクトファイルを作成しました。スタティックリンクにしました。
ソリューションを開いてALL_BUILD→INSTALLすると、インストール先に設定したディレクトリにincludeやlibが作成されます。

A minimal example
参考文献[1]のサンプルそのままです。
#include <SFML/Graphics.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
    sf::RenderWindow window(sf::VideoMode(640, 480), "SFML Application");
    sf::CircleShape shape;
    shape.setRadius(40.f);
    shape.setPosition(100.f, 100.f);
    shape.setFillColor(sf::Color::Cyan);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        window.draw(shape);
        window.display();
    }
    return 0;
}
ビルド時の注意点
今回はスタティックリンクにしましたので、プリプロセッサのところにSFML_STATICを入れる必要があります。
SFMLのモジュールのライブラリは基本的には下記のものがあります。

sfml-audio-s.lib
sfml-graphics-s.lib
sfml-main.lib
sfml-network-s.lib
sfml-system-s.lib
sfml-window-s.lib

-sはスタティックの場合について、デバッグバージョンはさらに-dが付きます。
今回は上記のものだけでは足りなかったので、下記もリンクさせました。

opengl32.lib
jpeg.lib
winmm.lib

オーディオ関係を使う場合には、さらにopenal32.lib/openal32.dllが必要になるなど、状況に合わせて追加する必要があります。

実行結果

sfml_001.png

サンプルなので円が表示されているだけです。
web拍手 by FC2
posted by シンドラー at 02:30 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2017年12月28日

お絵描きロジックのテスト その3

昨日の続きです。

下記のような流れで画像からお絵描きロジックの数値に変換しました。縮小しているだけなのでもう少し工夫したいところです。

1.ファイルオープンダイアログを使って画像の選択・読込み
2.25x17に縮小
3.大津の2値化で2値化
4.白画素の数を数えて問題を作成
5.正解したらタイムを表示して終了

4.のコードは下記のような感じです。
piclogic_006.png

実行結果

フリーアイコンの画像などで試してみました。

piclogic_005.png
piclogic_007.png
piclogic_008.png

最後ピラミッドの写真か何かですが全然わからないですね。一応一通りの動作を3日で作れたので思ったより早かったです。
web拍手 by FC2
posted by シンドラー at 16:56 | Comment(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする