「プログラミング」に関する日記(32)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

家のパソコンでも3Dやってみました。
SDKに付属のサンプルをいろいろ改造。
やりたいのはトゥーンレンダリング。
球とか円筒などの簡単なのを表示しても面白くないから、チュートリアルの最後、Xファイルからメッシュを読み込んで表示するサンプルを使ってみました。
とりあえず虎のテクスチャは要らないので表示コードをコメントアウト。
そしたら灰色一色の虎が。
テクスチャ貼ってるだけの色もライティングもない虎だから当たり前ですけど。
で、ライティングのサンプルからその辺の処理引っ張ってきたら今度はほぼ真っ黒に。
これは環境光の色そのままだから、恐らく法線ベクトルが定義されていないために直接光の成分がなくなったためだと思われます。
と、とと、まてまてまて、もうひとつ、オブジェクト側では反射のしかたにも2種類あって、そのうちのアンビエント反射、要するに入射角と反射角が一緒ってことは、「ふにゃふにゃ」のビーム反射処理にも応用できるんじゃないか?
それでもって、話は変わってDirectMusic、これまたDirectX8では良さそうな機能が追加されてたりして、全面的に8使うようにしようかなと思っていますが、DirectDrawがなくなったことを考えると思い切れないのも事実だったりします。

パズルゲームを考えています。パネポン風味のやつを。
数色に色分けされた長方形(以後これをパネルと呼ぶ)を画面の特定の範囲にルールに沿う範囲で整然と並べ、任意の2パネルを交換することによりルールによって定められた数種類のパターンのうち最低一つに一致するようパネルの配置を変更し、パターンに一致したパネル全てを消去し、それにとって得点を得る、また、パネルが消去されたことに起因してパネルの配置が換わり、それにより新たにパターンに一致する配置を作り、連続して消去すること(以後これを連鎖と呼ぶ)、そして、一度の操作でより多くの、またはより困難なパターンに一致させることにより通常より多くのパネルを消去すること(以後これを同時消しと呼ぶ)、さらに連鎖動作中にパネルを移動することにより、連鎖終了後に再びパターンに一致するように配置し、連鎖を続けること(以後これをアクティブ連鎖と呼ぶ)により通常より多くの得点を得ることのできるゲーム、ということです。
もちろん違いもありますよ。

縦や横に並べるわけじゃない
これをやっちゃったらパネポンそのものでしょーが!
次世代らしく、四角形になるように並べます。
可愛い女の子が出ない
昔にも言ったことがあると思いますが、そんなもの私に期待するもんじゃありません!
そして本当に誰も期待していないんですね…
せりあがってこない
その代わり横からプレス機が迫ってきます。
横長
横から迫ってくるので横長にします。
マウス操作が基本
隣同士を入れ替えるのではありません。
好きなところ2箇所をマウスでクリックして入れ替えるんです。
パネルが多い
ちょっと理由があってパネル数を多くします。
多分目一杯パネルを出したら1000個超えると思います。
ほかにも、こだわりたい部分としては、BGMがあります。
パネルを消すとちょろっと短い音楽が鳴りますが、連鎖をすると短かったのがだんだん長くなって、派手になっていきます。
また、通常BGMも、得点や状況で切り替わったりします。
0点の音楽→1連鎖の音楽→1~100点の音楽→1連鎖→2連鎖→3連鎖→4連鎖の音楽→101~300点の音楽→ピンチのときの音楽→ゲームオーバー…みたいな感じで。
ゲーム音楽のインタラクティブ性というものはまだまだ挑戦できることが多そうです。

ヘッドフォン

