C/C++ゲーム製作総合スレッド Part5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2014/01/16(木) 00:00:31.27ID:w6WW3hAo元スレ
DXライブラリ 総合スレッド その17
http://toro.2ch.net/test/read.cgi/gamedev/1383795645/
前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
0174名前は開発中のものです。
2014/02/03(月) 22:30:48.05ID:/+Ylube7趣味なんだから人それぞれのスタイルでいいだろう
0175名前は開発中のものです。
2014/02/03(月) 22:49:21.68ID:xlOVneBMうん、わかった
自分の生活費さえなんとかできるなら1人で自由に作ってな
0176名前は開発中のものです。
2014/02/03(月) 22:55:48.33ID:HKt11pxu0177名前は開発中のものです。
2014/02/03(月) 23:24:56.58ID:/+Ylube7もっと時間のかからない遊びに流れるのも手だけど
0178名前は開発中のものです。
2014/02/03(月) 23:32:32.16ID:eCQAtwWs0179名前は開発中のものです。
2014/02/03(月) 23:37:42.57ID:eCQAtwWs0180名前は開発中のものです。
2014/02/03(月) 23:49:11.10ID:Ny+RFe0l0181名前は開発中のものです。
2014/02/04(火) 00:08:11.00ID:uJ0GtlwQ金持ちに成りたいと考える事は悪い事だと思う?
0182名前は開発中のものです。
2014/02/04(火) 00:23:08.29ID:J1FJfMJW0183名前は開発中のものです。
2014/02/04(火) 00:33:58.33ID:uJ0GtlwQ【同人】作ったゲームを金にする その4
http://toro.2ch.net/test/read.cgi/gamedev/1336913652/
0184名前は開発中のものです。
2014/02/04(火) 19:06:59.83ID:uJ0GtlwQ昔のゲームはアスキーアートを絵として使ってたわけだが?
0185名前は開発中のものです。
2014/02/04(火) 19:09:55.94ID:uJ0GtlwQとはいえbeep音でwevファイルを再生させてた事もあるからあなどれん
0186名前は開発中のものです。
2014/02/04(火) 19:58:16.47ID:J1FJfMJWやれメンツが無能だとかいってたらきりが無いわけだ
0187名前は開発中のものです。
2014/02/04(火) 20:14:51.47ID:uJ0GtlwQそういやそれも一人で作るようになる理由の一つだったな
まあ、人数が増えると衝突も増えるからな
むしろあの頃は、DQ1が出る前までは独りで作るのが当たり前だったような……
0188名前は開発中のものです。
2014/02/04(火) 20:22:21.38ID:J1FJfMJWひゃあ!ゲーム爺は生涯現役だぜ
0189名前は開発中のものです。
2014/02/04(火) 20:27:51.59ID:uJ0GtlwQが、パソコン持ってないのにパソコン本を買ったりするぐらいに憧れてたな
0190名前は開発中のものです。
2014/02/04(火) 20:41:31.66ID:uJ0GtlwQ0191名前は開発中のものです。
2014/02/04(火) 20:55:24.69ID:G5JzxpFK0192名前は開発中のものです。
2014/02/04(火) 21:09:48.44ID:uJ0GtlwQ0193名前は開発中のものです。
2014/02/06(木) 07:38:03.22ID:Mklm8P+v中村光一氏がDQ抜けたのが悔やまれる。
お色気コンテンツに憤慨していたエピソードは笑える。
0194名前は開発中のものです。
2014/02/06(木) 20:33:21.38ID:wgo5Jh7Q0195名前は開発中のものです。
2014/02/06(木) 21:01:16.01ID:YaLd/g6Z0196名前は開発中のものです。
2014/02/06(木) 21:10:32.33ID:wgo5Jh7Q0197名前は開発中のものです。
2014/02/09(日) 03:20:30.53ID:yNPMLa+Y0198名前は開発中のものです。
2014/02/09(日) 03:48:09.82ID:n/hHVigC0199名前は開発中のものです。
2014/02/09(日) 03:53:10.61ID:CEeCxVwx燃え尽きた印象があるな
一発屋というより、沢山あった弾を同じ場所に撃ち込んじゃった感じ
0200名前は開発中のものです。
2014/02/09(日) 04:22:56.68ID:eECi/LC1あの時代にスクランブルを完全移植した情熱の炎は、そう簡単には消えないさ!
俺は信じてるぜ!
0201名前は開発中のものです。
2014/02/09(日) 16:33:33.68ID:Om4RLWnjとりあえずminiMax法で作ろうとしており参考にしているサイトのURLは
http://hp.vector.co.jp/authors/VA015468/platina/algo/2_2.html
です。
このサイトの
for(最初の子節点の手; 未評価の子節点がある; 次の子節点に移る)
という部分を見る限り先に子節点がいくつあるのか調べておく必要があると思うのですが
その解釈でよろしいですか?
0202名前は開発中のものです。
2014/02/09(日) 16:43:02.64ID:c5g9RcWt先に子節点を調べなくてもできるけど
先に調べておかないと置けないにも拘わらず置くかどうかを計算するから無駄な計算が増えるし、バグで置いた場合に何処でバグが発生してるのか調べるのが大変になる
0203名前は開発中のものです。
2014/02/09(日) 16:50:59.29ID:Om4RLWnjありがとうございます。
先に子節点を調べることにします。
調べる上で、次の子節点を調べるときにその前に調べた子節点以外から探す方法が
よくわからないのですが、どのような実装を行えばいいでしょうか
0204名前は開発中のものです。
2014/02/10(月) 08:15:56.04ID:EeAxagpY再帰処理で実装するといいよ
0205名前は開発中のものです。
2014/02/10(月) 16:50:10.78ID:r9rJHs9vスタックとはどのようなものかはわかりますが、実装法などは全くわかりません。
二分木なら
typedef struct node_t{
typedef struct node_t *left;
typedef struct node_t *right;
int data;
}NODE;
のようにすればいいと思うのですが、探索となると多分木になると思うので
同じようには実装できませんよね?
0206名前は開発中のものです。
2014/02/10(月) 17:57:20.00ID:zYS9MiyXstruct node_t *child;
struct node_t *next;
int data;
}NODE;
0207名前は開発中のものです。
2014/02/10(月) 18:19:16.50ID:r9rJHs9vつまり二分木と同じ実装法で見方を変えるということですか?
0208名前は開発中のものです。
2014/02/10(月) 19:22:37.65ID:zYS9MiyX要件は、多分木であることと、ルートから葉に向かって再帰的に処理できること、でしょ?
その要件に足るようなデータ構造で自分の使いやすいものを選択すればいい
0209名前は開発中のものです。
2014/02/11(火) 10:42:36.42ID:MuB9VwbG横回転は綺麗に回るんですが、縦回転がY軸しか動かず変な動きになります
分かりやすく解説してるとこは無いですか?
0210名前は開発中のものです。
2014/02/11(火) 14:18:07.24ID:EVFbkSHBクォータニオンで球面線形補間すると
理論はよく分からないけど何故かうまくいくよ
0211名前は開発中のものです。
2014/02/11(火) 14:32:23.80ID:pu0dsTgx0212名前は開発中のものです。
2014/02/11(火) 22:12:14.10ID:sWtHnyX5ありがとう、ちょっと見てみたんですが、
私のコードは三角関数メインなので行列の理解が追いつきませんでした
根本のコードの変更も考えてみます
0213名前は開発中のものです。
2014/02/21(金) 22:16:42.52ID:WPj1YKPYどういう考え方で波を作れば船が上下したり傾いたりするでしょうか?
波を表すメッシュの頂点にベクトルを紐付けて、それを隣の頂点に伝搬する・・・
みたいな事は想像してるんですが、あんまりうまくないというか、
あまり効率的ではないですよね?
いい方法ないですか?
0214名前は開発中のものです。
2014/02/22(土) 05:41:07.36ID:zZnD13Ju2分探索木を自分で作らなくても、ライブラリにあるでしょ?
B-Tree(self-balancing search tree)平衡2分探索木
B+Tree、赤黒木など
キューやスタックも、ライブラリにあるでしょ?
優先度つきキュー(priority queue)はよく使うよ
詳細はWikipediaなどで、調べて
0215名前は開発中のものです。
2014/02/22(土) 10:17:30.51ID:YdhdLZfzなんちゃって水面は基本的にはそういう作り方だよ。バネダンパの二次元格子。
お船は、近傍の格子の頂点や面に反発させてどんぶらこさせればいいやという。
トライアル&エラーでパラメータ適当にいじって見た目の調整。おしまい
あ、リアル志向のゲームは何やってるのか知らないよ。学生時代に数値流体
やってたけど、あっちに凝り出すと際限がないからみんなどっかで折り合い
付けて端折ってそれっぽく見せてるだけだと思うよ
0216名前は開発中のものです。
2014/02/22(土) 10:56:40.26ID:4BDQmNHU0217名前は開発中のものです。
2014/02/22(土) 11:39:42.84ID:YdhdLZfzDX7以前の頃だとテクスチャを2枚用意してマルチテクスチャにして
UV値の操作で各々のテクスチャを交差するように移動させると水面ぽく
見せられるよー的なやり方が多かったけど、あれをハイトマップにも
使う感じかな?
0218名前は開発中のものです。
2014/02/27(木) 22:01:09.66ID:XfV+syCM0219名前は開発中のものです。
2014/02/28(金) 02:45:29.15ID:WKCAf0/q鏡を見てため息をつけばいいと思う
0220名前は開発中のものです。
2014/03/01(土) 15:31:28.07ID:xOOTC3SX0221名前は開発中のものです。
2014/03/01(土) 15:36:42.26ID:ckzLhO0U0222名前は開発中のものです。
2014/03/01(土) 17:29:52.27ID:P6ZwcTGw0223名前は開発中のものです。
2014/03/01(土) 17:49:25.00ID:ckzLhO0Uメンバ関数にポインタ変数を渡して…何でここでコンストラクタ??って思った
0224名前は開発中のものです。
2014/03/01(土) 23:00:27.16ID:B/y6lyvXメンバにポインタ持たせてもいいし、相手クラスを継承してしまうとか、
その数値が必要になる関数の引数に、ポインタや参照で渡したり、
数値そのものを引数で渡すだけでも、好きなのでいいと思うよ
0225名前は開発中のものです。
2014/03/02(日) 01:12:07.39ID:One/ooAB0226名前は開発中のものです。
2014/03/02(日) 18:14:52.71ID:eSGAMgB8foobarとかhogeみたいに意味のない文字なのがベストなんだけど
既存で使われているdatとかsavだと既になんらかの関連付けが
されてしまってる場合がありえるよね
0227名前は開発中のものです。
2014/03/02(日) 18:30:57.68ID:RKme8rWA0228名前は開発中のものです。
2014/03/02(日) 18:34:29.49ID:eSGAMgB80229名前は開発中のものです。
2014/03/02(日) 19:12:19.16ID:odwxDc0wデータのバックアップを取りたいことあるだろうし。
0230名前は開発中のものです。
2014/03/02(日) 19:15:46.36ID:Oh6AuFJG0231名前は開発中のものです。
2014/03/02(日) 19:21:49.81ID:XPJItCw90232名前は開発中のものです。
2014/03/02(日) 20:11:55.85ID:uIAHAPdgマルチスレッドってオブジェクトリストの更新中に
オブジェクトリストを参照できないんだから意味なくないですか?
どうしてマルチスレッドで動作が軽くなるんですか?
セマフォをオブジェクト単位でかけてたらセマフォの処理で余計重くなるのでは
0233名前は開発中のものです。
2014/03/02(日) 20:20:19.85ID:9+Akgo4p0234名前は開発中のものです。
2014/03/02(日) 20:21:15.86ID:Oac8ta12http://oxygine.org/
0235名前は開発中のものです。
2014/03/02(日) 20:51:20.45ID:uIAHAPdg画面のチラツキを抑えるほうが出てきて、出てきても申し訳程度の説明しかない・・・
http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2007/2007-12-14/
>◆ダブルバッファリング
> 整数を1つバッファに書き込むだけでロック/アンロックを行なっていると、 実際の並列処理では重たい。
> ロックの回数を減らすために、ダブルバッファリ ングと呼ばれる技術がよく使われる。読み手と書き手で別々にバッファをもうけ、1つのバッファの処理をしている間は、ロックを行なわない。
リストで1つのオブジェクトを更新してる間は「描画スレッドが使っちゃだめですよフラグ」でもたてるのか?
それを参照する時点でスレッドセーフじゃなさそうだけど
それともリスト内の全部のインスタンスのコピーを毎フレーム作るのか?
0236名前は開発中のものです。
2014/03/02(日) 20:59:31.72ID:uIAHAPdg0237名前は開発中のものです。
2014/03/02(日) 22:59:32.88ID:bJnQrcsZ0238名前は開発中のものです。
2014/03/02(日) 23:13:50.02ID:0kUNTeetBGM,効果音など
背景の処理、草や木が風でゆらゆらする
シェダー関係もそう
0239名前は開発中のものです。
2014/03/02(日) 23:15:24.40ID:YZ+wwGoZ・描画スレッドがAの状態を使用して描画している間、更新スレッドは
Aの状態をもとに更新後の状態をBに作成する。
・両方が完了したらAとBをスワップする
って方法かなぁ
>>232の図で言えば、Subスレッドが描画している間に
Mainスレッドがもう次のフレームの接触判定を処理し始めてる感じ
0240名前は開発中のものです。
2014/03/02(日) 23:23:34.37ID:bJnQrcsZなんで単純に出来ることを複雑にやろうとするんだ?
0241名前は開発中のものです。
2014/03/02(日) 23:31:43.29ID:Oh6AuFJG.binはlinuxの.exeって感じでデータっぽくない
0242名前は開発中のものです。
2014/03/02(日) 23:37:13.73ID:Oh6AuFJG面白そうだけど利用者ほとんどいないようだし、すぐに消えそうだな
cocos2dのほうが良いよ
0243名前は開発中のものです。
2014/03/02(日) 23:44:39.24ID:Oh6AuFJGそれって概念的には全てのインスタンスx2だけど、
描画スレッドは描画に関するデータ(それも画面内に入るもの)だけあれば良いから
実際には必要なメモリ量を削った実装で実現できるな
0244239
2014/03/03(月) 00:29:47.75ID:+ppeC4rH確かにそうだ
そして多分それが>>240が言っている
「計算したデータを描画用のバッファに積んで、描画処理に引き渡」す
ってのに近いのかも
この辺で思ったんだが、もしDirectX11を生で叩いてるなら
DeferredContextとか使うといいのかな

