2007年12月3日月曜日

あーあ、俺も散弾銃のように歌い続けるかなぁ!!

World Tool Kit覚書

~ 3dsMaxで作った動きをWTK上でも再生しようぜ ~

1. 3dsMaxでてきとーにパス上を流れる動きを作成。

2. 書き出し -> ASCII形式を選択 -> なんかこのへんは忘れたけど精度6桁で出力

3. 出来た.ASEファイルを俺式コンバータ(後述)でWTK用の形式に変換

4. WTK上で動かすには「移動ノード」「モーションリンク」「パス」の三つを生成する必要がある。

4.1. 「パス」の生成。
WTpath *Path; /* パス */
WTgeometry *marker; /* マーカー用ジオメトリ */

path = WTpath_load("ファイル名.ASE",NULL);

/*** ついでにパス可視化 ***/
/* マーカー用box生成 -> パス可視化のためのマーカーセット -> マーカーを可視化 */
marker = WTgeometry_newblock(1.0,1.0,1.0,NULL);
WTpath_setmarker(Path,marker);
WTpath_setvisibility(Path,TRUE);

4.2. 「移動ノード」の生成

WTnode *Move; /* 移動ノード */
Move = WTmovnode_load(親ノード,"ファイル名.3DS",1.0);

4.3. 「モーションリンク」の生成

WTmotionlink *motion;
motion = WTmotionlink_new(Path,Move,WTSOURCE_PATH,WTTARGET_MOVABLE);

5. これで「移動ノード」->「モーションリンク」->「パス」の繋がりが完成したので、
   WTpath_play(Path)で動かせばいいじゃん。



[俺式コンバータ概要]
 3dsMaxから書き出したものは座標をPOSが入ってる文、回転をROTが入ってる文で記述してある。

ex)
 *CONTROL_POS_SAMPLE 0 -6.839744 7.298635 -16.181553
 *CONTROL_ROT_SAMPLE 160 -1.000000 0.000000 0.000000 0.000391

 POSはX,Y,Zの三元、ROTは4元数である。
 そんなこんなに気をつけて、SAMPLEのすぐ横の数字が同じPOSとROTを交互に配置すればいいじゃない。

ex)
POSI -6.839744 7.298635 -16.181553
ORIE -1.000000 0.000000 0.000000 0.000391

あとは……、一番頭になんか記述して、二行目に全部のPOSIとORIEの数を書くべし。
数値の間はタブから半角空白へ。POSIの後は半角スペース二つ。


とりあえずここまで。

追記 とんでもねー。このままじゃつかえねーよ。

あーあ、俺の代わりにゴミだしてくんねぇかなぁ!!

Ruby覚書

なんとなく日記 [TIPS][Ruby勉強日記]method/attributeがObjectに存在するかどうか確認するには

Object#respond_to?メソッドを使う

a.respond_to?("method") #=> t/f

2007年12月2日日曜日

あーあ、俺にそれっぽいものじゃないものを作る才能があればなぁ!!

 最近、恋空(笑)に毒され過ぎている。

 VIPで恋空(笑)に関係する糞スレを立ててからというもの、
男三人で劇場まで足を運びカップル渦巻く最中に突撃したり、
友人の後輩が入手した書籍を通行人が多いロビーで読破したり、
精神修養以外の何者でもない行為を繰り返している。

 なぜ恋空(笑)は私の心を悪い意味で掴んで話さないのだろうか。

 ひとえに、その話題性に理由がある。
 「スイーツ(笑)」という風潮が蔓延している今だからこそ、
私はケータイ小説(笑)の白眉である恋空(笑)に大きな関心があるのだ。

 私の寡少な読書経験と個人的嗜好から厚顔無恥なことを言わせて貰えば、
恋空(笑)はつまらない。

 無意味にもう一度言うが、つまらない。

 あと地の分が三人称視点で「美嘉は~」と書いてある中に
突然美嘉の心中の独白が出てくるため、読みにくい。

 私が恋空というものに対する文句はこれだけである。

 文が小学生みたいなところとか、漢字の使用率が少ないこととか、
「ちょ~お腹へったし♪♪」から始まることとか、
妙に「!」「?」「♪」が多いところとか、他の不満点は解消できた。

 これらは全て読者層を考えてのことである。

 恋空(笑)のターゲットはスイーツ(笑)さんたちである。