学校のパソコンで昨日に引き続き3Dを頑張ってみました。
とりあえずネットでサンプル明後日適当に自分なりに書き換えて2Dポリゴンを表示して自己満足して3Dポリゴンも調子に乗ってやってみようとしたら突然リンカエラーが!
libci.libが見つかりませんって言われたって、そんなのリンクするような設定はしていないのですが・・・?
で、勿論早速MSDNライブラリで調べてみたわけですが、見つからない。
帰ってからもう一度調べてみたら、「古い iostream ライブラリ」とのことで、「最新だったら新しいの使えよ!!」などと思ってみたりもしたのですが、新しいのにどうやって変えればいいのか、新しいのに変えることで不具合が起きるんじゃないか、新しいのがまだ古いのを使ってるのに何故に古いものを切り捨ててしまったのか、などなど気になってしまって、別に何もしませんでした。(何

「ByteEdit」を更新しました。
選択内容を検索します。
ついでに言うと、ドラッグによる範囲選択と右クリックにもこっそり対応させたので、検索したいバイト列をドラッグで反転→右クリックから検索で、簡易ながらもバイト列の検索ができるようになりました。
そこそこ拡張しやすい形になっていたので両方ともちょっとだけ手を加えただけで実現できました。
こんな感じですぐできる更新をちょっとずつやって行くことにしてます。

前にヘッドホンが壊れてしまっていたので、学校の帰りにヘッドホンを買ってみました。
買いに行くと、6000円くらいのオープン型・3000円くらいの密着型・2000円くらいの密着型・1000円程度のオープン型があったのですが、6000円のは完全に予算オーバーで問題外、1000円のは用途から考えてふさわしくないと感じ却下、3000円のは2000円のと比べてどこがいいのかわからなかったので結局2000円のにしました。

ピクミンその他のゲームのページ、気が向いたのでアップしてみました。
ついでにリンク集もちょい整理。
そんでもって新日記公開。

ピクピクニンジン

ピクミンのページ作りました。
ピクミンってどう考えたって扱いが奴隷。
今のところアップしてません。
気が向いたらアップします。

ちょっと学校のパソコンでDirectX8で3Dでもやってみようかと思ったのですが、チュートリアルが意味不明だったため挫折。
変数が何のために使われてどこでどう定義されて他の変数との関係がどうなのかとかがさっぱりわからないので打ち込んだところでどうにも…
DirectXGraphicsに統合された分簡単だと思ったのですが。

新日記2002年分の過去ログを仮入力完了しました。
12月の日記はほとんど同じ話題が続いていたので楽でした。
さて後1年半分…

そろそろ更新しようかと思います。
ByteEditかDirectXでも。

立体感・平面感

レポート何とか合格貰いました。
まず考え方を変える。
平衡状態のときの電流を考えるのではなくそのときの電圧のみを考え、その電圧の差がすなわち電位差になってるわけで、その電位差が0ならば本当に平衡状態なんだけれどもちょっとずれてたら要するに0じゃなくって、ずれの影響を最小に各抵抗の値を決めてやればよいわけで、それをするにはとりあえず微分して0になる位置を見つける。
で、その値になるように測定すればよかったんだけれどもそんなことはしてなかったわけで、実験結果とは実は無関係。

メタセコイアでございます。
DirectXで使えるXファイルを出力できるということで導入してみました。
ライトエディションなのでいくつかの機能がありませんが、4面表示は視点変更で代用できるし、頂点カラーなどもプログラム側から指定してやればよいだけのことで、シェアウェア5000円も払うほど機能が足りないというわけでもないのでこれで当分は3Dモデリングは事足りるかと思います。

で、トゥーンシェーディングの方法というのがですね、いや、メタセコイアの話じゃありませんけどちょっと関連してます。
えっと、まず光の向きベクトルを考えます。
で、ポリゴンの、頂点の、光の向き成分を考えて、それが0以上だったら白、そうでなかったら黒、でも実際はそんな細かいところは計算してられないので、半分が白で半分が黒のテクスチャ画像を用意して、そのテクスチャのどこにポリゴンに貼り付けるかを計算してそれっぽく見せる。
輪郭線は、ちょっと大き目の真っ黒なモデルの裏面だけ表示。
極端な話、これ使えば白黒の3Dゲームというものができてしまいそうな予感。

だからr

正規表現最短マッチは*のあとに?をつけるということだそうで。
学校でやっていたほうがはかどるかも。

SQLやめ

どうもMySQLはPHPに最初っからくっついてたらしいけど、ざっと調べてみたところ、専用のソフトがどうたらとかサーバーがこうたらとかややこしそ~なことが書いてあって、右クリック→新規作成→適当なファイル→名前変更、でPHPから使える状態になるわけではなさそうで、となると、データベースの内容のアップロードやダウンロードもできなさそうな気がして、それだったら自宅サーバーで本格的に使う以外では使う理由はないかなと思って、まあそれでも、いつか使えたらいいなというかすかな期待も抱いて今後もちょくちょく調べたりしていこうと思うのですが、当面は使わないことにしました。

MusicPlayer3の、起動時クローズ中バグを直したのですが、その修正版をアップしたかどうかは記憶にございません。
起動時に何かが出たり出なかったりしても動作には支障はないし、特に新しい機能が増えたわけでもないので、修正版を改めてダウンロードしなおす必要はないと思います。

DirectMusic更新しました。
MIDIは何度も何度も何度も何度も繰り返し聞くことになるので、ループ部分はわかりやすく、かつ短くしてあります。
画像の大きさがちょっと微妙なところです。
640x480のサイズだと大きさそのものは問題ないんだけどスタイルシートのせいで左に大きく隙間が開くのでその分だけ右にずれて画像が少しはみ出てしまうのです。
まあ大事な部分は画面に入りきるから別にいいんですけど。
暇があったら音符の間をもっと詰めて、小さい画面でも収まりきるように調整してみます。

ナウシカ読み終わりました

真面目にDirectX音楽編02.を書いていました。
「ゲーム音楽について」と重複する部分がありますが、プログラミングよりで書くことがありますので、それで差別化を図っておきます。
例えば、SetRepeatsに関しては2つほど気をつけることがありますし、SetLoopPointsについてもうまくループしてくれなくなることもあります。
詳しくは明後日。

ナウシカ5~6読んでました

DirectMusicのループさせるサンプルを作っていました。
プログラムソース自体は2行追加するだけという馬鹿みたいに単純なのですが、少しややこしいところがあったり意外な挙動を示すことがあったりして、ただループするだけでも結構書くことができそうです。
でも意外に面倒なのが鳴らすMIDIと説明のための画像。
何しろどっちも芸術性(元々ないけどさ)とかよりもDirectMusicがどのように動くかがわかりやすいようにしなければならないので、使い回しができません。
とか何とか言いつつすでにどちらもほぼ出来上がってたりするんですが。

キ番登録フォームにスタイルシートを使ってみました

「ふにゃ」の追加ステージ2ができたのでダウンロードページにて公開してみました。
特にこれといったテーマはなく、作りたいステージを作りたい順番で作りたいように作ったものです。
とは言ってもなるべく簡単なものから始まるようにはしていますが。
1面と2面はプレイヤーを舐めきったステージ。
3面と4面はジャンプのテクニックを使うステージ。
5面と6面は適当にいろいろ配置したステージ。
特に4面はジャンプのテクニックがかなり要求される割にはすっきりとしたステージで、ジャンプ以外のテクニックはできる限り必要のないステージに調整したつもりです。
正しい順路で進めばジャンプしない場所ではガンガン走り回れますが、間違った方向に進んだ場合はいばらの道が待っているので引き返します。
対して5面は、特にこれといって難しいテクニックは要求されない割にごちゃごちゃとしたステージで、やったらめったらちょい技が必要になってきます。
シークレットが有効になっていれば馬鹿馬鹿しいほど簡単なステージですが、正しい道順でいくと、まさに嫌がらせそのもののせまっくるしい通路が待ち受けています。
しかもさらに悪いことに、ごちゃごちゃしているからいたるところですり抜けバグが生じるため、ショートカットポイントや戻されるポイントが多数あって、その上ショートカットポイントはちょっと近道できる場所が数箇所あるだけなのに対し、戻される罠は大幅に戻されるものがいたるところに仕掛けられています。
6面は本当にただ適当にブロックを散らかしただけ。
でも一応それなりのものにはなっていて、最初に左に進むと戻り方が一通りしかなく遠回りになりますが、上→左→下と進めば比較的簡単にクリアできます。

DirectDraw、思っていたよりも少し厄介で、今日は更新できませんでした。
…とりあえず急ぎます。

なるたけなるだけ

更新しました。
DirectMusicを。
一応鳴るには鳴りますが、鳴らす以外にはな~んにもできません。
1回だけ音楽を垂れ流して終わりです。
後日の更新のためにわざわざ不完全に。

HP作成論におまけを追加しました。
実にどうでもいいことが書かれています。

音楽編

DirectMusicのサンプルを作っていました。
プログラムそのものは簡単なのですが、やっぱり曲データですね。
Bomber丸のテーマでも鳴らしてみようかと思ったのですが、なんだか自分で聞いてて恥ずかしくなったんで、「ふにゃふにゃ」の音楽のボツ曲を2倍速にして鳴らすことにしました。

えいちてぃあくせす

直リン排除研究アップしてみました。
結局mod_rewriteについてはわからず。
まあ2種類方法がありゃ充分でしょ。

今度の更新は、微妙に要望があったような雰囲気があるので「真面目にDirectX」にしてみます。
そこそこ要望があったような雰囲気の「Bomber丸World」は要望がどんなにあろうとこの先1年以上はかかるだろうし、「ふにゃふにゃ」のバージョンアップももうちょっとじっくりやっていきたいので。
「RPG±0」のBGM&サウンド部分を作りつつDirectMusic&Soundの解説でもしてみようかな~と思っています。
まあ要するに、VB編を。

マグ・メル

ダウンロードとHP作成論のページを全てHTML4.01Tで置き換えました。
これでメインとなるコンテンツはほぼ置き換えられたのでとりあえず完了ということにしておきます。

「ByteEdit」のクリップボード周りを作ってみました。
最初のうちは戻り値をStringで無理矢理受けようとしてエラーを起こしたり実はVB6で使っているUNICODEはNT系でしかクリップボードに渡せなかったり(普通のテキストとは別物として扱われる)で、なかなか試行錯誤させられましたが、結局試行錯誤を諦めてネットでサンプルを探しに行き、C言語のサンプルを見つけて都合のいい部分だけとってきてとりあえずそれっぽいものはできたわけですが、VBの画面からコピーしてきた文字列は全く認識できなかったりコピーを2・3回繰り返すと酷い文字化けを起こしたり普通にコピーしたのに貼り付けられなかったりと思いっきりバグだらけなのですが、VBのClipboardオブジェクトも挙動が怪しく、というよりは独自のクリップボードを持っているのかSetTextメソッドでコピーしたものはどうやら自アプリの中でしか通用しない模様で、一応メモ帳とか他の種類のエディタとのデータやりとりはしないにしてもの自分以外のByteEditとは最低限データのやりとりができないといけないわけで、そうなるとVB製アプリ同士ならデータのやりとりができるという都合のいいことになってはくれないだろうかと考えるわけですが、反面そうなると分が今までしてきた苦労は一体なんだったんだという話になってやっぱりそりゃだめかなと思いつつ、もしかしたらReDimじゃなくてGlobalAllocでメモリ確保しなきゃいけなかったのだろうかとか、にしちゃサンプルでは対応するGlobalFreeがなかったぞと思い、メモリリークを気にしながら、そもそもOLEクリップボードとか従来のクリップボードの違いがよく分かっていなかったりする自分に気づき、でも動けばどっちでもいいやといういつもの投げ遣りな姿勢がまた垣間見られ、それでもやっぱり期待通りの挙動を示してくれないクリップボードに悪戦苦闘しています。
今度クリップボードを簡単に扱うライブラリなんかがあったら使ってみよう。

やっぱりさっぱり

更新履歴とバナーのページと「Bomber丸World」のページを更新しました。
とはいっても、スタイルシートを適用しただけなので、内容に変更はありません。

「ByteEdit」のクリップボード周りをやってみたのですが、うまくいきません。
APIを使ってみたのですが、途中でエラーが起こってクリップボードが閉じられないまま強制終了され、クリップボードビューアは開けるはずのないクリップボードを際限なく開こうとし続けて、結局再起動せざるを得なくなりました。
OpenClipboard(hWnd)→GetClipboardData(CF_TEXT)→CloseClipboard()じゃダメなのかなぁ…

う~ん、幾何学の問題・・・2つの違う方法で求めた答えは違っていて普通だというのですが・・・・

  • 1088πと41πっていくらなんでも違いすぎ!

他の人は35πとか39πとか言ってましたが、きっとそっちのほうが正しいと思います…

授業中さっぱりわからなかった電子物理、テストではさっぱりわかりませんでした。
一応計算問題は適当に掛け算をやって単位をあわせて答えてみました。

レンダリング手法

とりあえず今日でテスト前の授業は終わり。
和風カレー丼を食べました。
食堂の普通のカレーよりおいしい。
20日からテスト。

3Dポリゴンモデルのエッジ抽出。
ポリゴンのひとつの辺が文字通り曲面の端であれば線を引く。
2つのポリゴンが共有している辺で、片一方だけが陰面処理で隠れていたら線を引く。
2つのポリゴンが交差する部分で線を引く。
こんなもんでどうだろう?
トゥーンシェードだと同じ色のポリゴン2つが重なって表示されていたら境界が区別できなくなるので。

ななひとに

というわけで、「ByteEdit」をアップしました。
メニューのバージョン情報が間違ったバージョンを表示していたのでそれも直しました。

ついでに、注意事項のダウンロード関連も変更しました。
いろいろと詳細を加えてみました。
ただ、長くなると読む気が失せるので、トップページから行ける全体的な注意事項に関しては、可能な限りいらない部分を削って、極力短くなるようにしました。

JavaのIteratorって、便利そうだけど、スーパークラスをひとつしか指定できないということを考えるとあまり使い道ないかも。
いや、インターフェースだから問題はないのか。
でもどっちにしても数え上げ専用のクラスを使ったほうがよさそうだから関係ないか。
数え上げの専用クラスを作るのはよくても、それで.classファイルが増えるのはやだなぁ。
どっちみち使うときはJARひとつにまとめるからあんまり関係ないのだけれども。

納屋の日

ウィルスバスターを2004にアップグレードしました。
迷惑メール対策や個人情報保護設定などいろいろ増えてます。
で、なんか仕様許諾を見ると私には守秘義務があるらしくって、多分何を守秘しなくちゃいけないのかも言っちゃいけないような気がします。

ネスケで見てみたらtableのcaptionが左揃えになってしまっているようです。
どうしましょどうしましょ。

次の更新、アンチオブジェクト指向でもしてみるとか?
参考書を見ているととても便利そうな印象がありますが。

解析学にて

日本語プログラム言語「ひまわり」のバージョンが1.87になったようです。
で、ちょっと2つほどひまわりを使ってグラフを描いてみました。
本来ならVB6でやっていたところなんですが、学校のPCでやっていて、そこに入っていたのがドットネットやらジャーバやらなんやら本格的なアプリケイシヨン開発みたいのばっかだったんでひまわり使ってみました。
なんだか理不尽なエラーが出たりもしましたが、目的はグラフだけなんでとりあえずのエラー回避だけで済ませてみました。

なんだかラプラス変換がいまいち理解できていないようなので自分で勉強しなおすことにしました。
もしかしたら近々ラプラス変換の例題を日記で解いてみるかもしれません。

フーリエ変換がコンピュータ関連でよく使われるの、わかる気がします。
デジタルデータの場合、積分はある範囲内の全データの和を計算すればすぐに出るわけですから、計算上非常に都合がいいのです。

アスタブンヤスム

プログラミング12までスタイルシートで書き換えました。
こうやって見てみると、当時の自分の技術がよく分かります。

最近特筆すべきことはないけどアクセス解析。
強いて言えば、5月よりさらにアクセス数が増えそうなこと、CSSへのアクセスが増えたこと、など。

スーファミ版ドラクエ5のページと64版スマブラのページを更新しました。
主人公もピカチュウもアブノーマルなことをやっております。
実はスマブラDXでもドンキーとピチューがなんかやってたんですが。

青いペプシ…コーラとほぼ同じ…いかにも着色料っぽい色…
100の質問200の質問99の質問…

<前 次>