【Android】OpenGL ES高速化テクニック集

はじめに 2014/03/05:3項目追加しました。 OpenGL ESは、OpenGLから機能を削減してかなり軽くなった描画APIです。 当然、AndroidはPCのCPUやメモリには現時点では歯がたちませんので、クロノスグループの人たちがいろいろがんばってくれたわけですが、それでも動作がモッ... (Read More)

【AndroidでOpenGL ES】3D空間の距離を測る

はじめに 2Dでも3Dでも、世の中に出ているゲームの大半は物理法則を人工的に埋め込んでいます。 敵と衝突したら一定量、逆のベクトルへ飛び、壁があればその先へ進むことができません。 プログラムでは、密着しているかどうかを判定することになりますが、同じように、木箱と一人称カメラの距離はどのくらいなの... (Read More)

【AndroidでOpenGL ES】3Dワールドを自由に歩けるようにしてみた

はじめに お久しぶりの更新です。 3Dワールドを更新に更新を重ね、気付いたらFPSになっていました。銃じゃないです。キューブ弾です。 今回はFPS化してしまった3D物理演算プロジェクトの注目すべき部分をピックアップして解説していきます。 同じくGitさんにコミットしておきました。 https:/... (Read More)

【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾4【終】

はじめに ついに今回で座標変換とベクトルの話がラストです。 今まで1~3までの記事は以下を参照してください。 【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾 【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタ... (Read More)

【Android】OpenGL ESとJBulletの3Dワールドにキューブ雨を降らせてみた【サンプル】

はじめに ベクトルの話が長いので一旦お休みし、OpenGL ES×JBulletのPhysXワールドサンプルを改良してみました。 実装したものはキューブ雨で、タッチで晴れと雨を切り替えることが可能です。 雨といっても水分のような軟体ではなく完全に剛体なので、中心に置いてある木箱に当たると吹き飛び... (Read More)

【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾3

はじめに 今回もスクリーン座標系からワールド座標系への変換についてです。 過去記事とプロジェクトは以下URLを参照してください。 【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾 【Android】OpenGL ES入門。スクリーン座標をワー... (Read More)

【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾2

前回の続き 最初に前回の記事で使ったサンプルを再度貼っておきます。 https://github.com/rashu404/purobana 前回はカメラの注意点からカメラの位置のベクトルを引き算すれば、固定ではあれど画面の奥へ行くベクトルを作れるということをやりました。 今回はその続きです。 ... (Read More)

【Android】OpenGL ES入門。スクリーン座標をワールド座標に変換してタッチ位置にキューブ弾

はじめに 前回の記事でFOVのことを書いたのは、今回のためです。 3DプログラマーのためのFOV(Field Of View)入門@OpenGL ES FOVを駆使し、ベクトルの足し算引き算・正規化、アスペクト比・・・と、少しいつもより難しいことをこれから書きます。 というのも、Androidの... (Read More)

3DプログラマーのためのFOV(Field Of View)入門@OpenGL ES

  はじめに FOV、VBO、TMP、なんちゃら。と、3文字の略称横文字ばかり言われると、どうも拒絶反応を示してしまうのは私たち日本人の特性です。諦めてください。 しかしながらプログラミングをやっている人は、多少なりとも耐性がついているはず。 今回は、3D・CGを覚えていく上で必ず必要... (Read More)

AndroidとJBulletで3D物理演算入門。反発係数を加えて木箱を跳ねさせてみよう

はじめに カービィのエアライドというゲームが昔ありました。 丸っこくて、敵を吸い込むと能力が得られる奇妙な生物が主題のゲームです。なんだそれ。 街の中をプレイヤーの能力を上げるために戦うシティトライアルというモードで、破壊するとアイテムが出てくる大きなボックスが、軽くなって跳ねてしまう時がありま... (Read More)

【AndroidとOpenGL ES入門】3Dで座標系がたくさんあるワケ

  はじめに 座標系って知っていますか? 知っているならどこまで知っているのでしょう? 右手座標系から始まり、ローカル座標系、カメラ座標系、なんちゃらエトセトラ・・・。 と、Android、OpenGL ES等で名前だけは覚えている人は少なからずいるはずです。 種類がたくさんあって、座... (Read More)

OpenGL ESとJBullet入門。衝突しているのにすり抜ける、CollisionShapeとVisibleShapeの違い

はじめに 以前にnullieさんプロジェクトをいじっていて、OpenGL ESの並行移動関数であるglTranslatef()を使って立方体の移動をしようとしました。 ついでにスケーリングとかしちゃったのですが、どうもうまくいかない。 衝突形状(CollisionShape)はしっかり設定してあ... (Read More)

AndroidでJBullet入門。ステップシミュレーション(stepSimulation)とは?

はじめに AndroidとJBulletで行う物理演算入門もかなり記事がたまってきましたが、今回の「ステップシミュレーション」とか、「ステップ計算」なんて言われるものはものすごく重要です。 どのくらい重要かって、それはもうJBulletがスネてなかなか物理演算してくれないくらいです。あと、And... (Read More)