ごめん嘘。女子中高生あたりである。(成人しているスイーツ(笑)さんたちに失礼)

 漢字の使用率が低いのは、読める漢字がそれほど多くはない読者に対しての配慮である。
あまりに多くの漢字が使用してあると、それだけで辟易してしまい読まれない。
同様の狙いから、「!」や「♪」の多用、インパクトのある台詞からの書き出しが
用いられているのだろう。

 誰の言葉だったか私の矮小な脳は記憶に留めて置けなかったが、
台詞で始まる小説は総じて糞という言葉があった。あったはず。
書き出しはその話の顔である。
始め三行で読者の興味を引けなかったら負けである。
だからこそ、書き出しは「何が起こっているのか」や「どんな話なのか」をちらつかせ、
続きを読みたいと思わせるようなものでなくてはならない。

 それと同時に、話の舞台・主人公・状況・世界観等を理解させなくてはいけない。
主人公が医者なら手術室から始まったり、サラリーマンなら会社から始まったり、
サスペンスなら殺人現場から始まったり、まあとにかく色々手段はある。
しかし恋空(笑)は違う。主人公は読者と近い女子高生である。
余計な説明は必要なく、ただありふれた女子高生であるとだけ書けばいい。
だからこその台詞からの書き出しなのである。
この口調、この音符。この一言の台詞だけで目的の大半が達成出来ている。
実によく出来た書き出しだ。

 そして本文だが、ケータイ小説は当然ながら携帯電話で読むことを想定して書かれている。
我々が小説と聞いて思い浮かべるような文体で書いていくと
一ページに入りきらずごちゃごちゃしてしまうのである。

 一文を20文字程度に収めるのが読みやすい。
そのルールに順ずると自然に文章が安っぽく見える。
しかしそれは紙とケータイ画面という媒体の違いを考慮した書き方の結果なのだ。

 加えて言えば、ケータイ小説は紙に書かれた小説と違って話が確認がしにくい。
少しページをめくって「ああ、こんなことがあったな」と話の筋を確認することはよくあるが、
ケータイ小説で場面を戻すのは何度もクリックしなくてはいけない。
一画面に出せる文の量が少なすぎるからだ。
話の展開が少し難しかったり状況が把握出来ないような文だと、
読者に作業を強いることになり、最後まで読んでもらえない。
だからこその文体であり、このことを挙げて恋空(笑)だのケータイ小説(笑)だの言うのは的の外れた意見である。



 風評だけを聞いて、恋空(笑)と言っている人たちは情報に踊らされているという点でスイーツ(笑)と差がない。

 恋空(笑)は、読書をしない層を狙うということとケータイで読むということを踏まえて書かれた素晴らしい小説です。
その技術を見ずに無闇やたらに馬鹿にするのは早計である。
是非一度読破することをお勧めする。
当然金など払う必要はない。検索すればロハで読める。
そして読んで時間を無駄にしろ。
糞話だから。


 一人でも多くの人が、すばらしいしょうせつかである美嘉さんの作品を読んでしまいますように。

2007年11月30日金曜日

あーあ、俺にも野島ぐらい情熱があればなぁ!!

武者小路実篤 「友情」 読了。

 野島が初めて杉子に会ったのは帝劇の二階の正面の廊下だった。
 この書き出しで作品の三分の二が判る。
 二十三歳童貞の野島を主人公とした杉子への身を焦がすほどの恋物語である。
 読みやすい文章とテンポの良い話であり、中篇程度なので一時間ほどでサクっと読める。
 大半が野島が杉子に対してカッコいいとこを見せようとしたり自己嫌悪に陥ったり嫉妬したりしているので、乱暴に言うとラノベに入れていいと思う。
 ラストの盛り上がり方は好き。

210文字

あーあ、俺の脳にパッチあたんねぇかなぁ!!

Worldtool Kit修練

選択肢のジオメトリをクリックしたら次の状態に移る奴を作りたかったのでだらだらと作る。
マウス更新関数をつくればいいみたい。


