• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

元)零細社長のブログ一覧

2007年08月19日 イイね!

【C#】Mesh.Boxにテクスチャを貼る【Managed】

【C#】Mesh.Boxにテクスチャを貼る【Managed】managedDirectXに用意されているMeshクラスはxファイルのみならず、メソッド一発で手軽に形状を作ってくれる。

しかし、
UV値が設定されていないのでレンダリングパイプラインにテクスチャをセットしても無意味だ。
メソッド一発で作った形状にUVを設定する必要がある。

どうやって頂点にアクセスするか?

boxMesh_ = Mesh.Box(device_, 2, 2, 2, out GStream_);
clone_ = boxMesh_.Clone(boxMesh_.Options.Value, CustomVertex.PositionTextured.Format, device_);

このMesh clone_が必要。
なんでコピーせにゃならんのか未だによく分からんがDirectXではこんな手法をよく見る。

そして頂点にアクセス
CustomVertex.PositionTextured[] verts =
(CustomVertex.PositionTextured[])clone_.LockVertexBuffer(typeof(CustomVertex.PositionTextured), 0, clone_.NumberVertices);

そしてこのあとvertsにUVを設定する(終わったらUnlock)。

普通は一時的なVertexBufferを用意してあとでLockしてまとめてWriteするが、これだと変更しなくていい情報(ここでは座標)は気にしなくていいのでお勧め。

まぁ面倒な手続きだが、これでもC++/DirectXAPIに比べたらかなり楽になった。

参考サイト
Posted at 2007/08/19 00:58:50 | コメント(0) | トラックバック(0) | プログラム | 日記
2007年07月26日 イイね!

【C#】彼女はデリゲート【.NET】

デリゲートはややこしい。
かつて制覇したポインタより複雑怪奇だ。
一体いつ誰が何のためにこんなものを作ったのか。
そこから整理しようではないか。

何のためにあるのか。
そこが見えれば利用方法の推理が立てやすい。
(-_☆)キラーン

それはずばり
自作コンポーネントのイベント通知用だ。

VC#の画面右下にはプロパティがある。
デザイナ画面でForm上のコンポーネントをアクティブにするとイベント一覧が現れる。
そしてクリックすればイベントハンドラのコードが自動でFormに生成される。

誰がいつ使うか分からないコンポーネントのイベントを親フォームに通知するためにデリゲートはある!
間違っているかもしれんがオレはそう認識した!


C++Win32APIでは
親クラスのポインタを受け取っておいて、イベント発生したらそのポインタにメッセージをPostしてた。
正直この方法の方が好きなんだが、確かにデリゲートの方がオブジェクト指向してるし、そもそも強引にメッセージを投げる方法がない(だからデリゲートを修得せざるを得ないんだが)。

というわけで今日成功したことを記念して要点をメモ。
機能は
このコンポーネントがクリックされた場合、マウスの情報を加工して渡す。ものとする。
【メッセージを送る側】

//デリゲートを作る
//こいつはクラスの外側で宣言

public delegate void Hogehoge(Point e);

//デリゲートのインスタンスを作る。いわゆるメンバ変数。

public event Hogehoge myHoge;

//メッセージ内容の定義

protect virtual void OnHoging(Point e);
{
if(myHoge != null)
{
myHoge(e);
}
}

//実際にメッセージを投げる

this.OnHoging(modifiedPos);

親に通知したい情報を自作したい場合はEventArgsから派生した独自のクラスを作る必要アリ。


受ける側はさっきも言ったが、デザイナ画面でテキトーにクリックすればハンドラが生成されるのでここでは割愛する。
とにかく送る側にこれだけ書いておけばうまくいく。

世のサンプルでは同一クラス内で応答してるから価値が見出せなかったんだよね。
でもオレやったよ!!
彼女はデリゲートって言いたくて頑張ったよ!!!!
( ;゚∀゚)=3フンフン
Posted at 2007/07/26 01:09:27 | コメント(3) | トラックバック(0) | プログラム | 日記
2007年03月10日 イイね!

python始めました

python始めましたパイソンといえばコブラが愛用する銃として有名ですが、IT業界では新しい(10年くらい前からあったらしいが)スクリプト言語のことを指します。

特徴としては
モジュールのインポート
ですかね?
Cでライブラリをインポートするような感じです。
そのモジュールがAPIやらHTTPやら文字列操作やらを扱いやすくラップしています。
煩雑な処理はモジュールがやってくれるのです。


でまぁ
CG屋御用達ツールMAYAの最新バージョン8.5で搭載されるので今勉強しとるわけです。

ですが

