2005年12月10日

権限問題

今日は,学生ゼミに加え,昨日のゼミで指摘されたことを元に,研究の3Dを修正.
ユーザモデルを半透明にするというのが今日の目的だった.
しかし,Java3Dは素直に透明属性を設定させてくれないのだった.それは,許可ビットというものだ.これが正しく設定されてないと,ある値を変えようと思ってメソッドを呼んでも,例外を発生させてしまうのだ.
何らかの理由で,この許可ビットというものがつけられていると思うのだが,非常に面倒だ.面倒といえば,他にも3Dモデルの中心座標を得るなんてメソッドもあるのだが,返り型名がvoidで引数に格納する変数を入れるという,なんともトリッキーなものがあったりする.簡単に書けば,こんな感じである.

普通は,

変数 = getなんちゃら();

で変数にgetなんちゃらの返り値が格納されるスタイルがほとんどだが,Java3Dだと,

 getなんちゃら( 変数 );

としないといけない.
何が不便かというと,前者は返り値をそのまま計算に使用できるが,後者はいちいち変数に格納しないと使えないのだ.
ということで,トリッキーで,面倒で,洗練されてない感じがある.まあ,拡張ライブラリだからしかたがないのかも.



posted by Kiyui at 02:22| Comment(8) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年12月05日

手強いJava3D-衝突判定

ようやくJava3Dとの格闘も一段落ついた.
ひっかかっていたのは,衝突判定である.なかなかうまく検出してくれず,大いに悩んだが,何とか解決した.

衝突判定がとれるようになったことで,ある程度詳しくなったので,ここに書き記してみる.

方法その1:「WakeupOnCollisionEntry」

これは衝突したよというのを,イベントとほぼ似たような感じで教えてくれるものである.実際に重なったときに教えてくれるので,プログラミングする側はとってもわかりやすい.これをつかって「コインに触ったら取る」なんて処理をさせることができる.しかし,実際に衝突せねばならず,重なったからといってすぐにイベントを発生させるわけでもない,といった問題点がある.場合によっては,すり抜けてしまうなんてことも発生する.そして,イベントとほぼ同じ性質なため,受動的な処理になる.

方法その2:「PickTool」

これは判定領域を指定してやると,その中に何がめりこんでいるかを返してくれるものである.実にストレート.もちろん何もめりこんでない場合はnullを返す.これはその1の方法と違って,実際に衝突させる必要が無いため,ある3Dオブジェクトを移動させる前に衝突するかを判定することができる.正確で能動的な判定が可能だ.ただし,慣れないと難しいかもしれない.

その2の方がいいように見えるが.その1にもいいところはあるので使い分けるべきだろう.


Java3Dはかなり手強かったので,研究のスケジュールがだいぶガタガタになってしまった.失われた時間を取り戻すためにも,がんばろう.
posted by Kiyui at 02:02| Comment(22) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月22日

立方体を自分で作ってみる

今日はJava3Dで,立方体を生成するプログラムを書いて,いろいろ試した.
頂点の座標,光の反射具合を決めて,テクスチャを貼りかたを決めた.光の反射のところで,法線を求めるのに外積を使ったのだが,外積ってこんな風に使うのかと関心関心.外積なんて,今まで名前は知っていたけど,習わなかったからどんなときに使うのかなと思っていたが,こんなところで使うとは思わなかった.
立方体を作るクラス(Boxクラス)は既にあるが,自分で作ったことで理解を深められた.
posted by Kiyui at 23:51| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月18日

すすむJava3D習得

今日は,ようやく理解するに至ったJava3Dを勉強.光源,霧,反射,透過と,必要なのを次々と覚えて行く.
いったん基本を理解したら,後はどれも同じようなものだったので,理解するのに時間はかからなかった.

先生から,ためしに仮想空間を月曜日までに作ってみてといわれているので,これから作ってみる予定だ.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月17日

Java3D再び

ひさびさに,Java3Dの本を手に取った.研究で必要であり,今月はJava3Dを使いこなせるようにするという目標を立てていたからだ.

本のサンプルコードを練習がてら書いて行く.前にやったときは全然わからなかったんだよな〜と思いながら.しかし,その考えは一瞬にして消え去った.

