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

関連記事

OpenGVのライブラリ構成

HTML5・WebGLベースのグラフィックスエンジン『Goo Engine』

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

Phongの表現力パネェ 材質別のPhong Shader用パラメータ一覧

NVIDIA Quadro OpenGL DriverのDeep Color不具合の対処方法

機械学習手法『Random Forest』

Unreal Engineの薄い本

Open3D:3Dデータ処理ライブラリ

BlenderのGeometry Nodeで遊ぶ

ZBrush 2021.6のMesh from Mask機能を使ってみる

ZBrushでゴジラ2001を作ってみる 身体のバランスを探る

Maya LTでFBIK(Full Body IK)

openMVGをWindows10 Visual Studio 2015環境でビルドする

uvでWindows11のPython環境を管理する

ZBrushでアヴァン・ガメラを作ってみる 頭頂部の作り込み・舌の追加

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

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

ZBrushのお勉強

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

物理ベースレンダリングのためのマテリアル設定チートシート

ZBrushでアヴァン・ガメラを作ってみる モールドの彫り込み・身体の形出し

ラクガキの立体化 3Dプリント注文

ZBrushのキャンバスにリファレンス画像を配置する

ヘッドマウントディスプレイとビジュアリゼーションの未来

OpenCVの顔検出過程を可視化した動画

ZBrushでアヴァン・ガメラを作ってみる 下アゴと頭部を作り込む

ManuelBastioniLAB:人体モデリングできるBlenderアドオン

ラクガキの立体化

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

動的なメモリの扱い

プログラムによる景観の自動生成

UnityからROSを利用できる『ROS#』

第1回 3D勉強会@関東『SLAMチュートリアル大会』

C#で使える遺伝的アルゴリズムライブラリ『GeneticSharp』

TorchStudio:PyTorchのための統合開発環境とエコシステム

Google Earth用の建物を簡単に作れるツール Google Building Maker 公...

リアルタイム レイトレーシングAPI『DirectX Raytracing (DXR)』

3D映画のポストプロダクション 2D-3D変換

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

Digital Emily Project:人間の顔をそっくりそのままCGで復元する

ZBrushでリメッシュとディティールの転送

ZBrushでゴジラ2001を作ってみる 頭の概形作り

コメント