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とほとんど共通みたいだ。
参考サイト


スポンサーリンク

関連記事

JavaによるCGプログラミング入門サイト (日本語)
PyMC:Pythonのベイズ統計ライブラリ
Raytracing Wiki
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...
テスト
ZBrushで仮面ライダー3号を造る 仮面編 ZRemesher
複屈折
参考になりそうなサイト
Singular
Blender 2.81でIntel Open Image Denoiseを使う
Mayaでリアルな布の質感を作るチュートリアル
Adobe Photoshop CS5の新機能
ZBrushでアマビエを作る その2
Webサイトのワイヤーフレームが作成できるオンラインツール
ジュラシック・パークのメイキング
ZBrushでアヴァン・ガメラを作ってみる 歯茎を別パーツへ分割
仮想関数
3Dグラフィックスの入門書
グローバルイルミネーションに手を出す前に、やり残したことがあるんじゃない?
オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う
SONYの自律型エンタテインメントロボット『aibo』
ドットインストールのWordPress入門レッスン
UnityのAR FoundationでARKit 3
ZBrushで仮面ライダー3号を造る 仮面編 横顔のシルエットをリファレンスに合わせる
Unreal Engineの薄い本
Polyscope:3Dデータ操作用GUIライブラリ
OpenCVの超解像(SuperResolution)モジュールを試す
ブログが1日ダウンしてました
ZBrushでアヴァン・ガメラを作ってみる 爪とトゲを追加
ArUco:OpenCVベースのコンパクトなARライブラリ
OpenCV3.3.0でsfmモジュールのビルドに成功!
OpenGV:画像からカメラの3次元位置・姿勢を推定するライブラリ
Russian3DScannerのトポロジー転送ツール『WrapX』
python-twitterで自分のお気に入りを取得する
Model View Controller
ファンの力
CGWORLD CHANNEL 第21回ニコ生配信は『シン・ゴジラ』メイキングスペシャル!
UnityでShaderの入力パラメータとして行列を渡す
UnityでLight Shaftを表現する
ZBrushでゴジラ2001を作ってみる 側頭部のボリュームを探る
3DCGのモデルを立体化するサービス
Boost オープンソースライブラリ

コメント