「あれ?こんなんだったっけ?」
前は全然わからなかったのに,すんなりと頭に入った.

その理由は,ここ最近ずっと,サウンドプレーヤーなどのJavaアプリケーションを作っていたからだと思う.JavaのGUI作成をやっているうちに,これは木構造で自由にボタンなどのコンポーネントを配置できるのかとわかったのだが,Java3Dの箱や球などのオブジェクトを配置するのも木構造をとっていたので,「なんだ,一緒じゃん」というように,あっという間に理解できたのである.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月16日

ようやく動くものに

ここ最近やっている,カードゲームのカードデータを使ってのアプリケーションであるが,なんとかデータを使えるようにして,アプリケーションで参照できるようになった.実際に動くものを見ると,それだけでうれしくなる.できるのは,単にデータの参照だけだけど.
これから検索機能や,絞りこみ表示などを実装してみたい.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月15日

ジェネリクス

Java5.0からの,ジェネリクス.
ジェネリクスとは,C++でいうテンプレートみたいなもので,クラス名を放りこむとそのクラスに特化させることができる.例えば,可変長配列Vectorでは,Vectorとすることで,Stringクラスに特化させることができる.いままでは,Vectorから取り出すのにキャストが必要だったが,特化させることによってその必要がなくなる.
自分でもジェネリクスを使ってみようと思って,探してみるも意外にちゃんとした使いかたを載せているサイトがなかった.なのでまだ使うに至ってはいないが,ジェネリクスには<?>というようにワイルドカードが使えることがわかった.これを使うとなんでも放りこめるみたいだが,読み込み専用になるらしい.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月10日

CUIにはまったかも

カードのデータを扱うプログラムを作ってみた.
サウンドプレーヤーとはちょっと趣向をかえて,CUIで作ってみた.結果,コマンドラインっぽいのができあがった.
GUIと違って,ボタンとかのレイアウトは考えなくていいし,最近Linuxを使うのになれているので,CUIだけど逆になんだか面白い.このアプリケーションでは入力された文字列を解析して,それに応じた処理をするようにした.正規表現をうまく使うことができるようになったので,コマンドの拡張なんかはとっても簡単.新しい機能を作っても,すぐにコマンドを作って呼び出すことができる.
あー,自作サウンドプレーヤーのCUI版も面白いかもしれない.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月09日

デッキ作成支援ツール

昨日のプログラミングで勢いがついたので,前からほしいカナ〜と思っていた,遊戯王のデッキ作成支援ツールを作ることにした.
カード名を入力して,リストに加えていき,最終的にXMLデータやテキストに出力するようになっている.自分は,ついこの前までデッキレシピはテキストエディタで書いていたので,まずはこれでいいかなと思っていたら,やっぱり使いにくいとの指摘が.キーボードとマウス両方使うもんなぁ.
ということで,マウス操作だけでできるようにしようと思ったのだが,それにはカードのデータが必要なのでまずはそれからということに.ネット上にはカードデータをまとめたものはあったりするのだが,テキストデータなので扱いづらく,自分の考えている方法ではやりにくいと思ったので,データは地道に作ることに決めた.
posted by Kiyui at 23:59| Comment(1) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年10月08日

ひさびさのプログラミング

今日は,中間発表という大きなイベントも終わったということで,ひさびさに休み.

最近プログラムをいじっていなくて,創作活動をやっていなかったので,いじることに.
いじったのは,自作のサウンドプレイヤー.
おもにやったのは,プレイリスト生成の書式の変更.もともとXMLを使っているのだが,今回は属性も使ってすっきりさせてみた.その結果ソースコードも短くなって一石二鳥.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年09月14日

アプレットで入力問題

T君が研究で関連で作っている,Javaアプレットで,日本語入力が最初の一回だけしかできないという問題が起きた.それが起きたのは研究室のLinux機だ.Windowsではちゃんと入力できるので,かんな,もしくはLinux用のJavaに問題があるのかもしれないが,特定はできない.Javaアプリケーションでは問題なく,乗り換えてしまえばいいが,そのシステムはアプレットにして埋め込んだほうがスマートなので,なかなか難しいところである.
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年08月27日

