2009-09-01から1ヶ月間の記事一覧

ベクトルクラスの設計

C++

ゲーム3D数学本 5章ここは凄くためになる。盲目的な隠蔽化は避けるべき。違和感はあったんだけどハッキリ言及があったので助かった。やはりxやyといった座標を持つだけのメンバ変数はprivateにするよりpublicにした方が良い。アクセサを用意するメリットが薄…

眠気

少しずつ進んでいる。自作ライブラリが使いにくすぎるのでやっぱ素でやった方が良さそう。慣れてきてからにすべきだな。

色々と触ってはいるものの

とりわけ何か記事にできるレベルのものはまだない。勉強しているWebサイトからXファイルのサンプルをDLしてきて表示させたりしてる。しかし、まだまだ良く分かっていない。ゲーム3D数学の本と合わせて読み進めていく。

ロベール完読

長かった。でもとても面白かった。

読むだけ

最近色々読むばかりで全然手を動かせていない。ちょっと気合を入れなおそう。・・・。

ベクトルの勉強中

ゲーム3D数学本とりあえず基礎の基礎から。点座標と、原点からのベクトル座標は完全に同義。

さて

色々と忙しい日々が続いており、中々更新できてない。現状打破のため策を張り巡らせている。

可変長配列メンバ

ロベールのC++入門講座 16-14クラスのメンバ変数の配列の要素数を可変長にするテクニックの話です。まず配列の要素を一つだけで宣言しておきます。 class CSample { public: int m_int; char m_char[1]; }; そしてこのクラスを定義する際に、クラスのサイズ…

オライリーのゲーム3D数学を購入

実例で学ぶゲーム3D数学作者: Fletcher Dunn,Ian Parberry,松田晃一出版社/メーカー: オライリージャパン発売日: 2008/10/04メディア: 大型本購入: 21人 クリック: 141回この商品を含むブログ (41件) を見る色々迷ったんですが、これに決めました。少しずつ…

匿名共用体

ロベールのC++入門講座 16-02メンバ変数に匿名共用体を用いれば、メモリを共有するメンバ変数を定義できます。 #include <iostream> using std::cout; using std::endl; class CSample { public: union { int m_int; char m_char[4]; }; }; int main () { CSample obj;</iostream>…

フレーム制御

フレームの制御部分の実装をクラス化してみた。 // -- FrameControl.h -- #pragma once #include <windows.h> namespace ddp { class FrameControl { private: int m_fps; int m_frameCount; int m_fpsCount; TCHAR m_fpsStr[64]; // ここちょっと微妙 DWORD m_beforeTi</windows.h>…

DirectX用のスマートポインタの作成

DirectX関連のオブジェクトを使用する場合に便利なスマートポインタを自作しました。 // -- smart_ptr.h -- #include <memory> namespace ddp { template<class T> class com_ptr { private: T* m_pComObj; public: explicit com_ptr (T* comObj = NULL) { m_pComObj = comObj</class></memory>…

アロー演算子のオーバーロードの注意点

C++

アロー演算子をオーバーロードして別のオブジェクトのポインタを返す処理があるとします。以下のような感じです。 #include <iostream> using std::cout; using std::endl; class CMember { public: void output () { cout << "CMember::output" << endl; } }; class C</iostream>…

キャスト演算子のオーバーロード

C++

http://homepage2.nifty.com/well/Operator.html#typeキャスト演算子もオーバーロードが可能です。 #include <iostream> using std::cout; using std::endl; class CSample { public: // intへのキャストのオーバーロード operator int () { return 100; } }; int main</iostream>…

メンバ変数ポインタ

ロベールのC++入門講座 13-17メンバ関数のポインタは以前勉強しました。実はメンバ変数もポインタを取ることができます。 #include <iostream> using std::cout; using std::endl; class CSample { public: int m_x; int m_y; CSample(int x,int y) { m_x = x; m_y = y</iostream>…

現状の見直し

やはり基礎の基礎をしっかりやらないと何も作れそうに無いので地盤固めに専念します。まずはスマートポインタを用いたライブラリ設計へ。またDirectXのCOM用のスマートポインタも実装しないといけません。何をやるにも基礎が重要。あらためて良く分かりまし…

D3DXFontによる文字描画

文字の描画を実装してみます。http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%CA%B8%BB%FA%CE%F3%C9%C1%B2%E8 // フォントの設定 SPDXFont DXClass::CreateFont (int height) { D3DXFONT_DESC lf; lf.Height = height; lf.Width = 0; lf.Weight = 0;…

