Android
移植というほどたいした物ではないけど。 前回からの変更点は AlertDialogの出し方が変わった 変更前は AlertDialog.show(BlockTest.this, "Congratulations!", "OMEDETOU !!", "OK", true); としてダイアログをだしてましたが、今回からは new AlertDialog.…
WSTがないよ!とか、GEFがないよ!とか 色々怒られたけどなんとかインストール完了。 そして気づいた点がいくつか。 エミュレータのデフォルトのスキンが変わった! 今までの小さい画面を想定して作ってたのでこれはつらい。 どのスキンにも対応できるよう作…
いつの間にやらAndroid SDKがバージョンアップしたらしいてのを chephesさんとこで知った。 うーん完全に遅れてるなあ。 やろうやろうと思っててもなかなかAndroidの方に手が付かず。 あと10日ぐらいでなんとか形にしないと!がんばる!! そんなわけでまず…
昨日の透明ウィンドウはSurfaceViewを使ったやり方でなんともスマートでなかった。 そこで他のやり方を探してたらAPIDemosの中にまさに透明ウィンドウのサンプルを見つけた。 TranslucentとTranslucent Fancyてやつ。透明というか半透明だけど気にしない。 …
kazhik.techさんのところで、 getWindow().setFormat(PixelFormat.TRANSLUCENT); とすればウィンドウが半透明になるということを見た。 半透明な上に画像が表示できたら楽しいよね、 と思って試してみたらうまくいかない。 この設定を有効にするにはSurfaceV…
息抜きがてら、前にActionScriptで作った神経衰弱をAndroidで作ってみた。 神経衰弱と言っても普通のではなく、絵柄の代わりにFlickrのタグを使います。 つまり2つの画像のタグに共通するタグがあれば当たり、なければはずれです。 といってもよくわからない…
ということで床を動かしてみた。 全体的に残念な仕上がりになってしまって残念だ。 法線ベクトルを逐一変更するのが苦労した。 あとおかしな動きをする原因のひとつとして、 やっぱりめり込みてのが考えられそう。 そこらへんの処理を丁寧にしないとダメみた…
前回に続き壁と床との衝突。 課題として壁と床の間でプルプルしてしまうというのがあったけど、 あれがだいぶ改善された。 問題となるのはめり込みのときの対処法で。 めり込んだ分を反射後の方向に動かしてたけどこれじゃよくなくて。 結局のところ衝突する…
床との衝突ができたから壁も追加。 動画見てもらうとわかるけどやっぱり壁と床の間でボールがプルプル震えてしまう。 これはめり込みを補正する関係で起きてるんだと思う。 他の物理エンジンは多分一回のループで何回も力の釣り合いの計算をすることで これ…
というわけで物理シミュレータ。 法線ベクトルを使うと床との衝突がうまくいくということで、 斜面にボールを落としてみた。 割とうまくいってるんじゃないだろうか。 斜面と衝突したよという判定は球の中心から斜面までの距離を求めて、 その距離が球の半径…
chephesさんのところでlocalhostにつなげるという記事を見て早速試してみた。 普段なら http://localhost/... と書くところを、 http://(プライベートIPアドレス)/... と変えるだけでlocalhostにつなげられる。 localhostに接続できればPHPとか動かせるので…
とりあえずバネが作れたので、 それをいくつかつなげてみた。正八角形に質点を配置して、隣の質点と 向かいの質点をつないだ。 動かしてみたら若干正八角形が崩れてるけど、 バネだからこんなもんかと無理矢理納得した。 棒だとちゃんと正八角形になるのだろ…
今度はバネ。非常に簡単です。 最初、減衰振動の運動方程式解くのダルいなと思ってたけど、 加速度求めるだけならそんな必要ないってさっき気づいた。 まずいまずい。 「げんすいしいんどう」で変換して「元帥進藤」が第一候補てのも困ったもんだ。 たまにMa…
ちょっと作ってみた。 課題がいくつか。 床とか、物体との衝突をどう処理するか。 今は床のy座標より下に行ったらボールの速度反転とかやってて。 さすがにそれじゃまずかろうということで何か考えないといけない。 このReviveのソースとか見て勉強します。 …
自転ができたので今度は公転させようと思って。 回転させること自体は楽にできたんだけど回転の方向がおかしい。 ちょっと気合いいれて考えてみないと。
というわけで回転できた。 割と疲れた。 はじめPapervision3Dのを参考にして作ってみたけどなんか回転がおかしいのと、 うまくクォータニオンから回転行列が作れないので他のやり方を探した。 そこで参考にしたサイトがここ。 途中経過は色々面倒だけど結局…
とりあえず変換行列を使った平行移動とスケール変換だけ作った。 あとは回転だけなんだけどこれはクオータニオンを使うべきなのか。 というかオイラー角だとしてもクオータニオンだとしてもめんどくさそうだ。 あとMatrix3Dというクラスを作ってみたがあんま…
一応球体とか立方体が出せるようになったので 今度は平行移動、回転、スケール変換とかの機能を付けたい。 3Dプログラミングはほとんどやったことないんだけど、 こういう変換をする場合は元データの値を変えるんじゃなくて、 変換行列みたいなのを持ってお…
昨日書いたSphereへのテクスチャマッピングの違和感。 こしさんにコメントを頂き解決しました。 まだOpenGL ESの座標系に慣れてなかったり、 各メソッドが何やってるのかを把握しきれてないところがあるので 色々頑張るっていかなければ。 前に作ったCubeと…
Androidで日本語入力できたらなと思ってたらIMEを作ってる人が! すげー。これは楽しみだ。 というかIME作るのって予想以上にというか予想通りというか、ものすごい大変な作業そうだな。。
というわけで球体へのテクスチャマッピングができました。 それに伴ってSphereの頂点の決定法も変更。ほぼPlaneと同じ感じになりました。 つまりSphereクラスのcreateメソッドの中身をごそっと変えた。 作ってて頂点数が256以上になるとおかしくなることに気…
OpenGL ESの練習を兼ねてマインスイーパを3Dで作った。 3Dのマインスイーパというとここが有名っぽいけど、それとは全然違うゲーム。 というか2Dを3Dにしただけという。 それっぽく遊べるので結構面白い。 あとonKeyDownメソッドでキー入力が取得できなくて…
OpenGL ESのプリミティブを手軽に作る第三弾のSphereです。 Cubeの時よりは作りやすかったけど、面を作るところで結構悩んだ。 これでPlane、Cube、Sphereの三つができてマウスピッキングも(一応)できるようになったので、 何か作れるんじゃないだろうかと…
やはりマウスピッキングはOpenGLでやってるような方法は使えないみたい。 なので違う方法を考えた。けどちょいちょい穴があるので似非マウスピッキングということで。 結局何をしてるかというとglReadPixelsメソッドでクリック位置の色情報を取得し比較して…
gl.glEnable(GL_DEPTH_TEST); とすると動かないと先日の日記で書いたが。これが解決した。 結局OpenGLContextをnewするときに引数にOpenGLContext.DEPTH_BUFFERを指定していないだけだった。 悩んだ悩んだ。悩んだだけに解決して嬉しかった。
昨日言ってたGL_SELECT(GL_SELECTIONは間違えでした。)とglReadPixelsについて少し調べてみた。 これはOpenGLでの話なのでOpenGL ESではどうなのか。驚きの結果になった。 まずGL_SELECTの方法。 OpenGL ESにはglRenderModeメソッドがない。 つまりセレク…
あるオブジェクトがクリックされたかを知るには、 GL_SELECTIONを使うかここにあるみたいにgetReadPixelsメソッドを使うといいみたい。 どちらにしろお手軽にはいかないみたい。うーん。
そんなわけでOpenGL ESをPapervision3Dみたいに扱いたい計画の続き。Cubeを作ってみた。 ソース見てもらうとわかるけど非常にめんどくさいしごちゃごちゃだし。どうにかならないかな。 そんで陰面除去するときに、cheprogrammingを参考に、 gl.glEnable(GL10…
リソースファイルからは比較的容量の大きいメディアファイルは再生できないようなので、 普通の曲なんかを再生するにはAndroidのエミュレータにファイルを転送しておく必要がある。 転送にはadbコマンドを使う。エミュレータが起動した状態でターミナル(Mac…
前にソースは今度と言っていたMediaPlayerの話。 一応動くは動くんだけど再生できるファイルとできないファイルがあったりする。 再生の仕方は前にも書いた通り。res/rawフォルダの中に再生したいファイルを入れ、リソースIDで指定する。 うーん。もう少し調…