>>239
スカラだけならともかく毎フレーム描画に必要な情報全てをnewするのか?
>>239
描画用のバッファを積む時にスレッドぶつかるかもしれないって話では?
class aiueo{
private:
Position* position;
Position* drawPosition;
public:
void func(){
position->setX(position->getX+1);
Position* tmp=position;
position = drawPosition;
drawPosition = tmp;
}
void draw(){
image.draw(drawPosition);
}
};
0246名前は開発中のものです。
2014/03/03(月) 07:13:32.62ID:mjyyGJWK引き渡したら描画を描画スレッドにやらせて、計算スレッドは次の計算に入ればいい。
なんで単純で簡単なことを複雑に考えるのか、さっぱり理解できない。
そもそも描画順序などを考えると、座標がすべて確定した後で無ければ、
描画処理なんて出来ないのに、なんで計算直後にチマチマ描画しようという発想になってるんだ?
毎フレームnewとかも、嫌なら最初からある程度の領域を作っておけばいいだけの話で、
そんな簡単に解決できるどうでもいいことをイチイチ聞く意味が分からない。
なにこの思考能力の欠如?
0247名前は開発中のものです。
2014/03/03(月) 07:44:19.21ID:+ppeC4rH
http://gyazo.com/7984315b649ca2378a5b63989ada2874.png
図で確認するとこんな感じ?
ロックの仕方がよくわからんけど、
メインスレッド側のバッファは描画スレッドに必要な情報(頂点とか)いらないからトントンになるのかな
そうすると、毎フレームnewするより保持してたほうが楽そう
描画スレッドはモデルの頂点の展開とかやらずに文字通りZバッファに登録するだけだったりする?
0249名前は開発中のものです。
2014/03/03(月) 14:38:46.71ID:7XSFdIT2意味不明
0250名前は開発中のものです。
2014/03/03(月) 20:28:03.25ID:+ppeC4rH使ってるライブラリ教えて
0251名前は開発中のものです。
2014/03/04(火) 00:42:30.15ID:tv4RC6nv処理の分割しないと複数コアの性能いかせないよね
>>238以外にも分割出来るところはあるんじゃないの
AIなんかのフレームと分けられる箇所が効果的だとは思うんだが
0252名前は開発中のものです。
2014/03/04(火) 00:54:00.93ID:Tkd6LlXd君はレベルが低すぎる。基礎的なことすら理解していないようだから
身の丈に合った技術で制作するべきだ
0253名前は開発中のものです。
2014/03/04(火) 01:01:46.35ID:Tkd6LlXdゲームロジックについてはゲームの性質次第だから汎用的な議論はできん