スマートポインタ

C++

今日はスマートポインタについて学んでみたいと思います。newで確保した変数はdeleteで解放してあげないといけません。とはいえプログラマーは人間なのでdeleteを良く忘れてしまいます。ある関数の戻り値にnewした変数を返す場合があると、その関数がnewで確…

画像の回転

画像の回転にチャレンジしてみました。座標の求め方がかなり難しかったので色々なサイトで数学やアルゴリズムの勉強をしました。7割くらいは理解できましたが、やっぱ難しいですね。ちょっと数学そのものの勉強を再開しないといけません。座標の求め方はこん…

現状のライブラリ構成 その2

現状のライブラリ構成 - (void*)Pないとの続きです。テクスチャ描画周りの部分をライブラリにまとめました。 // -- dxclass.h -- #pragma once #include <d3d9.h> #include <d3dx9.h> #define FVF_CUSTOM ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 ) // 頂点バッファ s</d3dx9.h></d3d9.h>…

現状のライブラリ構成

とりあえず現段階でのまとめとして自作ライブラリを作ります。継ぎ足し継ぎ足しで醜いコードになってるのでそろそろ一旦整理しとかないとわけがわからなくなりそうです。まずDirect3Dの初期化等を行うDXClassクラスを作ってみました // -- dxclass.h -- #pra…

ある座標に向かって移動させる処理

前回の記事で「画面の中央に向かって移動する処理も追加してみました。」とさらりと言いましたが、実はこれが結構難しい処理だったりします。ある座標に向かって移動させるということは、今いる座標と目標となる座標の角度を求めて、その方向にX座標とY座標…

テンプレートの部分特殊化 応用編

ロベールのC++入門講座 13-13テンプレートの部分特殊化については以前テンプレートの部分特殊化 - (void*)Pないとにて勉強しました。このときやった実装例は、ある型とその型のポインタで部分特殊化するというものでしたが、それ以外にも複雑な部分特殊化も…

実体定義でテンプレートの特殊化

ロベールのC++入門講座 13-13テンプレートの特殊化にはクラス宣言で特殊化する方法と、実体定義で特殊化する方法があります。前者は以前テンプレートの部分特殊化 - (void*)Pないとにて勉強しました。後者は今回勉強する内容になります。実体定義でテンプレ…

基底クラスの関数を派生クラスでprivateに変更する

ロベールのC++入門講座 13-11前回のusingの応用です。 #include <iostream> class CBase { public: void func(char*); void func(int); }; class CSub : public CBase { private: // 基底クラスのfunc関数をprivateにする using CBase::func; }; void CBase::func (cha</iostream>…

usingを利用した継承関係でのオーバーロードのような処理

ロベールのC++入門講座 13-11 #include <iostream> class CBase { public: void func(int); }; class CSub : public CBase { public: void func(char*); }; void CBase::func (int num) { std::cout << num << std::endl; } void CSub::func (char *str) { std::cout <</iostream>…

テクスチャを読み込んでUV座標を指定して表示

その3 テクスチャ作成あれこれ板ポリゴンの表示はできました。今度はテクスチャ(画像)を読み込んで表示させてみたいと思います。たかだかテクスチャ表示させるだけなのにこれまた凄い時間がかかりました。。ゲームプログラミングってめちゃくちゃ勉強し辛い…

長方形をランダムで表示

板ポリゴンの表示 - (void*)Pないとの続き。折角正方形が表示できたので色々といじってみた。50×50が最小サイズのランダムな大きさと色の長方形をランダムな位置に表示する。また長方形はアルファブレンドを使って半透明表示させる。半透明度度合いもランダ…

板ポリゴンの表示

その2 座標変換済み頂点で2D板ポリゴンを描画板ポリゴン表示するだけなのに長かった・・・とりあえずほぼサンプルの通り書いてみて動かした。 struct CUSTOMVERTEX{ float x, y, z; // 頂点座標 float rhw; // 除算数 DWORD dwColor; // 頂点の色 float u, …

ジオメトリパイプライン

その2 座標変換済み頂点で2D板ポリゴンを描画そもそも3D空間内で2Dを表現するというのは本来難しい作業であり、3D空間における奥行きや遠近感を2Dとして見たときに違和感無く変換する処理のことをジオメトリパイプラインと言うらしい。