AndroidもopenGLも初心者さ (でもJavaは知ってるよ)

自分はiPhoneユーザーなんだけど、AndroidアプリはJavaで書けるし、SDKも無料で手に入るので挑戦してる。(エミュレーターもついてるよ)
AndroidSDKダウンロードはこちらより

そんで、どうせならopengGL ESにも手を出そうかと。
でもopenGLについてもほとんど知らないので、初歩的なことからメモしてく予定。

まず、Androidに限らず、JavaでopenGLを扱う場合の注意点。メモリ管理の問題。
ご存知のように、Javaではガーベッジコレクタが勝手にアクセスの無いメモリを回収するので、メモリの開放とか考えずにコーディングできる。(組み込み系プログラマにJavaプログラマがバカにされちゃう理由でもあるね)
でも、この機能がopenGLでは邪魔になるようで。(openGL自体はCでできてる)

ということで、3Dオブジェクト用のメモリを確保するには、javaのガーベジコレクションの影響を避けるためにjava.nio.BufferクラスのByteBuffer型を使う必要があるらしい。

FloatBuffer型もあるけど、ByteBuffer型でないとメモリの並べ方を指定できないのでByteBuffer型を使う。
例えば、0x12345678をメモリに並べるには2つの方法があって、ビッグエンディアン(0x12, 0x34, 0x56, 0x78)とリトルエンディアン(0x78, 0x56, 0x34, 0x12)がある。
で、二つのどっちかは分からないけど、プログラムを動作させるハードウェア固有の並べ方でメモリを使う必要がある。

4つの頂点のバッファを確保する場合はこんな感じ(floatの4バイト×3Dベクトルだから3つ×頂点の数4つ)

ByteBuffer byteBuffer= ByteBuffer.allocateDirect(4 * 3 * 4);

動作させるハードウェア用の並び方に指定。

byteBuffer.order(ByteOrder.nativeOrder());

ByteBuffer型から、FloatBuffer型を作る

FloatBuffersquare = byteBuffer.asFloatBuffer();

後は、これに頂点の値を並べたfloat型の配列を突っ込めばOK。

javaでのopenGLの関数の基本的な呼び出し方法は普通のopenGLとほとんど共通みたいだ。
参考サイト

関連記事

PyTorch3D:3Dコンピュータービジョンライブラリ

網元AMIで作ったWordpressサイトのインスタンスをt...

オープンソースのロボットアプリケーションフレームワーク『RO...

Maya API Reference

LuxCoreRender:オープンソースの物理ベースレンダ...

Raspberry Pi

Zibra Liquids:Unity向け流体シミュレーショ...

trimesh:PythonでポリゴンMeshを扱うライブラ...

ジュラシック・パークの続編『ジュラシック・ワールド』

AR (Augmented Reality)とDR (Dim...

Super Resolution:OpenCVの超解像処理モ...

機械学習で遊ぶ

Google App Engineのデプロイ失敗

WordPressのテーマを自作する

Unreal Engine Tokyo MeetUp!へ行っ...

ゴジラの造形

3DCGのモデルを立体化するサービス

立体映像プレイヤー『Stereoscopic Player』

Googleの3Dウェブ・プラグインO3D

映画『シン・仮面ライダー』 メイキング情報まとめ

写真から3Dメッシュの生成・編集ができる無料ツール『Auto...

OpenCVのバージョン3が正式リリースされたぞ

Physically Based Rendering

BlenderでPhotogrammetryできるアドオン

日立のフルパララックス立体ディスプレイ

機械学習手法『Random Forest』

Google Chromecast

『ピクサー展』へ行ってきた

Phongの表現力パネェ 材質別のPhong Shader用...

libigl:軽量なジオメトリ処理ライブラリ

粘土をこねるようなスカルプトモデリング

顔のモデリング

ZBrushの作業環境を見直す

ZBrushでアヴァン・ガメラを作ってみる 口のバランス調整

書籍『3次元コンピュータビジョン計算ハンドブック』を購入

オープンソースの物理ベースGIレンダラ『appleseed』

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

Maya LTでFBIK(Full Body IK)

PythonでBlenderのAdd-on開発

iPhoneアプリ開発 Xcode 5のお作法

Physics Forests:機械学習で流体シミュレーショ...

Google App Engine上のWordPressでF...

コメント