>>250
DXライブラリです
0255名前は開発中のものです。
2014/03/04(火) 01:22:03.26ID:eUCtnBamそんなこと言わないで><
0256名前は開発中のものです。
2014/03/04(火) 01:45:49.24ID:MGr4iOMf0257名前は開発中のものです。
2014/03/04(火) 03:19:20.41ID:NSoGUl2dバグ生産しまくるのは得意みたいだがw
無視するに限るよ(ry
0258名前は開発中のものです。
2014/03/04(火) 03:24:44.21ID:6r8+3FgW満足するならなw
0259名前は開発中のものです。
2014/03/04(火) 09:14:16.41ID:Tkd6LlXd無理に背伸びした結果が「文字通りZバッファに登録するだけだったりする?」
格好ばかりつけて内容がなさすぎだろ
上で新技術OpenMPとかドヤってたやつといい、もう少し自惚れを抑えて
真摯な姿勢で学ばんと時間の無駄だよ
0260名前は開発中のものです。
2014/03/04(火) 09:15:50.51ID:A1Dcjr5j明らかにZバッファが何か分かってないだろ。
0261名前は開発中のものです。
2014/03/04(火) 12:24:51.64ID:VEfOUnzLZソートの機能があるライブラリって訳じゃ無いのね

>>261
アルファ値がある面だけZソートして、不透明な面の後から描画しています。
マルチスレッドの基礎はわかりませんが、
勉強目的で実装してみようかなと考えて、疑問点があったので質問しました。
質問の内容に戻りたいのですが、
メインスレッドではオブジェクトの座標だけ計算して、
描画スレッドでオブジェクトの座標からモデルの頂点等を展開すると
メインスレッドと描画スレッドが共有する値が少なくなっていいかなと考えたんですが、
実際に使われているスタンダードな方法とかあれば教えていただけると助かります。
0263名前は開発中のものです。
2014/03/05(水) 00:56:58.44ID:vvepHaRA....Image* image; // D3DMesh mesh でもFontSprite fontでもいい
....Rect bounds;
....Rect src;
....double angle;
};
struct Layer {
....int usingLength = 0;
....Chain<Node> chain; // std::list<Node>
/*
Chain<Node2DImage> chain1;
Chain<Node2DFont> chain2;
Chain<Node3DModel> chain3;
*/
....bool isUpdate = false;
};
0264名前は開発中のものです。
2014/03/05(水) 00:58:26.26ID:vvepHaRALayer g_layers[3]; // instance;
Layer *g_pFront = &g_layers[0];
Layer *g_pSwap = &g_layers[1];
Layer *g_pBack = &g_layers[2];
void threadFront(){ // GUI Thread = main thread
....while(true){
........g_sync.lock();
........if(g_pSwap->isUpdate == true){ // ロジック側がスワップした
............Layer *swap = g_pFront;
............g_pFront = g_pSwap;
............g_pSwap = swap;
............g_pSwap = false;
........}
........g_sync.unlock();
........render(g_pFront);
....}
}
0265名前は開発中のものです。
2014/03/05(水) 01:01:42.52ID:vvepHaRA....while(true){
........g_sync.lock();
........if(g_pSwap->isUpdate == false){ // 描画側がスワップした
............Layer *swap = g_pBack;
............g_pBack = g_pSwap;
............g_pSwap = swap;
............g_pSwap = true;
........}
........g_sync.unlock();
........update(g_pBack);
....}
}
class Scene {
public:
....virtual void update = null;
....virtual void render() = null;
}
0266名前は開発中のものです。
2014/03/05(水) 01:07:10.79ID:vvepHaRA....Sprite sprite;
public:
....void update(){
........sprite.x++;
....}
....void render(){
........sprite.render(); // g_pBackにデータを渡す
....}
}
Scene* g_pScene = new Game();
// Logic Thread update()
void update(Layer* layer){
....g_pScene->update();
....g_pScene->render();
}
問題は、GUIスレッドしかテクスチャーとかの生成と破棄ができないのだが、
ロジック側の要請をキューにしてメッセージパッシングするのは
少し複雑な実装になるこった。
0267名前は開発中のものです。
2014/03/05(水) 16:23:12.96ID:x8H/gaMj0268名前は開発中のものです。
2014/03/05(水) 20:45:55.74ID:6x2/6ZGn0269名前は開発中のものです。
2014/03/05(水) 21:47:30.12ID:6x2/6ZGnhttp://www.kumikomi.net/archives/2005/02/02multi.php?page=1
組み込みのサイトだけど基礎だからゲーム製作にも役立つかな
まあこれ見ても具体的な実装なんてさっぱりわからんけど
0270名前は開発中のものです。
2014/03/05(水) 22:22:10.31ID:vvepHaRA0271名前は開発中のものです。
2014/03/05(水) 22:28:07.13ID:xpm2EzP60272名前は開発中のものです。
2014/03/06(木) 22:54:49.68ID:wXpbFvTOミューテックスのロックとアンロックが一行でできる
0273名前は開発中のものです。
2014/03/06(木) 23:58:17.76ID:g6URqktg書いてくれて嬉しいですが、処理の流れが見えないですね・・・
swapは裏画面と表画面を入れ替えてるというのはわかるんですが
ロジック側も入れ替えるんですか?
layerとかchainとか何を指してるのかイマイチわからないです・・・
g_sync.lockというのはロック出来るまで待機すんるでしょうか?
そうするといい感じに交互に処理できそう?
■ このスレッドは過去ログ倉庫に格納されています