MAYAでpythonを使う理由がさっぱり見えん。
ざっと調べたところ、pythonで新たな独自MELコマンドを作ることはできない。
描画にちょっかい出せるわけでもない。
というかMELと同じ事しかできない。
pythonにはstartfileという、他のファイルを起動する命令があるにはあるが、同じ事はMELにもできる。
大規模なツール・・・例えばフォトショップのようなビットマップ編集ツールを作り、MAYAにモジュールとして組み込んでしまう、とか可能なのか?
オレはいろいろ試したが標準ライブラリ以外のモジュールを呼び出せなかった。

つまりオレの疑問はこうだ。
・MELでできなくてpythonでできることは?
・MAYAに後付けモジュールをインポートする方法は?



来週中に解決したいところだ。



ところでpython漬けになると、マジでかっこやセミコロンを忘れるのでMEL使いやC使いは注意されたし。
Posted at 2007/03/11 00:14:17 | コメント(7) | トラックバック(0) | プログラム | 日記
2006年02月12日 イイね!

やっぱオレ天才

やっぱオレ天才いくらアルゴリズムが完璧でも、インタープリタのスクリプトでは遅すぎて話にならん!
現場は1秒でも惜しいのだ!

プラグインを作るぞ!
APIで組むのだ!!


ちなみに
プラグインを書けるヤツは恐ろしくカッコイイ。
CG系のサイトに行けば神扱いだ(昔憧れた)。


しかし昨日はうまく行かず、打ちひしがれて帰宅。
今日だ。今日うまくいかなかったらあきらめると背水の陣を敷いて気合でデバッグ。


あった!!
あったぞコノヤロー!!

というわけで執念で見つけましたバグの元凶を!!
バグを潰して、さぁビルド・・・。ホストに通してプラグイン呼び出し・・・。



叫びたかった。
しかし、社員がちらほらいるオフィスで、作業内容もしらされてないのに叫びを聞いても「?」だろうから、
フラフラと歩き深呼吸して一人喜びをかみ締めるのだ。
スーパーデザイナーは周囲への配慮も忘れない。

しかし、正直叫びたいのでここで高らかに宣言する。


成功だ!!
オレ天才!!
チョコよこせコラーーーッ!!!
Posted at 2006/02/12 18:31:00 | コメント(6) | トラックバック(0) | プログラム | 日記
2006年02月04日 イイね!

FileGate

FileGate毎日毎日
ファイルを一定のルールに従ったフォルダにコピペ(あるいは移動)しているあなたに送る、零細ソフトウェア謹製「FileGate
拡張子でコピー先を判別して振り分ける、ちょっと実用的かもしれないVBSだ。

ちなみにコピー先だが
"D:\dataBase_zero"にそれぞれのフォルダをこさえている。
実際使うには、ここを希望のフォルダにしたり、より具体的にフォルダ名を指定することが必須だ。
さらに日付ごと、あるいはファイル名ごとにフォルダを切るなど、工夫次第で現実的なツールとなるだろう。


では例によって以下の文章をメモ帳にコピペしる
set fs = WScript.CreateObject("Scripting.FileSystemObject")
dataBaseFolder = "D:\dataBase_zero"'希望のパスに書き換えれ!

If Not fs.FolderExists(dataBaseFolder) Then
fs.CreateFolder(dataBaseFolder)
End If

for each objName in WScript.Arguments
If fs.FileExists(objName) Then
exName = fs.GetExtensionName(objName)
dataFolder = exName & "_data\"
dataPath = fs.BuildPath(dataBaseFolder, dataFolder)
filePath = fs.GetAbsolutePathName(objName)

If Not fs.FolderExists(dataPath) Then
fs.CreateFolder(dataPath)
End If

fs.CopyFile objName, dataPath

MsgBox("ファイル " & objName & VBCR & "コピー先 " & dataFolder)'メッセージがうざかったらこの行を消す
End If
Next

そして、保存先はどこでもいい。デスクトップが適当だろう。名前は「fileGate.vbs」ファイルの関所だ(ちなみにプロフラムの名前を考えるのは結構楽しい)。
では
そのVBSファイルにコピーしたいファイルをドラッグアーンドドロップ!!


再び奇跡が君の目の前で起こったのだ!
さぁ!君もいますぐVBスクリプト!
上司に一目置かれたい!ライバルに差をつけたい!可愛いあの子の気を引きたい!
そんな君にVBスクリプト!
変なペンダントよりよっぽど効くぜ!!
Posted at 2006/02/04 20:56:14 | コメント(9) | トラックバック(0) | プログラム | 日記

プロフィール

みんカラ新規会員登録

ユーザー内検索

<< 2025/9 >>

 123456
78910111213
14151617181920
21222324252627
282930    

リンク・クリップ

有楽町丸井 
カテゴリ:脱キモオタ
2007/09/15 15:55:54
 
Elastic 
カテゴリ:脱キモオタ
2007/02/13 00:55:22
 
スタイルコネクション 
カテゴリ:脱キモオタ
2007/02/13 00:33:58
 

愛車一覧

日産 180SX 日産 180SX
おっさんなのに180sx
© LY Corporation