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


スポンサーリンク

関連記事

豚インフルエンザ
C#で使える可読性重視のディープラーニングライブラリ『KelpNet』
書籍『3次元コンピュータビジョン計算ハンドブック』を購入
立体視を試してみた
python-twitterで自分のお気に入りを取得する
Multi-View Stereoによる3次元復元ライブラリ『OpenMVS』
リクナビを使わない就職活動
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...
RSSフィードを読込んで表示するWordpressプラグイン『RSSImport』
windowsでTomcatの自動起動設定
ブログが1日ダウンしてました
このブログのデザインに飽きてきた
リメイク版ロボコップスーツのメイキング
Mayaのシェーディングノードの区分
Open Shading Language (OSL)
PolyPaint
Javaで作られたオープンソースの3DCGレンダラ『Sunflow』
Google XML Sitemap Generatorプラグインを3.4.1へダウングレード
Amazon EC2ログイン用の秘密鍵を無くした場合の対処方法
タダでRenderManを体験する方法
Windows Server 2008にAutodesk Maya 2009をインストール
iOSデバイスと接続して連携するガジェットの開発方法
AnacondaとTensorFlowをインストールしてVisual Studio 2015で使う
映画『ミュータント・タートルズ』を観てきた
ブログのデザイン変えました
Windows10でPyTorchをインストールしてVSCodeで使う
ラクガキの立体化 1年半ぶりの続き
ブログをGoogle App EngineからAmazon EC2へ移行
ZBrushのお勉強
ZBrushで仮面ライダー3号を造る 仮面編 PolyGroup作成に再挑戦
Google App Engine上のWordPressでFlickrの画像を貼る
Houdiniのライセンスの種類
複数視点画像から3次元形状を復元するライブラリ『openMVG』
WordPressの表示を高速化する
オープンソースのテクスチャマッピングシステム『Ptex』
疑似3D写真が撮れるiPhoneアプリ『Seene』がアップデートでついにフル3Dモデルが撮影できる...
3Dボリュームデータ処理ライブラリ『OpenVDB』
映画『ブレードランナー 2049』のVFX
ZBrushと液晶ペンタブレットでドラゴンをモデリングするチュートリアル動画
iPhone・iPod touchで動作する知育ロボット『ROMO』
HerokuでMEAN stack
ブラウザ上でJavaScript,HTML,CSSを書いて共有するサイト『jsdo.it』

コメント