だらだらゲームはイカン

暑くて、なんだかやる気が起きないので、だらだらゲームしていたのだが、それだけじゃ何にもならないし、時間がもったいないなと思ったので、何とか自分を奮い立たせてPCに向かった。
今日は、研究の通信プログラムとサウンドプレイヤーをいじって改良していた。やっぱり、こういうのを作って、動かして、眺めるのはやっぱ楽しいね。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年08月16日

反転描画のはなし その2

昨日、反転描画のことについて書いたが、今日それを使ったプログラムをLinuxで改めて実行してみると、なぜか重かった。結局、どっちの方法でも変わらないみたいだ。解決方法として、あらかじめ反転した画像を用意する、反転した画像をあらかじめバッファに書き出しておくなどが挙げられるが、今回は別の方法で軽くすることに。それは、必要な部分だけ再描画させるということ。JavaのComponentクラスのrepaintメソッドは、引数として再描画する部分を指定することができる。これを使って必要な部分だけ再描画させてやると、とても軽くすることに成功した。
描画が重たいなと思ったら、必要部分だけの再描画を試してみるといいかもしれない。
posted by Kiyui at 23:48| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年08月15日

反転描画のはなし

前に、仲間のゲームをJavaに移植していると書いたが、その最中に出くわした現象があったので、ここに記す。
Javaで画像の描画をする際、GraphicsクラスのdrawImageメソッドで行う。それは、描画する位置の左上x・y、右下x・yと、元の画像の左上x・y、右下x・yを指定する。それで、ある画像を上下左右反転させて描画するときは、描画する位置の右下x・y、左上x・y、元の画像の左上x・y、右下x・yの順番でパラメータを与えてやると実現できる。そうやったところ、ちゃんと描画できたにはできたが、Linuxでこれを実行させたとき、なぜかとても重かった。どうにかならないかと思って、元の画像の座標指定を反転させたら変わらないかと考えて、描画する位置の左上x・y、右下x・y、元の画像の右下x・y、左上x・yの順番で書いてやると、なんととても軽くなった。理由は良くわからないが、軽く描画できるようになったのでよしとしよう。
まとめとして、Javaにおいて、画像を反転して描画させる場合には、元の画像の座標指定を逆にするべきであり、描画する座標指定を逆にするべきではない。

追記:
反転しながら描画するのと、あらかじめ反転して描画するというやり方の違いで、差が生まれるのかもしれない。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月30日

非矩形ウインドウ再び

今日はJavaでの非矩形ウインドウについて再び調べていた。研究とは関係ない(たぶん)ので、まあ趣味の範囲とでも言っておこう(ホントはあることで必要になったのだが)。Javaがサポートしてたら、こんな苦労はしなくて済むのにと思った。今時対応してないのはいただけない。次のJava1.6では対応してるといいのだが。
一応現在見つけられた方法をあげると、それは3つある。1つ目は、デスクトップをキャプチャしてフレームに貼り付ける方法。非常に簡単だが、擬似的なものなので、ウインドウを動かしたり、変形させたり、後ろの様子が変わるとバレバレになってしまう、それは大きな欠点がある。2つ目は、拡張ライブラリ「Wicoco」を使う方法。これはバッチリ非矩形にすることができるが、今のところWindowsにしか使えない。せっかくのどのプラットフォームでも実行できるJavaの特徴が失われてしまう大きな欠点がある。3つ目は、eclipseのSWTを使う方法。これを使うと非矩形ウインドウを実現でき、さらにそれぞれのプラットフォームに対応したものを作ることができる。コードをパッと見た感じ、やや複雑そうだがやってみる価値は十分あるといえそうだ。
1つ目の方法を、どうにか自分でいいものにできないかいろいろ考えたり、試してみたが、やはりどうにもならなかったので、3つ目の方法を試してみることにする。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月24日

自作ソフトへの愛着