static void mouse_phase1(WTsensor *sensor)
{
/*********************************
オリジナルマウス挙動関数
クリックしたものがどのジオメトリかを取得する
********************************/
long buttons; /* ボタン情報 */
FLAG lclick; /* 左クリックフラグ */
WTmouse_rawdata *raw; /* マウスXY座標値 */
WTp3 p; /* WTsensor_setrecod関数設定用 */
WTq q; /* WTsensor_setrecod関数設定用 */
float speed; /* センサー感度値 */
WTwindow *w; /* ウインドウオブジェクトポインタ */
int x,y,width,height; /* ウインドウ配置情報 */

//////////////////////////////////////////
WTpoly *clickpoly; /* クリックされたポリゴン */
WTp3 clickp3; /* なんかとりあえずいらねーかも */
WTgeometry *clickgeometry; /* クリックされたジオメトリ */
char clickgeoname[256]; /* クリックされたジオメトリの名前 */
//////////////////////////////////////////
WTp3_init(clickp3); /* 初期化 */
//////////////////////////////////////////

WTmouse_rawupdate(sensor); /* マウス新規情報を取得 */

w = WTmouse_whichwindow(sensor); /* マウスウインドウを取得 */
if(!w){
WTp3_init(p); WTq_init(q);
WTsensor_setrecord(sensor,p,q);
return;
}
WTwindow_getposition(w,&x,&y,&width,&height); /* ウインドウ配置情報を取得 */
raw = (WTmouse_rawdata *)WTsensor_getrawdata(sensor); /* ウインドウ座標系のマウス情報を取得 */

speed = WTsensor_getsensitivity(sensor); /* あーいらないかも */

buttons = WTsensor_getmiscdata(sensor); /* マウスのボタン情報をゲット */
/* 押されたか */
lclick = buttons & WTMOUSE_LEFTBUTTON; /* 左クリックON/OFF */

if(lclick){ /* 左クリックされてんの? */
clickpoly = WTscreen_pickpoly(0,raw->pos,NULL,clickp3); /* どのポリゴンクリックしたの? */
WTmessage( "X:%f Y:%f\n",clickpos[X],clickpos[Y] ); /* クリック座標表示 */
if(clickpoly != NULL){ /* クリックした場所にポリゴンがあるならば */
clickgeometry = WTpoly_getgeometry(clickpoly); /* ポリゴンからジオメトリを取得 */
strcpy(clickgeoname,WTgeometry_getname(clickgeometry)); /* ジオメトリの名前を取得 */
WTmessage( "geoname[%s]\n",clickgeoname); /* ジオメトリの名前を表示 */
if(strcmp(clickgeoname,"botton1") == 0){ /* botton1さんですか? */
/* A発動 */
WTmessage( "A\n");
}else if(strcmp(clickgeoname,"botton2") == 0){ /* botton2さんですか? */
/* B発動 */
WTmessage( "B\n");
}else{
/* 特に何もないです */
}
}
}
return;
}


予め「botton1」「botton2」という名前を付けたジオメトリを配置してある。
このマウス更新関数でジオメトリをクリックしたらAとかBとか表示されるものが出来た。
当然てきとーに作ってあるので品質に保証は出来ないし、
よくわかんねーで書いてある処理もあるので困る。


追記:returnを書き忘れる俺は死ぬべき

2007年11月29日木曜日

あーあ、俺もちゃんとしねぇかなぁ!!

最近購入した書籍

・ヒトライフ 竹本泉
・ルプさらだ 竹本泉
・スケッチブック(2) 小箱とたん
・スケッチブック(3) 小箱とたん
・スケッチブック(出張版) 小箱とたん
・スコアブック 小箱とたん
・電脳青少年攻略法 倉糖良菓
・ゲマママ 野月楓
・日がな半日ゲーム部暮らし 祥人

あとがきの為だけにルプさらだを買いなおすのはどうかと思う俺。

2007年11月28日水曜日

あーあ、俺がてるてる坊主作ると雨降るしなぁ!!

卒業研究の中間発表を明日に控えた午前三時ごろ。

一人研究室で作業をする俺。

やったー、ミスプリントでてるてる坊主できたよー。

ごめんなさい。



これでも一応中間発表用のレジュメは完成しており、パワーポイントを作成するだけです。

まあ、明日なんだから遊んでる暇はないんですけど。