OpenGL ES入門。カメラを平行移動して電車風景っぽく【Android】

はじめに 3D空間でやりたくなってくるのは、やはりカメラ移動です。 カメラを移動していれば、とりあえずカッコいいからですね(笑) OpenGL ESでそれを実現するには?ということを今回は電車の風景っぽく、横に平行移動してみます。 どうせカメラのポジションに加算代入するんでしょ? カメラの位置... (Read More)

OpenGL ESの3Dワールドに昼と夜の時間を加えてみた【Android】

はじめに よくありますよね。ゲーム内で昼になったり夜になったり。 ちょっと前に人気になった3Dゲームのマインクラフトでも、そのシステムはうまく使われています。 昼になれば太陽が昇り、夜になればゾンビたちが村に襲いに来ます。あのドンドン扉を叩くのをやめてほしいですね。数が増えると怖いです。 今回は... (Read More)

【JBullet物理演算入門】ソルバ(solver)とは?

はじめに 物理演算を勉強する上で、ソルバ(solver)というものが出てきます。 そこで何だろとググったが最後、英和辞典を憎むことになるでしょう。 下手に調べれば調べるほどわからなくなっていくのが、このソルバ。 これを今回は解説していきます。 あまり出番はありませんが、以前に作った3DのPhys... (Read More)

【OpenGL ES入門】glEnable()とglEnableClientState()の違いとは?

はじめに OpenGL ESのコードを書いていると、やたら似たような関数に出会います。 パラーメーターxとパラメーターfとか、トランスレートx、fエトセトラ・・・。 その中でも特に有効化の関数であるglEnable()とglEnableClientState()は使う機会が多く、双方の違いを知っ... (Read More)

【Android】OpenGL ESとJBulletで3Dワールドのサンプルを作ってみた

はじめに ついにオリジナルの物理演算サンプルが完成しました。 空と大地をバックに木箱の周りを回転します。タップでキューブ弾の発射です。 これからこのサンプルを使って進めていくので、今回はプロジェクト全体の流れを説明していきます。 Gitさんに上げておきました。 https://github.co... (Read More)

JBulletで物理演算を行う手順まとめ

はじめに JBulletの入門記事をここまで書いてきたので、物理演算をするまでの主な流れをまとめてみましょう。 主要クラス等の一覧は以下まとめにて掲載しています。 http://web-prog.com/buturi-enzan_nyuumon/ ざっくりまとめると ダイナミクスワールドの作... (Read More)

【Androidで物理演算入門】キューブ弾を発射する

はじめに 今回はAndroidで物理演算入門ということで、JBulletを使って立方体を砲弾にして射出してみましょう。 タップすると弾が出現し、飛んでいく仕組みです。 改良すべき点は多いので、使う場合は適所修正をお願いします。 公開用のプロジェクトはもうしばしお待ちください。 というわけで、nu... (Read More)

【3DAndroid入門】OpenGL ESで立方体にテクスチャを貼って木箱にする

はじめに 今回はnullieさんのHelloGameを使ってCubeにテクスチャを貼ってみましょう。 ちなみに元の立方体はこんな感じです。 使用するプロジェクトURLは以下です。 https://github.com/nullie/HelloGame そもそもテクスチャってなんだろう? Gi... (Read More)

【Android】OpenGL ES入門インデックスバッファを使用して四角錐を描画する方法

はじめに OpenGL ESの入門記事がついに公開です。 今回は四角錐をインデックスバッファ(index buffer)を使って描画していきます。 JBulletの方でkinematic剛体を作って天高く上昇していますが、基本的にOpenGL ESだけに絞ります。 また、頂点配列を手書きする際の... (Read More)

【Android】OpenGL ESとJBulletでkinematic剛体の作り方入門

はじめに 2ヶ月くらいkinematic剛体と格闘していました。 記事トップの画像を見ていただくとわかりますが、中央の大きめの立方体を空高く舞い上げることに成功しました。 最初の頃はOpenGL ESのメソッドであるTranslatef()を使ったり、JBulletのTransform.orig... (Read More)

JBullet入門 公式Docでよく見るローカル(local)とは?

はじめに JBulletの英語の公式ドキュメントを見ていて、「localが――」「localが――」って口癖のように出てくるんですよ。 local shapeをスケーリングするとか、localのポイントがこうなってとか、localの慣性を使ってとか。 最初のうちは、「そうか!ローカルシェープをス... (Read More)

AndroidとJBulletで3D物理演算入門 衝突に必要なCollisionShapeを作ってみる

はじめに 前回、MotionStateクラスについての記事を書きました。 あれからOpenGL ESの入門記事を書いていますが、公開まではもう少しかかりそうです。 さて、今回はいつも通りnullieさんのHelloGameの中で、実際に物体を作る部分のコードを解説していきます。 https:/... (Read More)