最近は、自作サウンドプレーヤーを聞きながら作業したり、チャットしたり、ネットサーフィンをしていることが非常に多い。つまり今一番使っているソフトが自分で作ったサウンドプレーヤーということになる。最初はゲームの音楽を鳴らすためだけだったのに、ちゃんとしたプレーヤーを作って、ここまで自分で使うソフトになるとは思いもしなかった。やっぱり、自分で苦労して作っただけあるということなのだろうか。
今、卒業研究で作っているソフトもこのサウンドプレーヤーのように、いいソフトになるよう頑張りたい。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月18日

2台のPCで通信しよう

今日は2台のPCを使って、Javaで作っている通信プログラムを動かしてみた。私はデスクトップ以外にノートも持っているのであるが、それはいつも研究室に置いてある。たまたまもって帰ってきてた(ホントはDVDを人知れずゆっくり見るため)ので、それらを使ってちゃんと通信できるか実験した。しかし、最初デスクトップをサーバ、ノートをクライアントにしてやってみたらうまくいかなかった。その理由は簡単で、デスクトップのほうにファイアウォールがあったからであった。なので、今度はサーバとクライアントを逆にしてやってみるとうまくいった。遠くのPCに自分の打ち込んだメッセージが表示されるのは、それだけだがやっぱり楽しい。明日は研究室で試してみよう。
posted by Kiyui at 23:06| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月16日

DVD3巻ゲット&ソケット通信

今日は「まほらば」のアニメDVD3巻の発売日だったので、早速買って来た。あと1つだけだったので危うく買えなくなるところだった。このDVD3巻には、オマケとしてDVD全巻を入れられるボックスがついている。実物を見るまでは、組み立て式でそれなりの厚紙が使われているものなのかなと思いきや、ずいぶん丈夫で、デザインもなかなかのボックスだったのでとても満足した。もちろんDVDも早速鑑賞した。
以前作っていたサウンドプレーヤーは、ある程度完成してひと段落ついたので、夕方からは、卒論に向けて、Javaの簡単なソケット通信プログラムを作っていた。この辺はまだそれほどやっていないので、いろいろといじって覚えながら作っている。加えて、カプセル化&再利用できるように作るのがオブジェクト指向なので、それを検討しながら作るのだが、それがまた楽しい。今の構成は、基本部分のクライアントとサーバ、そしてそれぞれを操作するGUIになっている。基本部分とGUIを結ぶために、自作のイベントリスナを作って実装してみた。明日は基本システムを完成させていろいろと試してみることにする。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月13日

MIDIを鳴らそう

波形音楽データの再生ができるようになり、インタフェースもだいぶできたので、今度はMIDIを対応させることにした。
MIDIを演奏するには、「Sequencer」というクラスを使う。それには「start」や「stop」メソッドがあるので、波形データの演奏より簡単であった。しかし、演奏の開始や終了を通知するイベントリスナがなく、代わりにメタデータを通知するリスナでなんとかするしかないので、こちらの難度はやや高めだ。
結果として、メタデータをうまく処理し、無事波形データと同じように演奏できるようになったのでうれしい限りである。
posted by Kiyui at 23:55| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年07月12日

切れるXMLデータ

今まで作ってきたサウンドプレーヤーもだいぶ開発が進んできたので、テストを兼ねて実際に使っている。すると、XMLデータから正しくデータを読めないという問題が発生した。ファイルを確認してみると、そこには確かにデータが書かれているため、そちらの間違いではない。実際にどんな問題が起こったのかというと、音楽ファイルへのパスが一部おかしくなってしまうというものだ。そこで、コードを読み直したり、Javaドキュメントを見たり、いろいろと実験をしてある結論に達した。JavaでXMLを処理する際、タグではない文字列が来ると「characters」というメソッドを呼ぶのであるが、その文字列がちょうどXML文章を蓄えるバッファのサイズの都合で分断されてしまうと「characters」メソッドが2回呼ばれてしまうことになる。結果読んだパスが分断されたまま格納されてしまうことになるためおかしくなってしまうことがわかった。これは仕方がない問題なので、分断された文字列をうまく結合できるようにプログラミングすることにした。するとうまく動くようになった。しかし、さすがにこれはJavaのXML操作設計の問題だと思う。
posted by Kiyui at 23:59| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。