2010年12月16日木曜日
やはり自前(自作)のOSが欲しい(開発したい)という気持ちが再浮上してきた。
自作のOSを開発しても、金になる方法が思いつかないので(これは100%趣味にしかならないので)、
やりたいと思っていても、何もしない状態であった。
以下を(真実であるとして)、見て
FBIがOpenBSD開発者に対し、金銭を支払ってネットワークスタックにバックドアを仕込むよう要請していたことが明らかになった(http://slashdot.jp/submission/40885/FBIOpenBSDより)
やはり自前(自作)のOSが欲しい(開発したい)という気持ちが再浮上してきた。
2010年12月14日火曜日
Kinectおもしろそうだ。
http://hken.ibtimes.com/articles/91482/20101213/microsoft-kinect-minority-report-graphics-interface-robotics-platform.htm
購入しようと考え、Amazonで見てみると
(1)Xbox 360 Kinect センサー \17080
(2)Xbox 360 4GB + Kinect \25,980
(2)の方がお得なような気がするが・・・・・・・PCとUSBで接続できるんだろうか?
2010年11月28日日曜日
フロアーのポリゴン構成(案1)
パフォーマンスが全然ダメ。(1フロアで最大4096オブジェクトが必要となる。)
表示領域で工夫してみたら、そこそこ 動くがゲームとしては、
(自分でも)このゲームはやりたくない
別の手法で実現を考える。
1フロアを全部一つのオブジェクトとして構成するように修正で試してみる
/*
* ポリゴン構成 (番号は頂点のインデックス)
*
*
*
*
* 9-10 - 13-14
* | | | |
* 8-11 - 12-15
*
* | | | |
*
* 1-2 - 5-6
* | | | |
* 0-3 - 4-7
*/
実現したいのが1フロアサイズが64x64での構成
ちょっとパフォーマンス的に厳しいかも・・・・・(どうしてもカクついてしまう)
ここは、32x32に妥協すべきかもしれない
2010年11月25日木曜日
使ってみたいが、時間がないなたぶん・・・・・
4Gamerより
現地時間の2010年11月24日,北米のパブリッシャ/デベロッパであるEpic Gamesは,
同社が開発を行うゲームエンジン「Unreal Engine 3」の開発キットである
「Unreal Development Kit」の最新β版を公開した。
http://www.4gamer.net/games/032/G003263/20101125042/
http://www.udk.com/
2010年11月20日土曜日
Javaアプレットテスト(危険)
(アクセスされると場合によっては、ブラウザ再起動が必要になることがあります。)
■メモリ限界のテスト
http://zeptogames.appspot.com/testHeap/run.html
http://zeptogames.appspot.com/testHeap/runjnlp.html
2010年11月16日火曜日
開発中のゲーム『Dungeon Administrator』。もし、よろしければ、アクセスしてみてください。
mixi向けのRPG風ダンジョンを経営するゲームの完成を目指しています。
■アプリ名
Dungeon Administrator
■簡単な説明
<内容>
RPG風ダンジョンを経営するゲームとなります。
<操作方法>
[W]前進
[S]:後退
[A]:左に向く
[D]:右に向く
[SPACE]:上に浮かぶ
[マウス左クリック]:スキル使用(緑枠)
[マウス右クリック]:スキル使用(赤枠)
[ホイール]:カメラ位置前後
■スキル説明
エナジーボルト:エネルギー弾で敵にダメージを与えます。
クラウド:敵の突進を止めます。
ヒール:味方のHPを回復させます。
ディグ:天井or床に穴をあけます。
バーリー:穴を埋めます。
インクリーズ:地面を上げます。
デクリーズ:地面を下げます。
ステア:地面を階段のようにします。
ウォール:地面を壁のようにします。
コントラクト:敵を買収し味方にします。
■アプリURL
http://
実行するにはJavaプラグインが必要となります。
■画面
もし、よろしければ、アクセスしてみてください。
2010年11月7日日曜日
2010年11月6日土曜日
次回のmixi向けゲーム開発は、平安京エイリアンとスペースパニックのようなゲームを予定
地面に穴をあけて落とし倒していくというようなゲームを予定。
(2.5D的なものではなく)なるべく3Dゲームにしていきたいけど、
パフォーマンス的に実現できるかどうかは難しいかもしれない。
とりあえず、明日から開発にはいります。
今後、やっていきたいことのメモ2010-11-06
■ゲーム(ターゲットは、WEBアプリorAndroidで、なるべく3Dゲームとして開発)
・RPGタンジョン経営的なゲーム開発(ダンジョンキーパー、ウィザードリ4のような感じで)
・リアルタイムストラテジーゲーム開発(warcraft3のような感じで)
・汝は人狼なりやのようなゲーム開発
・格闘ゲーム開発(プレイヤーが作成した3Dモデルを使用できるような仕様で)
・スペースパニック、平安京エイリアンのようなアクションゲーム開発
・スペースハリアのようなゲーム開発
■ツール&ライブラリ
・3Dモデルビューワをソーシャルアプリ用として開発(サーバー側開発も含む)
・3Dアプリ用のライブラリ開発
・3Dモデルビューワとライブラリ機能拡張(より表現力を高めていく)
・Android用の(C言語ライクな)スクリプト言語開発
・(適当に作った)作りかけの未完成ツールをなるべく完成させ適切なところにアップしていく
2010年11月4日木曜日
RallyQの利用者人数推移
mixiアプリとして2010//11/02に公開できた。
http://mixi.jp/run_appli.pl?id=26046
日付 利用者人数
------------------------------------------------
2010/11/02 12(アプリ公開承認日)
2010/11/03 80
2010/11/04 104
2010/11/05 119
2010/11/06 134
2010/11/07 151
2010/11/08 161
2010/11/09 171
2010/11/10 176
2010/11/11 182
2010/11/12 180
2010/11/13 192
2010/11/14 203
2010/11/15 209
2010/11/02~2010/11/03の増加率は、68人
これは、自分のページでひっそりとブラウザゲームを公開しているよりも、
かなりの増加率に思える。
2010年10月27日水曜日
Cg Toolkit 2.2 (February 2010) のインストール、環境設定
http://developer.nvidia.com/object/cg_2_2_feb10.html
2.Visual C++の設定
(1)メニュー[ツール(I)]→[オプション(O)]を選択
(2)オプションダイアログの[プロジェクトおよびソリューション]→[VC++ディレクトリ]を選択
(3)インクルードファイルを選択し、C:\Program Files (x86)\NVIDIA Corporation\Cg\includeを追加
(4)ライブラリファイルを選択し、C:\Program Files (x86)\NVIDIA Corporation\Cg\libを追加
3.The OpenGL Extension Wrangler Library (GLEW) のダウンロードとファイルコピー
(1)http://glew.sourceforge.net/からglew-1.5.6-win32.zipをダウンロード
(2)glew-1.5.6-win32.zipを展開する
(3)glew-1.5.6\include\GL\*.hをC:\Program Files (x86)\NVIDIA Corporation\Cg\include以下にコピー
(4)glew-1.5.6\lib\*.libをC:\Program Files (x86)\NVIDIA Corporation\Cg\libにコピー
(5)glew-1.5.6\bin\glew32.dllをC:\Program Files (x86)\NVIDIA Corporation\Cg\binにコピー
2010年8月7日土曜日
3Dビューワとライブラリの完成度をあげるために、いくつかミニゲームを作成してみようと計画
とりあえず、キー操作で3Dオブジェクトをコントロールするものを
作成してみた。
http://nao3dviewer-ver1.appspot.com/test/TestCntlObj01/run.html
<操作方法>
[W]:上方向に移動
[S]:下方向に移動
[A]:左に移動
[D]:右に移動
[↑]:上に向ける
[↓]:下に向ける
[←]:左に向ける
[→]:右に向ける
[SHIFT + →]:視点を進行方向を軸とし右に回転
[SHIFT + ←]:視点を進行方向を軸とし左に回転
[SPACE]:前方に移動
こちらで公開されているスペースシャトル(メタセコイアで作成された)を使用させていただきました。
http://rcp.web.infoseek.co.jp/
2010年7月6日火曜日
信用度を少しでもあげるために・・・・コードジンに投稿してみましたがボツになりました。
(作業としてはトータルして2時間程度でしょうか)
1週間たっても返信がないのでこちらからどうでしょうかと
問いあわせたところCodeZine編集部から今回はボツですよ~とお知らせがきました。
(今後は、たぶんないんだが・・・・・)
ボツの理由は、以下らしいです。
ボツの理由1.あえて下火になったJavaアプレットを利用する理由が分からない
(Flash、Silverlight、HTML5あたりが主流です。描画性能もFlashの方が上かと考えます。)
ボツの理由2.基本的にフリーソフトの使い方の紹介になっている
ボツの理由2.は書き方を変えればなんとかなりそうだが、
ボツの理由1.についてはどうしょうもない。理由がわからないと言われても、
本当に困るんですが・・・・・まぁ、ダメらしいのであきらめるとしよう。
2010年6月25日金曜日
フリーソフト公開で面倒なことになる???
の記事
オープンソースソフトを家電店が“自社開発”と偽って販売
岡田大助2004 年2月20日 19時34分
オープンソースソフト開発者がフリーソフトウェアとして公開していたHDDレコーダー用ソフトが、ある家電店で“自社開発”のソフトウェアとして HDDレコーダーとともに販売されたことが、インターネット上で話題になっている。
“自社開発”と偽ってバンドル販売されたのは、NEC製HDDレコーダー「AX-10」上で動作するサーバソフト「wizd on NEC AX home AV server」。これは、Linux上に置いてあるムービーファイルをVertex Linkが販売しているホームネットワーク型マルチメディアプレーヤ「MediaWiz」で再生するためのサーバソフト「wizd」を、NEC製HDDレコーダー「AX-10」用に改造したもの。
家電店では、改造版wizdを作者に無断でバンドル販売し、ユーザーサポート先として作者の連絡先を記載していた。このため、作者に対して「操作法がわからない」「返金せよ」という苦情メールが殺到した。
今回問題になった点はいくつか挙げられる。まず第1に、オープンソースソフトを家電店が勝手に“自社開発”として販売したこと。この際、もともと付属していたドキュメント類は削除されていた。第2に、改造ソフトをAX-10にインストールすることでメーカーからの製品サポートを受けられなくなることを顧客に一切説明しなかったこと。そして第3に、製品のサポート先として改造ソフトの作者のメールアドレスのみを記載し、サポートを作者に丸投げしていたことが挙げられる。作者は、殺到する苦情メールのおかげで通常の開発作業ができず、また精神的な苦痛を強いられている。
家電店がライセンスや操作方法などを記したドキュメントを一切削除したことが、問題を大きくしている。オリジナルのwizdのライセンスは「複写、移植、改変、転載、再配布、すべて許諾します。用途を問わず、好きにしてもらってかまいません」と極めて曖昧になっている。しかしながら、オリジナル版にAX-10用の付加機能を追加した改造版wizdのライセンスには、「このパッケージはwizd以外のライセンスが含まれており無断での再配布また他サイトでの二次配布および商用利用等の利用は行うことができません」としっかり記されている。
また、ドキュメントの中には「このソフトウェアはNECの公式アップデートではありません、インストールした場合NECの保証を受けられなくなる可能性があります。 利用者の自己責任でのご利用をお願いしております」との一文もあり、家電店がドキュメントを削除したことで、ユーザーに混乱が生じている。
さらに、サポート用問い合わせ先として、作者のhotmailメールアドレスのみを記載し、URLや配布サイト名などは伏せられていた。作者によると、「非常に険悪なメールが多数(1日に30~40通)無視すれば無視をするほど同じ内容を何十通と送られてくる」という。作者のメールサーバをパンクさせるほどのメールが殺到しており、通常のメールが埋もれてしまったりエラーではじかれてしまったりしているという。
作者はこの家電店に対して事実確認の電話を行ったが、家電店と本部をたらいまわしにされたという。以後、メールによる事実確認を行ったが、「そんな事実はない」「アルバイトが勝手に企画したことなのでわからない」といった返答が戻ってきた。それどころか、「これで有名になったんだから良かったと思ったほうがいい」「ユーザーサポートの費用払ってやってもいい」「その代わりソフトの権利はウチの会社でもらう」「所詮タダで配っているソフトだから誰の著作権も何もない」などといった的外れな返答まで来る始末だ。
作者は、改造ソフト販売の停止、店頭での謝罪分の掲示、購入者へ5000円の返金(作者によれば、バンドル販売以外にもソフト単体を5000円で販売していたという)を求めている。現在、家電店側の対応を待っている状態だ。
どこの家電屋???
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
オープンソースソフトを自社製として販売、サポート作者丸投げ
HDDレコーダ用ツールwizdをNEC AX-10などでも使えるように改良しているハードディスクレコーダー総合ハッキングガイドの成果物をHDDレコーダに添付して販売した家電店が現れ、騒ぎになっている。作者のページにまとめられている事件概要を要約すると、家電店がAX-10用wizdを自社とメーカの共同開発品として製品にCD-Rで添付した上で、メーカー保障が無効になることを説明せず、ドキュメント類を削除し、自社のサポート先として作者のメールアドレスを記載していた。他にもネットで入手できることを黙ったまま5000 円で単体販売もしていた。なにも知らなかった作者のところに返金をもとめたりするクレームのメールが突然大量に舞い込んで発覚した。現在は店が店頭での返金に応じるが、謝罪や告知は行わない、という方向で収束したようだが、途中で店側が開き直るなど、平和的な解決とは言いがたい。
今回の事件の原因のひとつにwizdのライセンスがとても曖昧であることがあげられる。『ややこしい事は言いません。複写、移植、改変、転載、再配布、すべて許諾します。用途を問わず、好きにしてもらってかまいません。[...]ソース公開義務はありません。勝手にCopyrightとか付けて再配布してもかまいません。ただし、以後の責任は取るように。』(wizdのページより)と、オープンソースソフトウェアの範疇ではあるが、そもそもライセンスと呼ぶことすら少し無理があるものになっている。今回は店舗が「責任」を果たさなかったために騒ぎになったわけだが、このライセンスを読んで何をしてもいいと思ったとも十分に考えられる。もし家電店が逆キレしたまま営業妨害などの裁判になっていた場合、このような曖昧なライセンスではリスクがとても大きい。ソフトを公開するときには自分でライセンスっぽいものを書き下ろすのではなく、公開の目的をよく考えた上で、なるべく広く知られている、ちゃんと書かれた既存のライセンスを採用することを強く勧めたい。
フリーソフトなのに適当な配布を行うと、なんつーか面倒なことになってしまうということか?
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
Re:誤解しないように! (スコア:5, 参考になる)
Anonymous Coward : 2004年02月19日 3時15分 (#498866)
だから、あの顛末文を書いたの(というか被害者?)はAX10USER氏であって、 wizdオリジナル作者ではないと言っておろうに・・・
ついでに問題点のまとめ
店とソフト開発者間の問題点
* 「自己責任で」と明記した上で公開されているソフトを店が勝手にバンドルして販売し(ここまでは多分問題無い)、問い合わせのあった客に「店は関係無い、作者に聞け」と言ってAX10USER氏へ問い合わせが行くように仕向け、本来AX10USER氏には義務の無いサポートをさせようとした。
* 問題を指摘したAX10USER氏に対して「これで有名になったんだから良かったと思ったほうがいい」 「ユーザーサポートの費用払ってやってもいい。 その代わりソフトの権利はウチの会社でもらう。サポート費用は月1000円」 「所詮タダで配ってるソフトだから誰の著作権も何もない、 ウチでつくってるといえばウチのもんだよ。」 など、罵詈雑言を浴びせた。
* 購入した顧客へも迷惑をかけたのだから店頭へ謝罪文を張り出して欲しい。またAX10USER氏のWebへその謝罪文を掲載させて欲しいと要求すると「店舗での謝罪文はショップとしてのイメージを損ねる恐れがあるため、告知にとどめさせていただく。店舗名・所在地の公開は品位を損ねる可能性があるので公開はやめていただきたい。」という回答だった
店と購入した顧客との間での問題点
* 「当店とメーカー共同開発のソフトウェアが搭載」と称して販売されていたため、当然メーカーサポートがあるものと考えて顧客は購入したと思われるが、メーカーであるNECの保証対象外のソフトを入れた事になるので、メーカー保証が効かなくなる。
* AX10USER氏の配布物に含まれたドキュメント等が削除されていたため、ライセンス等を知る事ができない。また、AX10USER 氏のWebのアドレス等も知る事ができず、AX10USER氏のメールアドレス以外、何の情報も得られない状態になっている。
その他の問題
* NECに著作権があり、再配布を禁止されているインストーラが同梱されている(AX10USER氏の配布物には含まれていない。入手法は書かれている)
ざっとこんな感じでしょうか。
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
洗礼だと思われます。 (スコア:4, 参考になる)
Anonymous Coward : 2004年02月19日 8時09分 (#498923)
商用利用される可能性があるソフトウェアを公開しようとされる方は
今から覚悟をして下さい。私ですら何度かトラブルを経験しました。
私の方は大黒字(商用時有料での公開の為)ですのでへっちゃらですが、
赤字だとサイトを閉鎖したくなる程の衝撃を受けそうです。
どぎつい内容のライセンス条件を提示されているサイトは
大抵何かトラブルを受けたのち、ライセンスの追加や書き換えを
行って最終的にキツイ内容に落ち着いたと言う物だと思われますので
どぎついライセンス条件を提示されているサイトの物を
参考にして使用条件を書くのがするのが良い作戦です。
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
Re:洗礼だと思われます。 (スコア:2, すばらしい洞察)
itoshikazu (15602) : 2004年02月20日 5時46分 (#499545) ホームページ
フリーではあるがライセンスの変更を認めないGPL以外のライセンスのモノと組み合わせる事ができない。
確かに、この部分だけをとってみれば、結果としてGPLが不便なものになっているのは事実ではあります。でもそれは、GPLが不自由なのではなくて、GPLと組み合わせる他のソフトのライセンスの方が不自由なのであって、GPLに責任はないと私は思います。たとえば、BSDライセンス(宣伝条項なし)のソフトをGPLソフトに組み合わせてGPLで配ることには何の問題もないわけで。
GPLは自由を広めるための不自由なライセンスであって、本当に自由なライセンスというのはBSDのような「他の部分にまで強制力を働かなさない」ライセンスだと思います。
BSDライセンスは、BSDライセンスで配布されたソフトの派生物を自由に利用することができない可能性を残しているという点で、むしろ不自由なライセンスだと私は思います。
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
wizdは (スコア:2, 参考になる)
Anonymous Coward : 2004年02月19日 1時11分 (#498771)
元々はHDDレコーダ向けのツールでなくてLinuxで動くメディアサーバデーモン (MediaWizは元々Windowsマシン向けのサーバアプリが付いて来るけれど)
それをLinuxを積んだHDDレコーダでも動くように改良したバージョンをHDDレコーダと付けて売ったと。
タダで入手できるものを5000円で売るとか、元々メーカ保証が効かなくなる行動をそれを説明せずに薦めるとかモラル的な面が不味いというところかな。
フザけた態度である事は間違い無いけれど、こういうとてつもなく常識のない行動に対してライセンスは無力であった と。
ある程度の商品知識があれば引っかからずに済むんだから裁判しかけて勝てるかどうかは微妙な所なんではなかろうか。
匿名の利を活かして、2chのスレとかこの辺にでも店舗名書いてしまうのが消費者のためだとも思う。
*
Re:wizdは (スコア:4, 参考になる)
one-one (17888) : 2004年02月19日 2時06分 (#498823) 日記
タダで入手できるものを5000円 で売るとか、
それをいい始めたら初期のTurboLinuxとかもモラルがないということに……
OpenSourceのビジネスって基本的にただで入手できるものに packageの選択とかサポートとかの付加価値をつけてやるものでしょう.
でも ここはそのサポートをやるわけでもないばかりか ページ作者にそのサポートを押し付けたりしてるってのも問題なわけですよね
■以下http://slashdot.jp/it/article.pl?sid=04/02/18/1518210より
Re:先人の知恵 (スコア:1, 興味深い)
Anonymous Coward : 2004年02月19日 1時46分 (#498801)
アメリカの法に則り記述されたライセンスは国内でもそのまま有効なのでしょうか?
それはさておき、私もいくつかフリーソフトを作って公開していますが、GPLやらBSDやらを採用する気はまったくありません。
私の場合、ソフトを作った目的は、自分が便利なツールを作るからで、それ以上でもそれ以下でもありません。ライセンスというより思想(宗教)と化しているGPLとかBSDライセンスを適用するには、その思想(宗教)理解から始める必要があり、それは「めんどくさい」からです。
そもそもヒゲの偉い人(笑)との談話集などを読むと、精通している思われる関係者ですら間違えて理解しているのも多いし……。
ってかそんな面倒な作業が当たり前なら公開しない方を選ぶヨ。
フリーソフトも面倒だね
2010年6月18日金曜日
昔、把握していたバグの原因を忘れていた・・・・・
取得し、ライブラリのチェックをしていたら
あるメタセコイアで作成された車のモデルがうまく表示できない。
原因を特定するまで、今までかかった。
(テクスチャのサイズを変更する処理が抜けていた。
これは昔、把握していたことだったのだが、すっかり忘れていた。
・・・・サイズ変更処理を入れなければならない)
これでようやく寝れる・・・・・
2010年6月14日月曜日
Xファイルパーサを書き直すことに・・・・
読み込み処理部分の出来がよくない。
いろいろと問題がでているので
全面的に書き直すことにした。
(昔作成した、スクリプト言語の構文解析と字句解析を利用することにした)
一時間程度で書き直せると考えていたけど
予想以上に時間がかかってしまいました。
本日の昼から初めて、今ようやく一応終了することができた。
とはいえ、まだ完全に終了したわけではなく
まだいろいろと未対応部分が多いことがわかった。
2010年6月11日金曜日
フリーのよさげなモーションデータのサイトがあった。
モーション数も多く、いろいろと利用できそう。
http://www.mocapdata.com/
http://www.mocapdata.com/product.cgi?product_id=10015
http://www.mocapdata.com/page.cgi?p=terms_of_use
http://www.mocapdata.com/index.cgi?ditem=10&category_id=10
見てみると対応フォーマットは、Autodesk FBX、Vicon C3D
知らないフォーマットである。^^;
■Autodesk FBX
<http://usa.autodesk.com/adsk/servlet/index?siteID=1169823&id=6962262>
FBX® はプラットフォームに依存しないオープンな業界標準 3D ファイルフォーマットです。これにより FBX を サポートするソフトウエアパッケージで作成したコンテンツに自由にアクセスすることが可能となります。高度なインターオペラビリティをソフトウエア間で実 現する FBX プラグインは Autodesk® Maya® 、Autodesk® 3ds Max® 、Autodesk® MotionBuilder® ソフトウエアと共に提供されます。
現状では、このフォーマットの利用は無理っぽい。
(ファイルフォーマットが公開されてない???)
■Vicon C3D
ファイルフォーマットが公開されているみたい。
http://www.univie.ac.at/cga/faq/c3d.html
http://www.c3d.org/
The 3D Biomechanics Data Standard
This web site provides definitive information about the C3D file format for programmers, manufacturers and end-users. The C3D format is a public domain, binary file format that has been used in Biomechanics, Animation and Gait Analysis laboratories to record synchronized 3D and analog data since the mid 1980's. It is supported by all 3D major Motion Capture System manufacturers, as well as other companies in the Biomechanics, Motion Capture and Animation Industries.
C3D Software Applications
http://www.c3d.org/c3dapps.htmlSource Code written in C for DEC Integer C3D data
A set of user written C sources that read and write C3D files in DEC integer format. Note that many of the routines only return a limited set of parameters but could be modified to return additional parameters. Includes documentation and comments.
C3D Write - create C3D from ASCII - User Written
A user written windows program to import data into a C3D file. Unfortunately without any documentation apart from a sample ASCII text input file.
C3D File viewer (MLSviewer)
A fully functional C3D file viewer written by Motion Lab Systems the runs on any 32-bit Windows computer. It allows the user to view the parameter structure, analog data values and 3D data values stored in any C3D file. The download file size is 1.0Mb.
C3D Software Development Kit (C3Dserver)
A Software Development Kit (SDK) for C3D. This runs on any 32-bit Windows system and provides easy-to-use C3D file access from Visual Basic, MATLAB, C++, Excel, Java, and Word etc. Written by Motion Lab Systems, a fully functional version of this application is available at no charge while a faster version can be purchased. The SDK includes documentation, sample Visual Basic and C++ code, and a C3D file editing application (including complete VB source code and documentation). Example applications that use the C3Dserver are available here - several commercial 3D motion capture systems rely on the C3Dserver to provide C3D compatibility.
C3D User Manual (auto-update installation).
This installs a PDF copy of the C3D technical implementation manual, containing over 100 pages. This documents the C3D specification and includes detailed notes and illustrations for programmers who need to access or create C3D files for any application. The manual includes a complete description of the C3D file format and is supplied as a PDF file that can be printed and redistributed with any C3D application. The installation of the manual includes an update program that can automatically check (and optionally download) future updates to the C3D manual.
Sample C3D data files
This collection of files is a resource for programmers, developers and users who want to test their software applications for compatibility with the C3D standard. Each downloadable zip file contains a text file with additional information - the most recent additions to this collection are at the bottom of the page.
All software applications that claim C3D compatibility must be able to open and read the sample files that meet both the Original and Current C3D specifications as well as handle C3D files that contain errors in a sensible manner.
http://www.c3d.org/sampledata.html
2010年6月10日木曜日
3Dモデルビュワーアプレットを作成
3Dビューワを作成してみました。(メタセコイア、Xファイルのモデルデータが表示できます。)
よろしければ使ってみてください。
(現在、機能強化したバージョンを基本フリーソフトとして公開しています。)
2010年6月7日月曜日
2010年5月26日水曜日
2010年5月17日月曜日
DirectXのマトリクス計算メモ
// いままでの計算は、以下のメソッドで行うようにしている
public Vector Mult(Vector a)
{
Vector v = new Vector();
v.x = m00 * a.x + m01 * a.y + m02 * a.z + m03;
v.y = m10 * a.x + m11 * a.y + m12 * a.z + m13;
v.z = m20 * a.x + m21 * a.y + m22 * a.z + m23;
return v;
}
// Xファイルからのマトリクス計算は、以下のように行わないと正しい結果が得られない
public Vector MultX(Vector a)
{
Vector v = new Vector();
v.x = m00 * a.x + m10 * a.y + m20 * a.z + m30;
v.y = m01 * a.x + m11 * a.y + m21 * a.z + m31;
v.z = m02 * a.x + m12 * a.y + m22 * a.z + m32;
return v;
}
2010年5月15日土曜日
久しぶりにVC++を使ってみると・・・・
(完全には程遠いいものの)自前のJAVA3Dライブラリに機能追加することができた。
[機能]
Xファイルから
フレーム
メッシュ
メッシュ法線
メッシュテクスチャ
メッシュマテリアル
マテリアル
部分をパーサし、Javaアプレットでモデル表示を行う
Xファイルからの
スキンウェイトとアニメーションの実装は、
結構難しくまだできていない。
ところで久しぶりにVC++を使って
解析のためにある情報をデバッグウィンドウに表示したかったのだが
今使用しているのはMicrosoft Visual C++ 2008 Express Editionなので
TRACEマクロが使えない。結構不便である。
printf
cout
なども使ってみたができない。
(もちろんできるわけないのはわかっているけど、とにかくいろいろとやってみたりした)
本当になさけない状態であった。
VC++自体も2年ぶりにさわったので、どうもいろいろと忘れていることが多く
使っていて、ものすごく不器用になってしまったたような気がした。
いろいろと調べているうちに
OutputDebugString
http://msdn.microsoft.com/ja-jp/library/cc428973.aspx
を使えば表示できることがわかった。
解析したい部分に、以下のような感じで追加してみたりした。
#ifdef _DEBUG
char debug[512];
sprintf(debug,"■%s \n",name);
OutputDebugString(debug);
#endif
void CHogeHoge::TraceMatrix(const char* name) {
#ifdef _DEBUG
char debug[512];
sprintf(debug,"■%s \n",name);
OutputDebugString(debug);
int limit = fr.size();
for(int i=0;i
OutputDebugString(debug);
sprintf(debug,"%f %f %f %f\n",fr[i]->Matrix._21,fr[i]->Matrix._22,fr[i]->Matrix._23,fr[i]->Matrix._24 );
OutputDebugString(debug);
sprintf(debug,"%f %f %f %f\n",fr[i]->Matrix._31,fr[i]->Matrix._32,fr[i]->Matrix._33,fr[i]->Matrix._34 );
OutputDebugString(debug);
sprintf(debug,"%f %f %f %f\n",fr[i]->Matrix._41,fr[i]->Matrix._42,fr[i]->Matrix._43,fr[i]->Matrix._44 );
OutputDebugString(debug);
}
#endif
}
とりあえず、来週までに、
JAVA3Dアプレットに
Xファイルからのスキンウェイトとアニメーションの
読み込みとアニメーションの実装を行いたい。
2010年5月14日金曜日
Xファイルを読み込む機能を追加 しようと計画
しようと計画。
まず、DirectX SDK最新を取得し、インストール
それから参考にしたいVC++のプログラムがあったので、コンパイルしてみると
fatal error C1083: include ファイルを開けません。'dmusicc.h': No such file or directory
というメッセージがでた。
理由は、
dmusicc.hとdmusici.hはDirectMusic関連のヘッダファイルですが、DirectX SDK August 2007を最後に廃止されました。
ということらしい。
参考にしたい部分は、Xファイルをどのように使用しているかなので
サウンド部分は、必要ないので、とりあえずサウンド関連クラスはかたっぱしから削除し続けて実行できるようにしてみた。
実行できるようになったので、ソースとXファイルをしばし見てみる。
Xファイルを眺めていると、
TextureFilename {
"xxxx.dds";
}
という部分があった。
このファイル形式は、
DxTex.exe
を使えば、見ることができることがわかったが、
とりあえずファイル形式をpngに変換したいと考え
DirectX SDKのフォルダを見てみると、それらしきものがあった。
その名は、Texconv.exe
検索してみると、MSDNのページがヒットした。
http://msdn.microsoft.com/ja-jp/library/bb206243%28VS.85%29.aspxの内容は、以下
次のフォーマット間でテクスチャーを変換 するコマンド ライン ツールです。BMP、DDS、JPEG、HDR、PFM、または PNG。
互 換性チャート
Direct3D 9 | Direct3D 10 | 64 ビット ネイティブ モード | Windows?XP | Windows?Vista |
---|---|---|---|---|
あ り | 不要 | あり | あり | あ り |
Path
実行ファイル Texconv.exe は、以下のようにプラットフォームによって異なる場所にあります。
32 ビットDirectX SDK ルート\Utilities\Bin\x8664 ビットDirectX SDK ルート\Utilities\Bin\x64構文
Texconv.exe では、次のコマンド構文を使用します。
texconv [-w number] [-h number] [-d number] [-m number] [-f format] [-if filter] [-mf filter] [-c color] [-srgbi] [-srgbo] [-px string] [-sx string] [-o directory] [-ft file-type] [-nologo] file-name
file-name パラメーターは、変換対象のファイルを指定します。
オプションのコマンドライン スイッチを、次の表に示します。
オ プション スイッチ | 説明 |
---|---|
-c color | カ ラーキー値。このカラーは、ソース テクスチャー内にあると、出力テクスチャー内では透明な黒の値 (0x000000) に置き換えられます。出力テクスチャー内にアルファ チャンネルがあると、指定したカラーがこれにより、透明になります。アルファ チャンネルが存在しない場合は、黒に変更されます。このカラーを指定する場合は常に、アルファ値 (カラーが不透明の場合は FF を使用) を含めるようにします。たとえば、-c FFFE02A5 と指定すると、カラーキー値はソリッドのマゼンタになります。 |
-d number | 出 力テクスチャーの深度。この設定は、ボリューム テクスチャーにのみ適用されます。 |
-f format | 出 力形式。D3DFORMAT の任意のフォーマットをプレフィックス D3DFMT_ なしで指定します (例外:D3DFMT_MULTI2_ARGB8)。 |
-ft file-type | 出 力テクスチャーのファイル タイプ。次のいずれか 1 つを指定します。bmp, dds, jpg, hdr, pfm, png, or tga。デフォルト値は dds です。 |
-h number | 出 力テクスチャーの高さ (ピクセル単位)。 |
-w number | 出 力テクスチャーの幅 (ピクセル単位)。 |
-if filter | イ メージ フィルター。次のいずれか 1 つを指定します。NONE、POINT、LINEAR、TRIANGLE、BOX、NONE_DITHER、POINT_DITHER、LINEAR_DITHER、TRIANGLE_DITHER、 または BOX_DITHER。名前に DITHER が含まれるフィルターは、4×4 の順序つきディザー アルゴリズムも適用されることを示しています。これらのフィルターについては「D3DX_FILTER」 を参照してください。 |
-m number | 出力テクスチャーに 生成されるミップマップ レベルの数。この設定は DDS 出力にのみ適用されます。詳細については、「ミッ プマップによるテクスチャー フィルタリング (Direct3D 9)」を参照してください。 |
-mf filter | D3DX_FILTER で規定されているミップマップ フィルター値。 |
-o directory | 出 力ディレクトリ。 |
-px string | 得られるテクスチャー の名前の前に付加されるテキスト文字列。 |
-srgbi または -srgbo | -sRGBi は、入力データが sRGB (ガンマ 2.2) カラー フォーマットであることを示す場合に使用します。-sRGBo は、出力データが sRGB カラー フォーマットであることを示す場合に使用します。 |
-sx string | 得 られるテクスチャーの名前の後に付加されるテキスト文字列。 |
-nologo | 著 作権に関するメッセージを除外します。 |
どうやら使えそうだ。
>"C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Utilities\bin\x64\Texconv.exe" xxx.dds -ft png
で実行してみたところ、pngファイルに変換できた。
2010年5月13日木曜日
視点の移動
■修正内容
・視点を移動できるようにしてみた。
<操作方法>
[W]:視点を前に移動
[S]:視点を後ろに移動
[A]:視点を左に移動
[D]:視点を右に移動
[SHIFT+W]:視点を上に移動
[SHIFT+S]:視点を下に移動
[SHIFT+A 又は →]:視点を左に向ける
[SHIFT+D 又は ←]:視点を右に向ける
[↑]:視点を上に向ける
[↓]:視点を下に向ける
[SHIFT + →]:視点を進行方向を軸とし右に回転
[SHIFT + ←]:視点を進行方向を軸とし左に回転
[ESC]:モデルの移動を一時停止と再開
2010年5月11日火曜日
モデルを歩かせてみる。(3Dモデル表示Javaアプレットに機能追加してみた)
■追加修正内容
・階層的に行列演算を行えるように修正
・メタセコイアで作成した同一オブジェクトの任意の頂点のみを行列演算を行えるように修正
<操作方法>
[マウス左ドラッグ]:オブジェクトの回転
[マウス右ドラッグ]:オブジェクトの移動
[ホイール]:オブジェクトの拡大・縮小
2010年5月10日月曜日
2010年4月20日火曜日
2010年4月17日土曜日
3Dモデル表示アプレットの機能追加予定メモ
1.フォンシェーデイングでも表示できるようにする
2.バンプマッピングの対応
3.複数のメタセコイイアファイルでのモデル表示
4.3Dモデルをそれらしく動作させる(歩いたりできるようにする)
1と3は、たぶん問題なく実装できると思う。(3が一番簡単)
2.は1ができてないと実装できない。
4.は結構難しいかもしれない。
(動かせることは動かせるけどロボットのような動きになってしまうような・・・)
2010年4月16日金曜日
3Dモデル表示アプレット(メタセコイアファイル)
以前、作成した3Dモデル表示のJavaアプレットに
メタセコイアファイルを読み込み表示する機能を追加してみた。
はじめは、おそらく2~3週間ぐらいかかるかもしれないと考えていたが
それらしきモデルの表示は、これまで自分が作成したプログラムを
流用して、あっさり1日で作成できた。
いくつかネット上で公開されていたメタセコイアでのファイルを試しに、いろいろと読み込んでみて
不具合があったら、その都度プログラム修正を行った。
アルファテクスチャから物体を透過させる対応ができていなかったので
いろいろと試行錯誤して、
(完全な対応はできていないものの)なんとかそれらしく表示できるようにしてみた。
(グローシェーディングでの表示)
自分が作成した3Dモデルを表示させることができれば、一番ベターだが、
3Dモデル自体の作成が下手糞(これまでは、ほとんど作成したことがない)なので、
現在、3Dモデルは、テストとして書籍ローポリスーパーテクニックにあったものを使用しています。
<内容>
メタセコイアファイルデータをグローシェーディングで表示するアプレット
Java3D、JOGLは、使用していません。自作の3D表示用クラスで表示させています。
<操作方法>
[マウス左ドラッグ]:オブジェクトの回転
[マウス右ドラッグ]:オブジェクトの移動
[ホイール]:オブジェクトの拡大・縮小
2010年4月7日水曜日
サイト上にあるサウンドデータをSourceDataLineで再生2
jar内のサウンドデータをSourceDataLineで2回再生
(オーディオデータをリアルタイムにストリーミングしながら再生する)
1回目の再生は、読み込みながら
2回目の再生は、データを溜め込んでから
【補足】
jar内のファイルへのアクセスは、以下のように指定すれば、java.net.URLで読み込むことができる。
jar:http://localhost:8888/SoundTest03.jar!/TESTDATA01.data
【ソース】
・
・
・
省略
・
・
・
public void case010() {
printf("PLAY SOUND \n");
DataInputStream dis = null;
byte[] buffer = new byte[8000];
int off, len, l=0;
AudioFormat.Encoding enc = new AudioFormat.Encoding("PCM_SIGNED");
AudioFormat format2 = new AudioFormat(
enc,
22050.0F,
16,
2,
4,
22050.0F,
false
);
SourceDataLine line = null;
BytePool bp = new BytePool();
String DEF_SRCDATA = "SoundTest03.jar!/sound/TESTDATA01.data";
String srcdata = DEF_SRCDATA;
printf("0.srcdata >>>%s\n", srcdata);
try {
try{
printf("getDocumentBase() >>>%s\n", getDocumentBase().toString());
printf("getCodeBase() >>>%s\n", getCodeBase().toString());
srcdata = getParameter( "DATA_SRC" );
printf("1.srcdata >>>%s\n", srcdata);
printf("getParameter( 'DATA_SRC' ) >>>%s\n",srcdata );
if(srcdata == null){
printf("chk01 \n");
srcdata = "jar:" + getCodeBase().toString() + DEF_SRCDATA;
}
else{
printf("chk02 \n");
}
}
catch(Exception e){
printf("chk03 \n");
}
printf("2.srcdata >>>%s\n", srcdata);
URL url = new URL(srcdata);
dis = new DataInputStream(
url.openStream()
);
// DataLine.Info lineInfo = new DataLine.Info(SourceDataLine.class,format);
DataLine.Info lineInfo = new DataLine.Info(SourceDataLine.class,format2);
line = (SourceDataLine) AudioSystem.getLine(lineInfo);
// line.open(format);
line.open(format2);
line.start();
while ((len = dis.read(buffer)) > 0) {
printf("len >>%d \n",len);
bp.add(buffer,len);
for (off = 0; len > 0; off += l, len -= l) {
try{
// 書き込まれるバイト数] % [フレームサイズのバイト数] == 0
// System.out.printf("[書き込まれるバイト数] % [フレームサイズのバイト数] == 0 \n");
printf("[%d] % [%d] == %d \n",len,4,len % 4);
// System.out.printf("before len >>%d off >>>%d l >>>%d\n",len,off,l);
l = line.write(buffer, off, len);
// System.out.printf("after len >>%d off >>>%d l >>>%d\n",len,off,l);
}
catch(IllegalArgumentException e){
printf("%s\n", e.toString());
}
}
}
printf("all size >>>%d bytes \n",bp.getSize());
byte[] data = bp.getData();
line.write(data, 0, data.length);
} catch (Exception e) {
printf("%s\n", e.toString());
} finally {
if (line != null)line.close();
if (dis != null){
try{ dis.close(); }catch(Exception e){}
}
// System.exit(0);
}
}
public static void main(String[] args) {
SoundTest03 t01 = new SoundTest03();
// t01.case001();
// t01.case002();
// t01.case003();
// t01.case004();
// t01.case005();
// t01.case006();
// t01.case007();
// t01.case008();
// t01.case009();
t01.case010();
}
class BytePool{
// ArrayList<byte []> datalist = new ArrayList<byte []>();
//LinkedList<byte []> datalist = new LinkedList<byte []>();
LinkedList<ByteBuffer> datalist = new LinkedList<ByteBuffer>();
public void add(byte[] b,int len){
ByteBuffer buffer = ByteBuffer.allocate(len);
buffer.put(b,0,len);
datalist.add(buffer);
// printf("%d bytes \n",b.length);
}
public int getSize(){
int size = 0;
for (int i = 0; i < datalist.size(); i++) {
size += datalist.get(i).capacity();
}
return size;
}
public byte[] getData(){
byte[] data = new byte[getSize()];
try{
int off = 0;
int len = 0;
// int ind = 0;
for (int i = 0; i < datalist.size(); i++) {
ByteBuffer buffer = datalist.get(i);
len = buffer.capacity();
buffer.position(0);
buffer.get(data,off,len);
// for(int j=0;j<len;j++){
// data[ind++] = buffer.get();
// }
off += len;
}
}
catch(Exception e){
printf("%s\n", e.toString());
}
return data;
}
}
【実行結果】
別ウィンドウで表示
2010年4月5日月曜日
サイト上にあるサウンドデータをSourceDataLineで再生
サイト上にあるサウンドファイルをSourceDataLineで再生
(オーディオデータをリアルタイムにストリーミングしながら再生する)
【ソース】
package com.naozary.test.sound;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.net.URL;
import java.util.Formatter;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JApplet;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class SoundTest02 extends JApplet implements ActionListener, Runnable {
// JPanel jPanel1 = new JPanel();
JScrollPane jPanel1 = null;
JTextArea tArea = new JTextArea();
Dimension dim = null;
Thread thread = null;
public void init() {
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
updateLayout();
}
});
dim = getSize();
// System.out.printf("%d , %d",dim.width,dim.height );
tArea.setEditable(false);
// this.setSize(new Dimension(550,300));
this.setSize(dim);
// jPanel1.setLayout(null);
tArea.setBounds(new Rectangle(0, 0, this.getWidth(), this.getHeight()));
// tArea.setText("AAAAA"); //デフォルトのテキストを表示
// tArea.setFont(new Font("Serif",Font.PLAIN,16));
tArea.setFont(new Font("Monospaced", Font.PLAIN, 16));
tArea.setTabSize(4); // タブサイズを設定
tArea.setForeground(Color.white);
tArea.setBackground(Color.black);
tArea.setLineWrap(true); // 右辺で自動折り返しにする
tArea.setSelectionColor(Color.lightGray); // 反転選択範囲の背景色
tArea.setSelectedTextColor(Color.blue); // 反転選択範囲の文字色
// jPanel1.add(tArea);
jPanel1 = new JScrollPane(tArea);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
AppletOn = true;
thread = new Thread(this);
thread.start();
}
public void run() {
// case001();
case009();
}
public void actionPerformed(ActionEvent e) {
}
public void updateLayout() {
// System.out.printf("*** enter updateLayout() ***\n" );
dim = getSize();
this.setSize(dim);
tArea.setBounds(new Rectangle(0, 0, this.getWidth(), this.getHeight()));
}
StringBuilder builder = new StringBuilder();
Formatter formatter = new Formatter(builder);
boolean AppletOn = false;
public void printf(String arg0, Object... args) {
formatter.format(arg0, args);
if (AppletOn) {
tArea.append(formatter.out().toString()); // デフォルトのテキストを表示
} else {
System.out.print(formatter.out());
}
// System.out.println("builder.length() >>>" + builder.length());
builder.delete(0, builder.length());
}
public void case009() {
printf("PLAY SOUND \n");
FileOutputStream fos = null;
DataInputStream dis = null;
byte[] buffer = new byte[8000];
int off, len, l;
AudioFormat.Encoding enc = new AudioFormat.Encoding("PCM_SIGNED");
AudioFormat format2 = new AudioFormat(
enc,
22050.0F,
16,
2,
4,
22050.0F,
false
);
SourceDataLine line = null;
try {
// DataLine.Info lineInfo = new DataLine.Info(SourceDataLine.class,format);
DataLine.Info lineInfo = new DataLine.Info(SourceDataLine.class,format2);
line = (SourceDataLine) AudioSystem.getLine(lineInfo);
// line.open(format);
line.open(format2);
line.start();
URL url = new URL("http://www.naozary.com/download?registerno=20100405193321564");
dis = new DataInputStream(
url.openStream()
);
while ((len = dis.read(buffer)) > 0) {
for (off = 0; len > 0; off += l, len -= l) {
l = line.write(buffer, off, len);
}
}
} catch (Exception e) {
printf("%s\n", e.toString());
} finally {
if (line != null)line.close();
if (dis != null){
try{ dis.close(); }catch(Exception e){}
}
// System.exit(0);
}
}
public static void main(String[] args) {
SoundTest02 t01 = new SoundTest02();
// t01.case001();
// t01.case002();
// t01.case003();
// t01.case004();
// t01.case005();
// t01.case006();
// t01.case007();
// t01.case008();
t01.case009();
}
}
【実行結果】
別ウィンドウで表示
2010年4月4日日曜日
サイト上にあるサウンドファイルをClipで再生
サイト上にあるサウンドファイルをClipで再生
(オーディオデータを全部プリロードして再生する)
【ソース】
package com.naozary.test.sound;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.net.URL;
import java.util.Formatter;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.Line;
import javax.swing.JApplet;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class SoundTest01 extends JApplet implements ActionListener ,Runnable{
// JPanel jPanel1 = new JPanel();
JScrollPane jPanel1 = null;
JTextArea tArea = new JTextArea();
Dimension dim = null;
Thread thread = null;
public void init() {
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
updateLayout();
}
});
dim = getSize();
// System.out.printf("%d , %d",dim.width,dim.height );
tArea.setEditable(false);
// this.setSize(new Dimension(550,300));
this.setSize(dim);
// jPanel1.setLayout(null);
tArea.setBounds(new Rectangle(0, 0,this.getWidth(),this.getHeight()));
// tArea.setText("AAAAA"); //デフォルトのテキストを表示
// tArea.setFont(new Font("Serif",Font.PLAIN,16));
tArea.setFont(new Font("Monospaced",Font.PLAIN,16));
tArea.setTabSize(4); //タブサイズを設定
tArea.setForeground(Color.white);
tArea.setBackground(Color.black);
tArea.setLineWrap(true); //右辺で自動折り返しにする
tArea.setSelectionColor(Color.lightGray); //反転選択範囲の背景色
tArea.setSelectedTextColor(Color.blue); //反転選択範囲の文字色
// jPanel1.add(tArea);
jPanel1 = new JScrollPane(tArea);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
AppletOn = true;
thread = new Thread(this);
thread.start();
}
public void run(){
// case001();
case004();
}
public void actionPerformed(ActionEvent e){}
public void updateLayout(){
// System.out.printf("*** enter updateLayout() ***\n" );
dim = getSize();
this.setSize(dim);
tArea.setBounds(new Rectangle(0, 0,this.getWidth(),this.getHeight()));
}
StringBuilder builder = new StringBuilder();
Formatter formatter = new Formatter(builder);
boolean AppletOn = false;
public void printf(String arg0,Object... args){
formatter.format(arg0,args);
if(AppletOn){
tArea.append(formatter.out().toString()); //デフォルトのテキストを表示
}
else{
System.out.print(formatter.out());
}
// System.out.println("builder.length() >>>" + builder.length());
builder.delete(0, builder.length());
}
public void case004(){
printf("PLAY SOUND \n");
Clip clip = null;
try{
URL url = new URL(
"http://www.naozary.com/download?registerno=20100404181152490"
);
AudioInputStream as
= AudioSystem.getAudioInputStream(url.openStream());
clip = (Clip)AudioSystem.getLine(
new Line.Info(Clip.class));
clip.open(as);
clip.start();
do{
Thread.sleep(1000);
}while(clip.isRunning());
}
catch(Exception e){
}
finally
{
if(clip != null) clip.close();
}
}
public static void main(String[] args) {
SoundTest01 t01 = new SoundTest01();
t01.case004();
}
}
【実行結果】
別ウィンドウで実行
2010年4月3日土曜日
企画書作成メモ
1.内容がきちんと伝わる
自分が思い描いていることを、相手に100%伝える。
2.相手に納得してもらう
3.必要度に応じて、等身大で作る
こちらの伝えたいことが完璧に伝わる企画書を最短の時間と労力で作る。
1と2は同じような気がするが・・・
企画とは提案である
・相手のメリットを明確にする。(これを実行することでどんなメリットがあるのか?)
・顧客の立場になって具体的な数値を盛り込んでいく。
(例)新規事業の企画書
収益の予測、成功の確率、かかるコスト、スタッフ、スケジュール
・相手が求めている情報を相手自身が気づいてないときでも、それを探りだして明記した企画書は優れている。
・企画の真髄は、『提案』と『ベネフィット(利益、恩恵)』
ベネフィットが予測であるなら、予測を裏付ける情報が必要
・ベネフィットが100%伝われば、企画書としては合格(ベネフィット以外の部分が多少伝わらないのはかまわない)
・究極は相手に考えさせる企画書
真実をしっかり書いてこそ、相手は考えてくれる。下手に良いを連発すると、疑いをもたれてしまう。
・最悪な企画書は嘘やだまし
自社製品に劣っている点があることを、あえて比較表で明確にする。新規事業のプロジェクトを提案するなら、
失敗する可能性やその予測を明確にする。
・どれほど苦労しても企画書は自分で作成する。
第3者に作成させて、思い通りにできあがるケースは稀である。
・企画書の目的を明確にする
・裏づけをどう用意するか。どう収集するか
・ターゲットを明確にする
商談であれば、ターゲットは決定権者となる。商談で話している相手は、単なる窓口で、決定権者は別にいることも多い。
・目的とベネフィットを決める
・理解度を把握する
・必要な資料やビジュアルを揃える
・構成を考える
・締め切り
・コンペの有無
■情報を集めるテクニック
・情報には常にアンテナを張っておく
・政府の統計や白書を利用する
■企画書構成の黄金則
企画書に最も重要なのは『ベネフィットのある内容』
次に大事なのは『構成』
・構成の基本
説明型:説明を重ねていき、結論としてキラーインフォメーションを見せる
インパクト型:相手がうなずいてしまうキラーインフォメーションを見せる
キラーインフォメーションは具体的に提示する。(抽象的にしないようにする)
・長い企画書の構成
<例>
0.タイトル
1.企画趣旨(キラーインフォメーション)
2.根拠
3.製品情報
4.ユーザ事例
5.価格等
6.付加資料
・相手の求めているポイントを突く
・相手が望むのは基本的に利益
・自分のアイディアを明確にする
・アイデアが浮かばない場合、組み合わせなどを考える。
■問題点を見せてしまう
・問題点は思いつく限り書いておく
・比較表には自社のマイナス点も盛り込む
・欠点の理由を明確にする
■『ライバルに負ける』と思うことから始める
・ベストな企画書を提示し続ける
■表示を見た瞬間、ページをめくった瞬間が重要
・最初に見る場所をよく考える
・読んでもらえそうもない企画書こそ、タイトルが命だ。
・ベネフィットを明確にする
・人づてに渡るなら必ず表紙を付ける
・目次を付ける
・読んで理解できることが大事
・裏付けを明確に(企画書が上に回ったときには、必ず反対者がいるもの)
■読まれる文字数の法則
・タイトルは16文字程度で
・本文は短いほどいい
・1行は25文字程度に
・下手な装飾はしない
・フォントは1種類で十分
・用紙を横に使うのも意外と効果的
■ポイントは三つにまとめ、優先順位を明確にする
■結論を『結論』と明記する(結論でなく目標、目的でもよい)
例「結論 御社の利益150%確保をお約束します」
例「目標 御社の利益150%確保をお約束します」
例「目的 御社の利益150%確保をお約束します」
■常に「なぜ」を明示する
・相手のなぜに先回りする。
・明確な理由がないならそれを書く
■提出のタイミングを推し量る
・説明が終わるまで渡さない
・先に渡すか、渡さないか
・書類の出し方は常識で
・企画の目的・思いは企画書を渡す前に伝える
・企画書を作るスピード
・読んでいただいたらお礼をいう
相手が企画書を読んでくれたなら、まずお礼を言おう。
■誰よりも早く大量の企画を出す
・企画を次々に提示する
・大量の企画を出し続ける
・あきらめるまで商談は生きている
・読んでくれない相手こそ根負けする
・企画書を断られたなら
キラーインフォメーションを明確にひとことで伝えるべき
例「必ず御社の経費を節約いたしますので、企画書を読んでいただけませんか?」
・企画がNGだった理由は(こちらから無理に)聞かない
提案とは、常にベストでなければならない。ベストな提案を提示して通らなかったなら、
もう理由などいらない。さらに良い提案を作り上げるべき。企画書を通すための条件や
情報を知りたいなら、それは、企画がNGだったときに聞き出すのではない。
"企画を出す前"の段階で完璧に聞いておかなければならない。
■社内と社外の企画書は大きく違う
社外に出す企画書:業務効率化の提案、広告企画、新製品の提案・・・何かを提案・提示して取引をしていただくものが主。営業が中心
社内の企画書:新製品企画書、新規事業計画書、販促のアイデア・・・自分の意見を提示する書類
・相手の読みたさが違う
社内の企画書:相手が読みたがっているケースが多い。
社外に出す企画書:相手が読みたがらないケースが多い→読む気になる企画書を作成しなければならない
・時間が違う
社内の企画書:じっくりと時間をかけて検討してもらえる可能性が高い。
社外に出す企画書:パラパラめくって終わりというケースが多い。
→パラパラめくった段階で相手のベネフィットが明確になれば、もっと読みたくなるはずだ。
・ニーズが違う
社内:企画書の提示を持っている。
自分の意思で何かを企画して上司に提示したのに「忙しい」と読んでもらえないなら、
それは、会社のベネフィットしか提案していないから。
会社と上司のベネフィットを同時に見せれば、読む気になってくれる。
社外:相手は読みたがっていないことが多い。読みたくない相手に読ませることを前提にしなければならない
・ライバルに関する情報が違う
社内:多くのケースでライバルの有無がわかる。内容を検討したり、ボリューム調整ができることがある。
社外:ライバルの有無がわからない。だから全力をあげて作成せねばならない。
・読み手に関する情報が違う
社内:最終的に誰が読むかがわかる。
社外:決定権者がわからない。誰が読むか不明
社内外とも企画書の読み手が増えるほど、反対者が出てくる可能性が高まる。
■見積もりと企画は必ず同時に提出する
・見積もりがあってこそ検討できる
「ビジネスの企画は、必ずコスト込みで判断される」
「値引きは、最も簡単でわかりやすく、非常に効果的だが、最も価値のない交渉手段だ」
値引きで勝負するなら、果たして企画書に力をいれる必要があるのだろうか?
企画書に力を入れるのは、適正な利益を上げたいからである。
企画を判断する内容がコストを含めて明確になっていることが求められる。
・値引き以外を明確にする
値引きは数字なのでわかりやすく比較しやすい。
値引き以外の付加価値はなかなか伝わりにくい。そこにを明確にする。
例)以下のような見出しをつけてポイントを明確にする。
「値引き以外の当社のサービス」
「価格以外のメリットはこれだけあります」
「価格ではかないませんが○×はお任せください」
・具体的に比較のできない言葉を使わない
■会議では、手抜きは必ず伝わる。
・怖いほど検証される
・適当に企画書を通さない
大事なのは、企画を通すことではなく、ビジネスを成功させて利益を上げること
もし、疑問や質問が出たならば、その疑念をクリアするための答えを用意しなくてはならない。
自分も同じ疑いの視点を持って、客観的に打ち消せるかどうかを考える。
■会議出席者の理解度をチェックする
・企画書が上にあがった場合
企画書は、すべて作り直さねければならないことがある
理由:役員の理解度が低いケースが多い
(役員の仕事は会社の経営であり、会社全体に目線を振り分けている。
また役職が上にいくほど投資と利益に敏感になる)
必要な情報は、面倒がらずにすべて盛り込む
・「任せたよ」は最も怖い
企画書の内容が完璧でなければならない。
実際のビジネスでは企画書通りにいくことはごく稀
万が一、ダメだったときの見極めまでも書いておくべき
<例>
例えば、新製品が発売後三ヶ月あまり売れなかったとする。
しかし、あなたの戦略では、プロモーションが効いてっくるのは
半年後だったとしよう。ところが、決定権者は我慢しきれずに
「売れないならうやめろ」と言ってくるかもしれない。
そんなときこそ、「当初の企画書に書いてある通り、6ヶ月経たないと効果が表れません」
と明言できるのだ。
当初の段階から予測していたことならば、それを読んでいなかった上司は
黙ってうなずくだろう。企画書とは、そんなビジネスの指針を示す資料でもあるのだ。
■会議こそ図解が命。説明するなら文章は書かない
企画書とプレゼンのスライドを二種類作ることも検討したい。
・会議を通すにはプレゼンが有効
・スライドを印刷して渡すのは愚の骨頂
■人の企画書を使いまわすのは危険につき、注意する
・人の作った企画書で説明ができない
内容を完全に理解していれば、何の問題もない。
例:
上司は「すみません、部下に作らせましたが、つまり、○×ということです」
・修正ミスが生じる
・最良の使い回しとは
■企画書作りほど楽しい作業はない
・無理をしなければ企画書作りは楽しくなる
嘘偽りや粉飾がない企画書は一番力を持っている。自分の考えが正しく伝わる。
参考書籍:
すごい人のすごい企画書 一発で決まる!勝てる!本物の極意 戸田覚
2010年4月1日木曜日
アプリやろうぜにエントリーしてみた。
もう少し早く対応して出すべきだったかもしれない。
(昨日、ネットゲーをやった時間がもったいなかった。)
先ほど返信があり、今日(2010年4月1日(木) 21時)までに
詳細な企画書がほしいとのこと。というわけで、
この時間まで企画書を書くための準備メモを書いているのだが
納得させる内容と根拠を示すには、ちょっと時間的に厳しいかな ・・・・・
とりあえずなんとか間に合わせようと思っている。
熊谷氏のtwitterには、
「アプリやろうぜ!byGMO」エントリー合計550件のやる気とアイデア満載の企画を頂きました。一つで も多くのアプリを世に送り出したいと思っています。真剣に検討させて頂きます。有り難うございました!
とつぶやかれていた。
2010年3月28日日曜日
S21HTでAndroidする
そろそろAndroid携帯(XPERIA X10)を購入しようかと
考え、その前に、S21HTを解約するつもりで
解約書を書き、chipにも切れ込みした。
その日に、S21HTでAndroidが動くらしいとのページを見つけた。
今日、いろいろと検索してみると
情報がいろいろとあったので参考にしながら
インストール設定してみた。
【手順】
1.PCで、http://www.microsoft.com/downloads /details.aspx?displaylang=ja&FamilyID=9E641C34-6F7F-404D-A04B-DC09F8141141
か らsetup.msi(ActiveSync 4.5)をダウンロードしインストールする。(既にインストールしてある場合はする必要はない)
2.PCで、http://connect-utb.com/index.php?option=com_rokdownloads&view=file&Itemid=68&id=53:android-1
3.解凍したAndroid-1.6-22-11-09-CUTBフォルダーをS21HTの内部ストレージにコピー。
4.Android-1.6-22-11-09-CUTBフォルダー以下の全てのファイルを内部ストレージのルートにコピー。
5.S21HTの内部ストレージにあるSTARTUP.TXTをSTARTUP.ORG.TXTにリネームする。
6.S21HTの内部ストレージ\startup-configs内のdiam100.TXTをルートにコピーして、STARTUP.TXTにリネーム。
7.STARTUP.TXTにMACアドレスを追加する。
【STARTUP.TXT】
set RAMSIZE 0x08000000
set MTYPE 1805
set KERNEL zImage
set initrd initrd.gz
#
# The following kernel parameters are useful
# ppp.username - The username used to connect to the network when dialing #777
# ppp.password - The password used to connect to the network when dialing #777
# msm_sdcc.msmsdcc_fmax - The maximum frequency (in Hz) used by the SD controller
# pm.sleep_mode - The mode used when the phone is off
# 0=Power Collapse Suspend, 1=Power Collapse, 2=Apps Sleep,
# 3=Slow Clock and Wait for Interrupt 4=Wait for Interrupt
# Default is 3, use 0 for best power savings
# board-htcvogue.panel_type - Panel type used to power the panel off and on
# 0=Don't power off the panel (Default)
# 1=Hitachi 2=Topoly 3=Samsung
# mddi.width - width of the scaled display
# mddi.height - height of the scaled display (these should be multiples of 16 for the camera to work I think)
set cmdline "msmts_calib=115.105.863.911 msmvkeyb_toggle=off mddi.width=320 mddi.height=480 lcd.density=240 ppp.apn=movistar.es ppp.username=MOVISTAR ppp.password=MOVISTAR wifi.mac=12:34:56:78:90:ab no_console_suspend"
#set cmdline "no_console_suspend"
# fbcon=rotate:1
# console=ttyMSM0"
boot
8."内部デバイス"の"ルート"にあるharet.exeを実行。
ざっと動作させてみた状況としては、
電話:可能
無線LAN:可能。
カメラ :いまのところ不可
日本語:可(androidストアにあるsimejiをインストールすることで可能になった。)
ブラウジング:可能
Google Map:可能(ただしGPS取得はできてないようだ)
S21HTでAndroidアプリデバッグ:可能(確認するのに一番、時間がかかった。)
■Androidアプリデバッグさせるには、以下のようにしてPC側にドライバーを入れる。
PCドライバーの更新
デバイスの認識は、?になっているが、一応認識はされている
Android端末の設定は、とりあえず省略
設定、確認、その他いろいろで、丸一日費やしてしまったが、
とりあえずデバック機としても使えそうだということがわかった。
2010年3月27日土曜日
OpenGLによるグラフィックス描画
・OpenGLで画像を描画する際には、サーフェイスと呼ばれる、専用のメモリ領域を確保する必要がある。
・描画手順
1.描画用バッファ(サーフェイス)のクリア
2.サーフェイスへの画像の描画
3.サーフェイス内容から画面への描画
【AndroidManifest.xml】
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.naozary.gl.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Test_GLSurfaceView01"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
【Test_GLSurfaceView01.java】
package com.naozary.gl.test;
import android.app.Activity;
import android.os.Bundle;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.view.Window;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.util.Log;
/**
* Activity, Rendererを継承したクラス
*/
public class Test_GLSurfaceView01 extends Activity implements GLSurfaceView.Renderer
{
// GLSurfaceView
private GLSurfaceView gLSurfaceView;
// 三角形ポリゴン
private TestPolygon01 trianglePolygon;
/**
* @Override
* アクティビティ生成時に呼ばれる
*/
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// Log.d("Test_GLSurfaceView01" ,"*** enter onCreate ***");
// タイトルバーを消す
requestWindowFeature( Window.FEATURE_NO_TITLE );
// GLSurfaceView を生成
gLSurfaceView = new GLSurfaceView(this);
// レンダラーを生成してセット
gLSurfaceView.setRenderer(this);
// レイアウトのリソース参照は渡さず、直接Viewオブジェクトを渡す
//setContentView(R.layout.main);
setContentView(gLSurfaceView);
// ポリゴンの初期化
trianglePolygon = new TestPolygon01();
// Log.d("Test_GLSurfaceView01" ,"*** exit onCreate ***");
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// Log.d(this.getClass().getName() ,Thread.currentThread().getStackTrace()[0].getMethodName());
// Log.d(this.getClass().getName() ,Thread.currentThread().getStackTrace()[1].getMethodName());
}
/**
* @Override
* 描画のために毎フレーム呼び出されるイベント
*/
public void onDrawFrame(GL10 gl)
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// 描画用バッファをクリア
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// カメラ位置をセット
GLU.gluLookAt(
gl,
0.0f, 0.0f, 3.0f, // カメラ位置xyz
0.0f, 0.0f, 0.0f, // カメラの注視する点xyz
0.0f, 1.0f, 0.0f // カメラ視点上方向を表すベクトルxyz
);
// 頂点配列を使うことを宣言
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 色情報配列を使うことを宣言
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
// 2Dテクスチャを無効に
gl.glDisable(GL10.GL_TEXTURE_2D);
// モデルビュー行列を指定
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 現在選択されている行列(モデルビュー行列)に、単位行列をセット
gl.glLoadIdentity();
// ポリゴンの描画メソッドを呼ぶ
trianglePolygon.draw(gl);
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
/**
* @Override
* サーフェイスのサイズ変更時に呼ばれる
* @param gl
* @param width 変更後の幅
* @param height 変更後の高さ
*/
public void onSurfaceChanged(GL10 gl, int width, int height)
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// ビューポートをサイズに合わせてセットしなおす
gl.glViewport(0, 0, width, height);
// アスペクトレート
float ratio = (float) width / height;
// 射影行列を選択
gl.glMatrixMode(GL10.GL_PROJECTION);
// 現在選択されている行列(射影行列)に、単位行列をセット
gl.glLoadIdentity();
// 透視投影用の錐台のパラメータをセット
gl.glFrustumf(-ratio, ratio, -1.0f, 1.0f, 1.0f, 10.0f);
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
/**
* @Override
* サーフェイスが生成される際・または再生成される際に呼ばれる
*/
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// ディザを無効化
gl.glDisable(GL10.GL_DITHER);
// カラーとテクスチャ座標の補間精度を、最も効率的なものに指定
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
// バッファ初期化時のカラー情報をセット
gl.glClearColor(0,0,0,1);
// 片面表示を有効に
gl.glEnable(GL10.GL_CULL_FACE);
// カリング設定をCCWに
gl.glFrontFace(GL10.GL_CCW);
// 深度テストを有効に
gl.glEnable(GL10.GL_DEPTH_TEST);
// スムースシェーディングにセット
gl.glShadeModel(GL10.GL_SMOOTH);
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
/**
* @Override
* ポーズ状態からの復旧時や、アクティビティ生成時などに呼ばれる
*/
protected void onResume()
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
super.onResume();
gLSurfaceView.onResume();
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
/**
* @Override
* アクティビティ一時停止時や、終了時に呼ばれる
*/
protected void onPause()
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
super.onPause();
gLSurfaceView.onPause();
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
}
【TestPolygon01.java】
package com.naozary.gl.test;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import javax.microedition.khronos.opengles.GL10;
import android.util.Log;
/**
* 三角形ポリゴンのクラス
*/
public class TestPolygon01
{
// 頂点座標バッファ
private IntBuffer vertexBuffer;
// 色情報バッファ
private IntBuffer colorBuffer;
public TestPolygon01()
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
// 固定小数点値で1.0
int one = 0x10000;
// 頂点座標
int vertices[] = {
-one, one, 0,
-one, -one, 0,
one, -one, 0
};
// 頂点カラー
int colors[] = {
one, 0, 0, one,
0, one, 0, one,
0, 0, one, one
};
// ネイティブヒープ(ガベージコレクタが働かない領域)にバッファを作成
// サイズは、verticesの要素数×4バイト(int型なので)
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
// 作成したバッファをセットし、バッファに頂点情報を書き込む
vertexBuffer = vbb.asIntBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
cbb.order(ByteOrder.nativeOrder());
colorBuffer = cbb.asIntBuffer();
colorBuffer.put(colors);
colorBuffer.position(0);
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
/**
* @Override
* 描画
*/
public void draw(GL10 gl)
{
Log.d(this.getClass().getName() ,"enter " + new Throwable().getStackTrace()[0].getMethodName() + "()");
gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer);
gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);
// 描画
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3);
Log.d(this.getClass().getName() ,"exit " + new Throwable().getStackTrace()[0].getMethodName() + "()");
}
}
【表示結果】
■ログ(呼び出しタイミング)
03-10 11:41:18.910: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onCreate()
03-10 11:41:19.060: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter <init>()
03-10 11:41:19.111: INFO/jdwp(732): received file descriptor 24 from ADB
03-10 11:41:19.170: ERROR/GLLogger(732): couldn't load <libhgl.so> library (Cannot find library)
03-10 11:41:19.190: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit <init>()
03-10 11:41:19.200: WARN/System.err(732): Can't dispatch DDM chunk 46454154: no handler defined
03-10 11:41:19.209: WARN/System.err(732): Can't dispatch DDM chunk 4d505251: no handler defined
03-10 11:41:19.231: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onCreate()
03-10 11:41:19.260: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onResume()
03-10 11:41:19.289: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onResume()
03-10 11:41:19.610: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onSurfaceCreated()
03-10 11:41:19.651: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onSurfaceCreated()
03-10 11:41:19.720: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onSurfaceChanged()
03-10 11:41:19.730: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onSurfaceChanged()
03-10 11:41:19.740: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:19.781: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:19.790: INFO/ARMAssembler(732): generated scanline__00000097:03010144_00000000_00000000 [ 20 ipp] (73 ins) at [0x195140:0x195264] in 8937169 ns
03-10 11:41:19.800: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:19.800: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:19.800: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:19.820: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:19.820: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:19.820: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:19.820: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:19.830: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:19.830: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:19.830: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:19.839: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:19.839: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:19.839: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:19.839: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
・
・繰り返し
・
・
03-10 11:41:32.201: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:32.230: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:32.240: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:32.250: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:32.259: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:32.272: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:32.350: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:32.370: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:32.401: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:32.411: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:32.420: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:32.420: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:32.430: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onDrawFrame()
03-10 11:41:32.430: DEBUG/com.naozary.gl.test.TestPolygon01(732): enter draw()
03-10 11:41:32.490: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): enter onPause()
03-10 11:41:32.500: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onPause()
03-10 11:41:32.521: DEBUG/com.naozary.gl.test.TestPolygon01(732): exit draw()
03-10 11:41:32.531: DEBUG/com.naozary.gl.test.Test_GLSurfaceView01(732): exit onDrawFrame()
03-10 11:41:43.160: DEBUG/dalvikvm(732): GC freed 4641 objects / 212952 bytes in 232ms
■メモ
1.頂点座標を以下のようにしてみた。(Test_TestPolygon01.javaのコンストラクタ)
// 頂点座標
int vertices[] = {
-one * 2, one * 2, 0,
-one, -one, 0,
one, -one, 0
};
【表示結果】
2.頂点座標を以下のようにしてみた。(Test_TestPolygon01.javaのコンストラクタ)
// 頂点座標
int vertices[] = {
-one * 2, one * 2, 0,
-one, -one, 0,
one, -one, 0
};
【表示結果】
3.頂点座標を以下のようにしてみた。(Test_TestPolygon01.javaのコンストラクタ)
// 頂点座標
int vertices[] = {
-one, one, 0,
-one, -one, 0,
one * 2 , -one * 2, 0
};
【表示結果】
4.頂点カラーを以下のようにしてみた。(Test_TestPolygon01.javaのコンストラクタ)
// 頂点カラー
int colors[] = {
one, one, 0, one, // RGBのRとGに1を指定
0, one, 0, one,
0, 0, one, one
};
【表示結果】
5.頂点カラーを以下のようにしてみた。(Test_TestPolygon01.javaのコンストラクタ)
// 頂点カラー
int colors[] = {
one, one, one, one, // RGBのR、G、Bに1を指定(白色になる)
0, one, 0, one,
0, 0, one, one
};
【表示結果】
6.カメラ位置をを以下のようにしてみた。(Test_GLSurfaceView01.javaのonDrawFrameメソッド)
// カメラ位置をセット
GLU.gluLookAt(
gl,
0.0f, 0.0f, 6.0f, // カメラ位置xyz
0.0f, 0.0f, 0.0f, // カメラの注視する点xyz
0.0f, 1.0f, 0.0f // カメラ視点上方向を表すベクトルxyz
);
【表示結果】
6.カメラ位置をを以下のようにしてみた。(Test_GLSurfaceView01.javaのonDrawFrameメソッド)
// カメラ位置をセット
GLU.gluLookAt(
gl,
0.0f, 0.0f, 1.0f, // カメラ位置xyz
0.0f, 0.0f, 0.0f, // カメラの注視する点xyz
0.0f, 1.0f, 0.0f // カメラ視点上方向を表すベクトルxyz
);
【表示結果】
■その他の気になるところのメモ
// 固定小数点値で1.0
int one = 0x10000;
の部分が気になっていた。
そこで、
int部分の下位2バイトが小数部を示すと仮定して考えてみた。
小数の二進数表現
0.1000 1/2 = 0.5
0.0100 1/(2*2) = 0.25
0.0010 1/(2*2*2) = 0.125
0.0001 1/(2*2*2*2) = 0.0625
0x5555 = (0101 0101 0101 0101)2
=0.25 + 0.0625 + 0.015625 + 0.00390625 +とここまでやったが急に面倒くさくなってきたのでプログラムで結果をだすことにした。 -Naozary Unknown 10/03/12 0:10
import com.naozary.test.nio.test01;
public class calcpoint {
public static void main(String[] args){
int s = 1;
// System.out.println("s = " + (2 << 1));
float r = 0;
StringBuffer sb = new StringBuffer();
for(int i=0;i<=7;i++){
s = (s * 4);
// System.out.println("1/s = " + (1/(float)s));
r += 1 / (float)s;
if(i!=0)sb.append(" + ");
sb.append("1/" + s);
}
sb.append(" = ");
// System.out.println("r = " + r);
sb.append(r);
System.out.println(sb.toString());
}
}
結果
1/4 + 1/16 + 1/64 + 1/256 + 1/1024 + 1/4096 + 1/16384 + 1/65536 = 0.33332825
よって、0x5555 = 0.3333
とりあえず、int部分の下位2バイトが小数部を示すと考えてよいようだ。