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

関連記事

Amazon EC2ログイン用の秘密鍵を無くした場合の対処方...

法線マップを用意してCanvas上でShadingするサンプ...

OpenCVのfindEssentialMat関数を使ったサ...

BlenderのRigifyでリギング

clearcoat Shader

Mitsuba 2:オープンソースの物理ベースレンダラ

MeshroomでPhotogrammetry

CGのためのディープラーニング

Iridescence:プロトタイピング向け軽量3D可視化ラ...

Blender 2.81でIntel Open Image ...

ジュラシック・パークのメイキング

Multi-View Environment:複数画像から3...

Manim:Pythonで使える数学アニメーションライブラリ

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

プロシージャル手法に特化した本が出てるみたい(まだ買わないけ...

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

OpenCVでカメラ画像から自己位置認識 (Visual O...

Python拡張モジュールのWindows用インストーラー配...

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

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

組み込み向けのWindows OS 『Windows Emb...

Mayaのポリゴン分割ツールの進化

写真に3Dオブジェクトを違和感無く合成する『3DPhotoM...

マイケル・ベイの動画の感覚

デザインのリファイン再び

マルコフ連鎖モンテカルロ法

ZBrushで仮面ライダー3号を造る 仮面編 リファレンス画...

Blenderでよく使うaddon

UnityのMonoBehaviourクラスをシングルトン化...

Unityの薄い本

ZBrush4新機能ハイライト 3DCG CAMP 2010

ZBrushでアヴァン・ガメラを作ってみる 壊れたデータの救...

Google App Engineのデプロイ失敗

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

ZBrush用トポロジー転送プラグイン『ZWrap Plug...

ZBrush 2021.6のMesh from Mask機能...

注文してた本が届いた

『ローグ・ワン/スター・ウォーズ・ストーリー』のVFXブレイ...

iPadをWindows PCのサブディスプレイにする無料ア...

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

参考書

ゴジラ三昧

コメント