ゲームプログラミング相談室【Part6】
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
04/03/06 01:25ID:d2e/eEyg扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
■過去スレ
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
【Part4】http://game.2ch.net/gamedev/kako/1005/10050/1005040025.html
【Part5】http://pc2.2ch.net/test/read.cgi/gamedev/1036410116/
■関連スレなど
>>2-5
0028名前は開発中のものです。
04/03/15 10:22ID:xvHM+bhp/* 固定小数点型 */
typedef signed long fix;
/* 整数⇔固定小数点 */
#define FIX_TO_INT( a ) (( a ) >> 16)
#define INT_TO_FIX( a ) (( a ) << 16)
/* 浮動小数点⇔固定小数点 */
#define FLOAT_TO_FIX( a ) (fix)(( a ) * 0xffff)
#define FIX_TO_FLOAT( a ) ((float)( a ) / (float)(0xffff))
0029名前は開発中のものです。
04/03/15 12:11ID:TcRXwi1nコンパイラを信じられる漢におすすめ。
0030名前は開発中のものです。
04/03/15 13:23ID:p3AFlJa9PeekMessage()を使うのはどちらが主流なのかな?
GetMessage()+SetTimer()はFPSが微妙に安定しないし、PeekMessage()だと
CPUを100%使いかねない。
個人的にはCPUを100%使ってしかもムダ使いというのはマルチタスクOSでの
プログラミングとしては礼儀違反と思うし、例えば落ちゲーとかブロック崩し
なんかでCPU100%てのは納得もいかない。
SetTimer()での安定の悪さを考えて、1msecでWM_TIMERを発生させたあとに
timeGetTime()で実際の時間を取得、ずれを調整するようにしてみた。
WM_TIMER自体が1〜20msecで発生しているようで、とても60fpsなゲームなんて
作れないなあと思った。
常識的な方法があるなら知りたい。
0031名前は開発中のものです。
04/03/15 13:26ID:p3AFlJa9よくベンチマークで、400fpsとかいう数値があったりするけれど、
あれって何? 画面自体はせいぜい120fpsでるかどうかでしょ。
オレのモニタは液晶だから60だけど、CRTでも80とかじゃない?
400って表示しているFPSじゃなくて、演算可能な理論値ってことなのかな?
0032名前は開発中のものです。
04/03/15 13:33ID:BH49Bw7kSleep入れればいいじゃん。
>よくベンチマークで、400fpsとかいう数値があったりするけれど、
>あれって何? 画面自体はせいぜい120fpsでるかどうかでしょ。
blitやポリゴン描画なんかの処理とモニタに出力する処理はほぼ平行に行われるから
そういう「描画処理」自体はモニタの同期信号の周波数とは関係ない。
普通HBLANKを待つから最大fps=リフレッシュレートなことが多い、というだけ。
0033名前は開発中のものです。
04/03/15 14:54ID:nFKOW0T2GetMessageで。WindowsなどVブランクをシステムが管理している場合は
ゲームスピードをFPS基準にすべきではない。75Hzの人もいれば60Hzの
人もいるのでVブランクではなく時間を基準にすべし。WM_TIMERは200ms
程度の精度(実際は変動あり)しかないのでMultiMediaTimerを使うしかない
と思われる。
Vブランクに関係なく処理が終わったら画面更新という設計にしておいて、
アニメーションは時間単位で制御する方針で。
>>31
Vブランクを待たずに画面更新をした場合の1秒間のフレーム更新回数。
コンシューマゲームと違ってVSyncはシステムが管理しているので、描画
ラスターがどこにいるかは意識する必要がない。
0034名前は開発中のものです。
04/03/15 15:05ID:BH49Bw7kGetTickCount, timeGetTime等の精度について
http://www.emit.jp/prog/prog_t1.html
0035名前は開発中のものです。
04/03/15 16:34ID:4yykzdEK2Dで作りたいんですが。
0036名前は開発中のものです。
04/03/15 16:58ID:7lXda+Uw0037名前は開発中のものです。
04/03/15 17:43ID:p3AFlJa9おー。レスありがと。30&31です。
そか、fps表示は理論値ってことだね。納得。
IDirectDraw7::WaitForVerticalBlankでVSYNC待ちをするよう
作っていた。そのあとでバックサーフェースからフロントサーフェースに
IDirectDrawSurface7::Bltで画面転送していたけれど、試しにVSYNC待ちを
削ってみても問題なく動作した。そういうものだったのか。
Blt後にGetScanLineでVライン位置を取ってみると1027〜1031くらいの
数値が出る(縦1024のモニタ)から、自動的にVSYNC待ちをしてたんだね。
無駄なことをしてたワ。
なるほど、Sleep()はtimeBeginPeriod()と使うと誤差が減るのか。
PeekMessage()+Sleep()を試してみるよ。サンクス!
0038名前は開発中のものです。
04/03/15 18:25ID:L+ne9Ht6デバッグモードだと普通に動いてるのに
リリースモードにするとエラります(;´д⊂)
このような状況に陥る可能性にはどんな物があるでしょうか
0039名前は開発中のものです。
04/03/15 18:33ID:p3AFlJa9メモリリーク。
あるいはライブラリとのデバッグ/リリースモードの不整合。
0040名前は開発中のものです。
04/03/15 18:50ID:BH49Bw7k・変数、配列の初期化ミス
・配列や確保したメモリの境界を越えたアクセスにより他の変数が壊れた
とかも。
いずれもデバッガじゃ追いにくいやつやね。
がんがれ。
0041名前は開発中のものです。
04/03/15 19:08ID:JehxVOt7検索をかけたのですが、アルゴリズムを見つけられませんでした。
今やってるやり方は、
3角形の重心を透視変換して計算したZ値 0.0〜1.0を
もとにクイックソートをつかって並び替えています。
この方法が一般的でしょうか?
0042名前は開発中のものです。
04/03/15 19:49ID:cPa+rKUo0043名前は開発中のものです。
04/03/15 23:18ID:TVsWtjPx仮のつもりだったのに何の問題もないから不思議だ。富豪的プログラミングマンセー
0044名前は開発中のものです。
04/03/16 16:37ID:/Nn0fi6h0.0〜1.0の値を、たとえば0-255とか0-1023の値にマッピングする。
あとは256個なり1024個なりのインデックステーブルを用意して、
マップした値のテーブルにポリゴンを登録する。
全部の登録が終わったら、テーブル順に描画すればいい。
0045名前は開発中のものです。
04/03/16 20:05ID:JP2lEbCQ0046名前は開発中のものです。
04/03/16 23:07ID:wJFvxNHa「Bitonic sort」これって関係あり?
当方、画像プログラムをやった事の無いヘタレなんで、
もし勘違いだったらスマソ。
t-potさんところが詳しいです。
0047名前は開発中のものです。
04/03/16 23:40ID:ktbTl6+f004841
04/03/17 01:12ID:Bz6qtYMxありがとうございます。
Z値をある程度の配列に割り振って、
精度的に問題があれば配列の数を増やしていくということですね。
ただちょっと疑問があるのですが、
インデックステーブルが 100 などの値でなく
256、1024 のように2の乗数なのはなにか理由があるのでしょうか?
Z値1.0から1024個のインデックスを求めるときには
int index = (int)(z * 1024.0f);
といった具合に計算するのでしょうか?
0049名前は開発中のものです。
04/03/17 15:40ID:7fGZz4Ir単純にシフトで計算しやすい値というだけの話。別に10個でも100個でも1000個でも
好きな数を割り当てればいい。
それから、ある1つのテーブル要素に対して複数のポリゴンが割り当てられる可能性を
考慮して組むこと。具体的にはインデックステーブルをポインタテーブルにして、リンク
各要素からリンクリストがぶらさがるようなイメージかな。
0050名前は開発中のものです。
04/03/18 09:07ID:8j8lQKul0051名前は開発中のものです。
04/03/18 09:47ID:B+MnpSym0052名前は開発中のものです。
04/03/19 23:21ID:xSnIz48S0053名前は開発中のものです。
04/03/24 09:40ID:HbaECddB0054名前は開発中のものです。
04/03/24 10:02ID:6y/xMBfw320*240で処理して640*480へ拡大bltがいいだろう
0055名前は開発中のものです。
04/03/29 09:22ID:htU9rKwGちょっと複雑になるけど、BSP(2分空間分割)木を使ってもできると思う。
それぞれの半透明ポリゴンを一つのノードとして半透明ポリゴンモデルの
BSPデータベースを作っておいて、
ランタイムで、
・BSP空間へ視点を変換。
・視点の裏面になるノードを選び続けて、葉(末節)に達したらそのノードの
半透明ポリゴンをバーテックスバッファにコピー。
・以降、木を表面に遡っていけば、結果バーテックスバッファにポリゴンが
ソートされている。
ノード毎に視線ベクトルと面の内積を計算しなきゃいけないのが難か?
素直にソートした方が早そうだ。
0056名前は開発中のものです。
04/03/29 09:26ID:htU9rKwG>int index = (int)(z * 1024.0f);
z=0.0のとき index=0,
z=1.0のとき index=1023
にしたいんだから、
int index = (int)(z * 1023.0f);
0057名前は開発中のものです。
04/03/29 12:02ID:iNk+Kk8Eなんかもう頭が混乱して自分でやってることが良くわからなくなってしまいました。
一応思ったとおりに動作するのですが、どうも不安です。
改善点などのアドバイスをお願いします。
DWORD fps60wait[] = {17,17,17,16};
ima_time = timeGetTime();
dtime = ima_time - sakki_time;
if ( dtime < 11 )
{
lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
}
counter = (counter % 4) + 1;
wait = fps60wait[counter - 1];
do {
ima_time = timeGetTime();
dtime = ima_time - sakki_time;
Sleep(0);
} while(dtime < wait);
sakki_time = ima_time;
<描画>
<処理>
0058名前は開発中のものです。
04/03/29 13:33ID:1rpdsxXjWindows環境のプログラムでしょ。なぜ60FPSにこだわる必要があるんだろう。
>>33参照。
005957
04/03/29 23:22ID:iNk+Kk8E60FPSは実はどーでもいいんですが
既に60固定で作っちゃったんで>>57に問題がないか知りたいんです。
>>33はとにかくVSYNCは無視しろってことですよね。
0060名前は開発中のものです。
04/04/03 11:39ID:RYYtnws6のはやはり無謀でしょうか?
もっと簡単なのから作るのが普通でしょうか?
0061名前は開発中のものです。
04/04/03 12:04ID:4VZfUvkcシミュレーションってウォーシミュレーション?
ならここ↓の問題設定で手も足も出ないと感じたら
http://pc5.2ch.net/test/read.cgi/gamedev/1079745509/
ブロック崩しとかから五目並べみたいなのからやってみた方がいいと思う。
サンプルも探しやすいしね。
006262
04/04/03 14:32ID:c0YQngLdとりあえず自分がいま使ってるやり方を書きます。
if(a>1&&a<10){
a++;
1枚目の絵を表示させる}
if(a>11&&a<20){
a++;
2枚目の絵を表示させる}
if(a>21&&a<30){
a++;
3枚目の絵を表示させる}
if(a==30)
a==1;
こんな感じで動く絵を表示させているのですが、どうも見た目が汚いと思います。
うまい方々はこうゆうプログラムをどう書くのでしょうか?
0063名前は開発中のものです。
04/04/03 14:40ID:J+xYk8BN絵ってナニ
いつ実行してるの
006462
04/04/03 15:06ID:c0YQngLd絵というのは絵1・絵2・絵3でパラパラ漫画の用になっています。
つまり、これは段々と絵が1・2・3へと変わっていくプログラムです。
自分がしたい事はメインのループを10回ループすると絵が1枚づつ変わっていくようなものです。
わかりましたでしょうか?
0065名前は開発中のものです。
04/04/03 15:39ID:EgtzjyXvint indexPic = 0;
lPicture[0] = &picture1;
lPicture[1] = &picture2;
lPicture[2] = &picture3;
for(int i=0; ; i++)
{
if (i%10 == 0)
{
indexPic ++;
if (indexPic > 3)
{
indexPic = 0;
i = 0;
}
}
DrawPicture(lPicture[indexPic]);
}
0066名前は開発中のものです。
04/04/03 15:52ID:sI/6/JHPこんな感じで、タイマー使ってやんないと、まともにタイミング取れないと思う。
タイマーは独立したスレッドで、タイマー満了コールバックとかでやる方法もある。
const int numPictures = 20; //フレーム数20枚
const float secPerFrame = 0.1f; // 1フレーム0.1秒=毎秒10枚
int idx = 0;
float sumDt = 0;
long prevTime = timeGetTime();
while( true )//永久に
{
float dt;
long currentTime = timeGetTime();
dt = float(currentTime - prevTime)/1000.0f;
prevTime = currentTime;
sumDt += dt;
if( sumDt >= secPerFrame )
{
//idx番目の絵を表示
idx++;
if( idx == numPictures )
idx = 0;
sumDt = 0;
}
}
0067名前は開発中のものです。
04/04/03 21:02ID:3azEgRomtemplate<unsigned int Max, typename Son = EmptyCounter>
class LoopCounter
{
protected:
Son m_Son;
unsigned int m_Count;
public:
LoopCounter() : m_Count(0) {}
bool Inc()
{
if (m_Son.Inc())
{
if (++m_Count == Max)
{
m_Count = 0;
return true;
}
}
return false;
}
unsigned int Get() const { return m_Count; }
};
struct EmptyCounter
{ bool Inc() { return true; } };
//作成
LoopCounter<3, LoopCounter<10> > AnmCounter;
//ループ
Draw(AnmCounter.Get());
AnmCounter.Inc();
006862
04/04/03 22:16ID:c0YQngLdとりあえず、すべて試してみようと思います。
0069名前は開発中のものです。
04/04/03 23:32ID:UsdbLZaC考えから改めるべきだな。
データを読み取って、指定された時間に指定された絵を書くプログラムを書け。
0070名前は開発中のものです。
04/04/05 09:52ID:VdLSCHpKネットリソースではなかなか見つからなかったので質問させてください。
2Dアクションゲームでモーション中に別モーションを呼ぶ場合、
(例:ダッシュ中にパンチ、パンチキャンセルでキック等など)
モーション要求はスタックに積むのが常道でしょうか?
ダッシュとジャンプはそれぞれ加速度と重力変数で判別できるのですが、
キャンセル系について、たとえばガードキャンセル+パンチキャンセル+キックといった
コマンド技に似たもので、自分がどんなことをしてきたかの遷移がわからないのです。
一応コーディングしてみると、直前モーションを保存するとif文の数が40個ぐらいになってしまいました。
STLって何?っていう厨房なので、スタック以外にも方法があればご教授おねがいします m(--)m
0071名前は開発中のものです。
04/04/05 17:41ID:Wxg2TEwmスタックに積む=1モーション完了して次モーション
だと、いわゆるスト2の「キャンセル」っぽい動きにはならない。
ちなみにスト2のキャンセルは行きと戻りのモーションがあって、
行きモーション中にコマンドが成功したら戻りを「キャンセル」して
次モーションにつながることから。おそらく行きモーションと戻り
モーションが別コントロールになってるんだろうね。
どういう動きをさせたいのか頭の中を整理してみるほうがいい。
0072名前は開発中のものです。
04/04/05 17:44ID:rH0o4MFm主人公キャラの位置をRAYにして、地形と障害物とのあたり判定をしようと思っています。
とりあえず、移動方向に1フレームの移動分だけレイを飛ばして速度ベクトルをその真下にしました。
地形に沿って移動はできるのですが、この方法では主人公とおなじ高さで垂直に立ってる壁とか、こっちに向かって傾斜しているポリゴンがあると困ります。
はじめにレイを進行方向に飛ばすときもあたり判定を計算すると2倍の計算量になってしまいますが、仕方ないのでしょうか。
0073名前は開発中のものです。
04/04/05 20:32ID:WG5Tm/kb何を言いたいのかさっぱりわかりません。
もっとわかりやすく書いて、
改行も入れてください。
0074名前は開発中のものです。
04/04/08 01:27ID:VoayxJMRどんなやり方してるかしらないけど。
アタリを分割すれば計算量は抑えられる。
AABBツリーを調べてみて。
0075名前は開発中のものです。
04/04/13 02:27ID:00yuZNJk今のところスクロールまで作ったのですが、画面のちらつきが気になってしかたありません。
一応バックバッファに描いてから転送するようにしています。
http://gamdev.org/up/img/475.zip
よければ解決策を教えてください。
0076名前は開発中のものです。
04/04/13 11:44ID:tK3wV3VDもしかしてティアリングのこといってるの?
0077名前は開発中のものです。
04/04/13 12:33ID:xi3HdIxL「リフレッシュレートに関する論争」スレでも検索してみるといいことがあるかも。
解決しようとするとちょっとした闇に踏み込むことになるので、覚悟するように。
007875
04/04/14 00:41ID:s1vwKqYYスレを読んだりして見ましたけど、なんかめんどいんでこのまま進めることにします。
余力があったら考えてみたいと思います。
ありがとうございました。
0079名前は開発中のものです。
04/04/14 01:24ID:fCb1f0Lhが、垂直同期周波数が環境によって違うことも多いために
垂直同期とってもゲーム内の描画とのずれでカクカクしてくることもある
その辺がばっちり解決してもWinがリアルタイムOSでない時点で完璧には無理
どの辺で妥協するかが重要と思われ
タイマとフリップ併用が一番いいと思うけどね
0080名前は開発中のものです。
04/04/14 02:16ID:bV4eSf3VRTOSでも無理だから。
0081名前は開発中のものです。
04/04/16 17:56ID:6nIx9YzbとあるPDAで擬似的な3DのGAMEを作りたいと思っています。
2Dではいくつか作って公開していますが、PDAの3Dの場合
自力で書くしかないでしょう。
今、市販されている3DプログラミングものはDirextXを利用した3Dエンジンを使用したものが
多いですね
そうではなく自力で(ある程度はしょったモノになると思います。PDAだから)3Dを書きたい人におすすめな
書籍(もちろんWindows95前後の頃のものだと思うのですが)のタイトルと簡単などういう感じか
教えてもらえないでしょうか?
※こういった質問はここでよろしかったでしょうか? よろしくお願いします。
言語はCもしくはC++です。
上げさせていただいてもいいでしょうか?
0082名前は開発中のものです。
04/04/16 18:03ID:ApfI3JPrD3Dのマニュアル
008381
04/04/16 18:15ID:6nIx9Yzb申し訳ありません D3Dとは何かの略でしょうか?
検索してみたのですが 海外の会社ばかり引っかかるようです
フルネームを教えてくださいませんでしょうか?
お手数をおかけしますがよろしくお願いします
0084名前は開発中のものです。
04/04/16 18:23ID:ApfI3JPrDirect3Dだよ。
基礎知識のページに
ジオメトリやトランスフォーム、ラスタ化ルールとか
入門に必要な情報はみんな書いてある。
008581
04/04/16 18:43ID:6nIx9YzbMSのサイトが引っかかりました。
ttp://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
基礎知識のページとはここでいいでしょうか?
あとDirect3Dのヘルプにも詳しいそうですね。
0086名前は開発中のものです。
04/04/16 19:29ID:ApfI3JPrhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/DirectX9_c/directx/graphics/programmingguide/gettingstarted/gettingstarted.asp
ここだけど、3Dトランスフォームとかの文章がなくなっちゃってるね。
DirectX7.0迄のマニュアルを落としてきて参照するのがいいかと。
008781
04/04/16 20:07ID:6nIx9Yzbありがとうございます。
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=3a9531f6-577c-4748-b59c-2197014f544e&displaylang=ja
より DirectX7.0ドキュメントを落としております。
感謝しています。
あのう…… 非常に図々しいのですがDOSの時代ってDirectXとか無かったわけですよね
DOOMとか…… あのころの技術とこのDirectX7.0に載っている技術とは基本は変わらないと思っていて
いいでしょうか?
DOOMでは、見えないモノは書かない、省略、上下の省略などで稼いでいたようですがこれってこれから
生まれた技術でしょうか? ちょっとWindows以外なのでDOOMが参考になるかと検索しているんです。
きっちりとした3Dを必要としてないものですから
それと同時に3Dの基本の情報を知りたかったのでこちらは本当に助かりました。
本当にありがとうございます。
008881
04/04/16 20:15ID:6nIx9Yzb2002年 6月号に3Dダンジョンの作成と表示の基本アルゴリズム(DOOMも絡む)
がありますね
これを求めたいと思います
他の人の参考になれば。
0089名前は開発中のものです。
04/04/16 21:26ID:1fUHdakN似非3DならダンジョンマスターとかWizardryとかそっち系のほうがいい気がしないでもない
0090名前は開発中のものです。
04/04/16 22:18ID:CYG69g6nその手のも作っては見ますが、升目式ダンジョンではなく同じような感じの道が
ないようにしたいわけです。
なんとなくそらで道を覚えられるみたいな感じに出来たらと考えていますので。
0091名前は開発中のものです。
04/04/16 23:40ID:bAbJcDxyキャノンからでたRenderWareの分厚い本。
3Dエンジンを作るにあたって生じた技術資料を適当にまとめて
「プロご用達!」などとうたって1万前後で販売!
CDにはRenderWareが入ってるが、これを使ったソフトを配布してはならないという罠。
クラリオンに聞くと「学習用ですので」。氏ね。
009281
04/04/17 00:32ID:KupmHoyYそれってプロ御用達と学習用と矛盾してますな。誰が見てもわかるところに
これを使ったソフトの配布禁止と書かれていて、学習用と書かれているのでしょうか?
(だったらこんなに怒るわけないよな……)
とあるソフトのマニュアル的なものなんでしょうねえ
そういう3Dプログラミング物多いですよね 以外と。
0093名前は開発中のものです。
04/04/17 01:28ID:a3IXbRjM3Dプログラミングってどう言ったレベルを想定してるか分らないが
自前実装って言うならラスタライズやら必要だよね?
"コンピュータグラフィックス 理論と実践"
辺りで良いんでないの?12000円と手頃だし。
特定ハードに依存(API等)しない
3Dの数学的理論、3Dの工業的理論(汎用的なコンピューター理論)
を身に付ければ、自前実装はスグできるようになる。
その前に、実装実機の理解は必須だと思うけど。
0094名前は開発中のものです。
04/04/17 03:02ID:mkUkAsviこの本ってさ、1つの話題に対しての密度薄すぎねぇ?
技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
ってのが多々あるぞ。
式出したらせめて各変数の意味ぐらい書いとけってのが多々あってムカツク。
0095名前は開発中のものです。
04/04/17 05:17ID:a3IXbRjM自分のレベルに合わない本は、皆そう感じる物じゃない?
それに、自分の望むチャプターのみで、更にそれが根ほり葉ほり事細かな内容ってありえないでしょ。
DirectXのhelp読んで、
>1つの話題に対しての密度薄すぎねぇ?
>技術の名前だけのってて「はぁ?こりゃなんも説明できてねぇよ」
>式出したらせめて各変数の意味ぐらい書いとけ
何て言い出す人間の大半は
プログラムとC++と3Dプログラミングの基礎を持ってから読もうねって、感じの人間が多いと思う。
それと同じかな…?って思うけど…
違うなら、不満や不足に感じる部分は、他の本や他の情報源、
そして自分の頭で解決ってなる物でしょ?
幾ら何でも、答え頂戴、全部教えて、クレクレって方針はありえないでしょ。
普通に数学の基礎とハードの基礎とプログラムの基礎を持って読めば
十分な内容でしょ、12000円程度の価格なんだし。
0096名前は開発中のものです。
04/04/17 07:53ID:Le5gnz+vあんた序文や前書きちゃんと読んでるか?
俺はこの本は持ってないが、
同系統の「Real-Time Rendering」だと
「各トピックについて深く知りたい場合は、
参考文献を充実させたのでそちらを参照してくれ」
ってちゃんと書いてあるんだが。
0097名前は開発中のものです。
04/04/17 09:41ID:VEtZ9nxQはてさて、どちらが正しいのやら。
>>95の方が読んだ事無いように見えるけど
0098名前は開発中のものです。
04/04/17 16:07ID:a3IXbRjM>同系統の「Real-Time Rendering」
両方もってるが、全然同系統じゃないぞ。
Real-Time Renderingの方は原本の奴で英語だけど。
コンピュータグラフィックス 理論と実践は
主にはCGをコンピューターで扱う原理を解説してる。
点を定義してそれらを結んでピクセルを塗る原理(ライスライズ)とか
つまり、普段はハードやらAPIが処理してる低レベル部分の理論的説明が主。
つまり、3Dソフト自体を開発したり、
DirectX使わないでWindowsでポリゴン自力描画(WinAPIは使うけど)実装したり
(勉強で昔やった)って勉強が出来る。
Real-Time Renderingはその名の通り、もうダブルバッファ前提で
いかにリアルタイムで処理時間を稼ぐとかの技術が主にある。
しかも、参考文献ってさ、文献として上がってる
本の著者と名前が載ってるだけだと思うが?
コンピューターCGの本と3Dプログラムの本、同系統では無いと思うけど?
0099名前は開発中のものです。
04/04/25 12:00ID:dZ+uD0u1Cは向いていますか?
またいいツールとかありませんか?
0100名前は開発中のものです。
04/04/25 12:06ID:JYGTOjaq0101名前は開発中のものです。
04/04/25 12:14ID:dZ+uD0u1作れると言うことですか?
今勉強中ですが、Cってゲーム作れるのか?
と不安になってきました。
絵の表示の仕方がいまだにわかんないし・・・
0102名前は開発中のものです。
04/04/25 12:17ID:JYGTOjaq絵を表示するコードが1行の命令で、画面の初期化もらくちんって環境は
世の中にたくさんあるよ。
Cの利点は何でもやろうと思えば細かいことは出来るというだけで
その利点もハードガリガリアクセスする環境ならともかく
Winとかだとほとんどメリットないね
0103名前は開発中のものです。
04/04/25 12:29ID:dZ+uD0u1ちなにみ皆さんはこういうゲームを作るときは
どの言語を使ってるんですか?
0104名前は開発中のものです。
04/04/25 13:14ID:JYGTOjaq結局使い慣れた物が一番だと思う
最近はスクリプト系も結構あるから言語になれて内人はそっちがいいかな
俺はやはりC/C++を長くやっていたから言語体系が近いjavaとCだな
C++で中途半端なオブジェクト指向やるくらいならjavaいったほうがいいし、
シンプルにガリガリ叩くときにはCって感じ
javaだと画像表示やらシステム部分に時間をかけないでゲームの処理のみに
専念できてる感じがいい
Cとかはもちろん必要コード量が多くなるのでライブラリ整備が必須になって
変にシステムをいじってばかりでゲームに専念できないことも多い^^;
>>103がさわれそうな環境はC以外になにかあるの?
画像表示からうまくできてないということはDIBやらDirectXから出来るようになるには
かなり時間かかると思うから他を勧めたい
0105名前は開発中のものです。
04/04/25 13:34ID:dZ+uD0u1もっとも勉強しやすい環境にあるのはCだと想います。
こだわりと言うわけではありませんが、
できればCで作りたいと思っています。
>画像表示からうまくできてない
まだ勉強中なのでそこまで達していなのかもしれません
一応C入門の本は1冊読んだのですが・・・
0106名前は開発中のものです。
04/04/25 14:07ID:vDhsPj0Uみたいなもんだな。
CでやるとしてもまずはコンソールじゃなくWindowsプログラミングやらんといかんし。
まーいっそコンソール&glutって手もあるが。
0107名前は開発中のものです。
04/04/25 14:22ID:JYGTOjaqゲームプログラムが全く出来ない人もたくさんいる
ゲームに必要な知識と、そのプラットフォームで絵を出すとか
システムに必要な知識は全く別物なわけで
逆にスタンドアロンのゲームは作れるけどウインドウシステム上での
ゲームは作れないという人もいる
今のちみの状態は分からないことが多すぎかと
言語自体も本読んだというレベルなら表面上のものだけだと思うので
ポインタガンガン使えるというレベルまで言ってないと思われ
一番重要なのは目的がゲームを作ることなのか、それともC言語を
勉強したいのかってところだよ
昔はC言語&ゲーム作りたいってことが多かったと思うけどこれは
生産性を上げつつマシンスペックが低かった時代これしか選択肢がなかっただけ
8bit時代BASICでゲーム作って遅かったのでしかたなくハンドアセンブルへ
そして16bitになりメモリが多少裕福になってC言語へって人は多いはず
言語が目的ではないんだよ
それにプログラマは複数の言語が使えるのが普通
1つの言語で今後もいくとは思えない
0108名前は開発中のものです。
04/04/25 14:52ID:dZ+uD0u1かなり無謀だったみたいですね。
もちろんゲーム作成が目的ですが、
今は置いておいて、Cをがんがん使えるようになろうと思います
0109名前は開発中のものです。
04/04/25 15:36ID:RwxVe3k8次にC++をいくらかかじって、
あとはDirectXに進めばOK。
このQ&Aってもう何度もされてるよね。
ゲームプログラミングのまともな入門サイトor本がないということだろう。
どうにかならないもんかね?
0110名前は開発中のものです。
04/04/25 15:47ID:JYGTOjaqそれほど山のように雑誌はあった
ベーマガ、MSXFANなど読みやすくて分かりやすいシンプルな物がないからね
あとは個人レベルで作る物と商業レベルとでできあがる物が違いすぎるというか
でも昔から初心者向けと上級者向けはあってもその間の中レベル向けが
ほとんど存在しないと言う問題もあったよ
たとえばC言語は分かって絵も描画できる、でも具体的にゲームで必須な
垂直同期がなんなのかとかラスター割り込みがどうとかそういった物は
なかなかいいものはなかった
DirectXやるときC++よりCでやったほうが楽な気がする
0111名前は開発中のものです。
04/04/25 15:58ID:+MyYZ79o綺麗な使い方が出来ないと思うC++
0112名前は開発中のものです。
04/04/25 16:18ID:itt2Cin5DirectXやったことないけど、呼び出すだけだからどっちでも一緒じゃ?
0113名前は開発中のものです。
04/04/26 09:29ID:YvjKmIIw綺麗な使い方には絶対にならない。
0114名前は開発中のものです。
04/04/26 15:22ID:AM2u3eHSいや、そういうことじゃなくて、アレだろ?
C++なんだけどC風に組むとかそんなんだろ。多分。
でも、C++風に組んだ方が楽だと思うけどね。俺は。
0115名前は開発中のものです。
04/04/28 01:45ID:LxpA+NNA潔癖主義かつ無能なら何を使っても汚く感じるだろう。
0116名前は開発中のものです。
04/04/28 15:15ID:ELYXrsLP0117名前は開発中のものです。
04/04/28 20:35ID:brIWsk8Jなにが汚くなる可能性があるのか具体的に言ってみろばかー
0118名前は開発中のものです。
04/04/28 20:38ID:YnOaqFHo0119名前は開発中のものです。
04/04/28 20:52ID:brIWsk8J清純可憐で微妙なエロスの漂う穢れのないコードかけてるっつーの
0120名前は開発中のものです。
04/04/28 23:03ID:qRKYM2ci0121名前は開発中のものです。
04/04/29 00:07ID:klVfh8nk特別ですね。
言語レベルで厳格な貞操帯を装着しないと、猿のようにオナーニを
いえ独り善がりな汚いコードを書いてしまう無能には「C++は特別」です。
特別汚いコードを書ける言語です。彼等にとっては大きな問題です。
貞操帯を装着しなくても問題の無い一般人にとっては瑣末な問題です。
0122名前は開発中のものです。
04/04/29 01:29ID:ZbXlsRAe0123名前は開発中のものです。
04/04/29 03:54ID:w6BRdvWr0124名前は開発中のものです。
04/04/29 04:02ID:tELycjcoCEntityは自律行動を行うクラスで主にAIの更新を行う仮想関数Update()を持つ。
CRenderNodeはレンダラに登録され描画を行う仮想関数Render()を持つ。
CCollisionNodeはデフォルトの当たり判定を実装してあって衝突を検出したら仮想関数Collide()を呼び出す。
関連性のない3つのクラスからの多重派生ですがこれは邪道でしょうか?
また、みなさんはこの3つの要素をどの様にクラス化してますか?
ご意見お聞かせくださいませ。
0125名前は開発中のものです。
04/04/29 04:54ID:ffNyJU4j平和な奴だ。糞汚いコードを書いてばかりの低脳に
Java、C#、Dを試させてみたことがないんだろうな。
言語仕様上の規定(貞操)が厳格であるために
クルクルパーな悪性のハックは多少は減るが
やっぱりおかしなコードを書くんだよ。
馬鹿に付ける薬は無い。言語変えても駄目な奴は駄目。
0126名前は開発中のものです。
04/04/29 05:01ID:dU1CdeTe俺の場合、
class CCharacter : public CEntity
CRenderNode,CCollisionNodeはCCharacterのメンバ
理由は、描画リソース、コリジョンはいらないキャラのいるから。
例えば、ジェネレータとか。
とある理由で、CEntityをメンバにした事もある。
0127名前は開発中のものです。
04/04/29 05:08ID:klVfh8nk邪道・正道にはとやかく言及しないが
「〜Node」な2つの基底クラスの間で名前衝突が起きないってのが
ぶっちゃけあり得ない。背後にぐちゃぐちゃなメソッドの群れの気配がする。
0128名前は開発中のものです。
04/04/29 08:15ID:0gA9laqu肝心なのはその上位で、CCharacterのインスタンスの集合を管理しているクラスが
こいつをどういう風に扱うかにあると思う。
誰がどうやって生成して、どういうリストに組み込まれて、誰がメソッドを呼び出して、
誰がどうやって破棄している?
■ このスレッドは過去ログ倉庫に格納されています