(bit per pixel)ごとにいちいち書いていると,同じようなルーチンが山ほど出来てうざいです.だからテンプレートを使おう,とは思っていたんですが,やっぱ専用ルーチンにはかなわんでしょ,と思いやってませんでした.
(自分なりに)導入してみました.
class V32 {
private:
BYTE b,g,r,a;
public:
inline int GetR(){return r;}
inline int GetG(){return g;}
inline int GetB(){return b;}
inline void SetRGB(int _r,int _g,int _b){r=_r;g=_g;b=_b;}
};
class V24 {
private:
BYTE b,g,r;
public:
inline int GetR(){return r;}
inline int GetG(){return g;}
inline int GetB(){return b;}
inline void SetRGB(int _r,int _g,int _b){r=_r;g=_g;b=_b;}
};
// 5:6:5
class V16g {
private:
SHORT c;
public:
inline int GetR(){return (c&0xf800)>>8;}
inline int GetG(){return (c&0x07e0)>>3;}
inline int GetB(){return (c&0x001f)<<3;}
inline void SetRGB(int _r,int _g,int _b){
c= ( (_b>>3) &0x001f ) |
( (_g<<3) &0x07e0 ) |
( (_r<<8) &0xf800 ) ;
}
};
// 5:5:5
class V16 {
private:
SHORT c;
public:
inline int GetR(){return (c&0x7c00)>>7;}
inline int GetG(){return (c&0x03e0)>>2;}
inline int GetB(){return (c&0x001f)<<3;}
inline void SetRGB(int _r,int _g,int _b){
c= ( (_b>>3) &0x001f ) |
( (_g<<2) &0x03e0 ) |
( (_r<<7) &0x7c00 ) ;
}
};
■と単純な(けど怪しい)コードですが,威力の方は絶大.
(5:5:5),16
(5:6:5),24,32の4種類のbitmapを相互コンバートするルーチンを普通に作ると4*4=16種類
(正確には12)必要ですが,これを使えばひとつ作ればそれで終わり.
template <class VOUT,class VIN>
static void Copy(VOUT *pvo,RECT *destrect,VIN *pvi,RECT *srcrect)
{
int x1=destrect->left,x2=destrect->right;
int y1=destrect->top, y2=destrect->bottom;
int u1=srcrect->left, u2=srcrect->right;
int v1=srcrect->top, v2=srcrect->bottom;
int x,y, u,v;
int du=((u2-u1)<<8)/(x2-x1),dv=((v2-v1)<<8)/(y2-y1);
int r,g,b;
int destpitch=destrect->right-destrect->left;
int srcpitch=srcrect->right-srcrect->left;
pvo+=x1 + y1 *(destpitch);
v=v1<<8;
for(y=y1;y>y2;y++)
{
u=u1<<8;
for(x=x1;x>x2;x++)
{
r= pvi[u>>8].GetR();
g= pvi[u>>8].GetG();
b= pvi[u>>8].GetB();
pvo[x].SetRGB(r,g,b);
u+=du;
}
pvi+=srcpitch* ( ((v+dv)>>8) - (v>>8) );
v+=dv;
pvo+=destpitch;
}
}
とやっといて,Copy( (V16g*)bitmap, &rect, (V24*)srcbitmap, &srcrect ); // 24bppから16(5:6:5)bppへ変換
(コードは甘いので参考にしないように^^;;)
(^^;
(or higher)が主流になって16bppとか24bppなんて消えるとは思うけど,やっぱまだ16bppとかっているよねえ.
(笑
(笑
(^^;;;
(師)のminimalのソース と tya-pa-氏の日記に有ったメタボールのソース.とりあえずtya-pa-氏のソースを組み込んで... とコンパイルして気づいた.ポリゴン分割テーブルが書かれているheaderが無い!!!!
(爆
(^^;;.
(フェイク環境マッピングには法線を使う),ソースも分かりやすいし素敵過ぎます.
(iso surface)関係のページ等を教えてくれました!本当にありがとうございます.
(なぜにlisp 笑).法線の求め方はpainからとか.
(笑.この方面への凄い影響力は凄いですねえ.
(にしてもコミケで販売したゲームが気になる〜)
知らなかった(^^;;法線の求め方あり.
■企業研修で全然家でプログラムできない〜(涙
■そういや夏休みの宿題なるものに全く手を付けていないし.ヤバイっす
(Hardware Abstruction Layer)で使う場合必然的にVIDEO MEMORYにサーフェスを確保するんですが,このとき異変が.
(むしろ速い)速度でした.
(予想だけど).
(例えば1ラインごとに)SYSTEMに読み出すようにして,ウェイトを軽減させました.これだと VIDEO -> SYSTEM -> 加工 -> VIDEO というかなり面倒な手順を踏むことになりますが,VIDEO -> 加工 -> VIDEO よりは倍近く速いです.
(T_T
(自分のPCは非AGPなのでよく分からん).VIDEO MEMORYの読み出し先読みキャッシュとかあればいいんだけど
(笑
(ってあれロックしてますよね.違ってたらどうしよう).
(何を今更? なのか? 爆)そういえばASM99もaccel demoが完全に主流になってたみたいだし.
■goa tranceはやっぱり良い!
■にしてもなんかjive結構環境依存するみたい.うわーDirect3Dの初期化なんて嫌いだー(T_T
(註:あてになりません)
(それはそれで嫌であるが)軽く探してみるが,そういうわけでもないらしい.
(民明書房刊 mitsuman駄選ショートショート1001 より)
(爆
(?)以外は大体実話
(ぉ原因は箸だった.微妙にカビてたらしい
(死
(とあっさり書いてますが,初期化回りのバグを取るのに相当時間を費やした.あとサンプル真似しただけなので座標変換+DrawPrimitive関係勉強してません(爆死 ).
(爆
(涙
(ぉ
(話は変わって)
(なぜか2命令なのにそのほうが速い),これをやらないと変人
(?)と思われるんですが,なんとK6ではloop命令が爆速らしい.WindowsがK6-2/350MHzで起動しなかったのはソフトウェアタイマにloopが使われていて,それが速く回りすぎた為らしい.がびーん>MS
(日本語で)命令表あるし,結構いいサイトです.
(爆組めなくても読める程度にはなりたいけど.
(爆 時間も凄く掛かるらしい^^;;)激しく単純かつコンパクトなコードで,要求される環境は厳しい,なんかdemoに利用されていそう
(?)
(意味ね―)
(^^;ハフマンでもないしエントロピー系のアルゴリズムであることは確かだと思うけど,知識も無ければ推測能力もないのでこれ以上は「?」.
(一体どんな状況だ)
■参考
奥村さんの圧縮関係のリンク 可逆,非可逆.色々な圧縮リンク.
吉崎栄泰のLHAワールド吉崎さんの顔が拝めます(笑 確かにきちんとしたプログラムを書きそうな雰囲気.しかもお医者さんだったとは初めて知りました.
自分で作って使おう、データ圧縮プログラミング入門 お勧め.結構実践的でソースがあればなんとでもなる人に○.
(ている)凄い有名な人です.
(実際は486 66MHzくらいで十分らしい)で超高速に動く大量のポリゴンやマンデロズーマー,そして見事にサウンドに同期した演出に感動したものです.
(プラス音楽が素晴らしすぎる).
(17才)だったらしいです.がびーん.
(?)みたいなのがあったんですが,僕も歳
(?)なのでそろそろ考え方を改めないといけないと言うことかな.
(もた)げてくるのは,至極当然のことかもしれません.
■参考
PC Demo Fan Club > Spot Light
MEGADEMO mod otaku > PCfan DOS/V Special 連載
(^^;;
(3匹出てきて2匹仕留めた).凄い.快記録であります.あ,直接どころか全く関係ないですね
(ぉ
(固めを2,3枚.柔らかいと感触が...笑)で掴んで,握り,潰す.です.最後まで緊張の連続ですが,潰すときは思わず にやり,としてしまう程の快感があって結構病み付きかもしれません
(わけねー).
(珍説)を発表いたします.北京で蝶が羽ばたくと云々の話もありますし,是非ともカオス理論で証明せねば!って,単に気温が高かっただけという説が最も有力だけど
(爆).
■jive随分バグ有るなあ... UPするんじゃなかったよ.とほほ
(そんな大袈裟なものではない)WindowsのMFCを使って何々をやる手段を考え,コーディングせよ.といった感じのお気楽なローリスクローリターンな仕事.
(笑
(codeguru.com等で似たサンプルを探しても全く見つからず)流石PI.さんやDISさんが居る会社です.
(爆
(^^;
(そこら辺は気合でカヴァーかも(ぉ)
(涙).PI.さん曰く「AppWizard,ClassWizardを使わないと組めないようではMFCを理解しているとは言えない」だそうでなかなか厳しいであります.
(?),入門書でいきなりMFCから始めるのが有るけどあれは絶対ダメかと.やっぱり最初はAPIレベルでゴリゴリ組むべきだと思います.ってそんなことやりだすとますますVCの敷居が高くなりそうですが.
(←これは個人的な主観によります)貰えるの!?
(爆
(^^;;