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

関連記事

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

Unityからkonashiをコントロールする

OpenCV 3.3.0 contribのsfmモジュールの...

Autodesk Mementoでゴジラを3次元復元する

WordPressのサーバ引っ越し方法を考える

ZBrushでアヴァン・ガメラを作ってみる 首回りの修正・脚...

iPhone欲しいなぁ

WordPress on Windows Azure

ラクガキの立体化 進捗

3Dグラフィックスの入門書

ZBrushで仮面ライダー3号を造る 仮面編 横顔のシルエッ...

CEDEC 3日目

Web経由でRaspberry PiのGPIOを操作したい

Pythonの自然言語処理ライブラリ『NLTK(Natura...

Raspberry PiのGPIOを操作するPythonライ...

書籍『ROSプログラミング』

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

Raspberry Pi 2のGPIOピン配置

Swark:コードからアーキテクチャ図を作成できるVSCod...

サンプルコードにも間違いはある?

リクナビを使わない就職活動

書籍『メイキング・オブ・ピクサー 創造力をつくった人々』を読...

ZBrushトレーニング

中学3年生が制作した短編映像作品『2045』

KelpNet:C#で使える可読性重視のディープラーニングラ...

CGWORLD CHANNEL 第21回ニコ生配信は『シン・...

ZBrushでアマビエを作る その2

Kornia:微分可能なコンピュータービジョンライブラリ

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

OpenCVの超解像(SuperResolution)モジュ...

任意の英語サイト中で自分がまだ覚えていない英単語だけに日本語...

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

Google App Engine上のWordPressでF...

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

複屈折

ポリ男からMetaHumanを作る

represent

CGALDotNet:計算幾何学ライブラリ CGALのC#ラ...

OpenCVでPhotoshopのプラグイン開発

OpenCVで顔のランドマークを検出する『Facemark ...

スクレイピング

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

コメント