東方の3D背景の作り方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
レッドリ

東方の3D背景の作り方

#1

投稿記事 by レッドリ » 15年前

はじめまして、DXライブラリでVC++EE2008を使って東方っぽい3Dの背景を作っています。

あれはDrawModiBillboard3DやDrawModiBillboard3Dを使えばできそうかと思い試してみましたが、
どうやらZバッファ(Zソート?)を使ったり、奥の部分をαブレンドしたり
しないとできなさそうだと思いました。

このサイトの3D背景を作ってみようというのを見て、
ポリゴンというもので奥行きや、αブレンドを表現していることを知りました。
ポリゴン系の関数を勉強した方がいいのでしょうか?

自分は以前、ここの掲示板で
管理人さんが「3D背景を作ってみようの項目は内容が古いので公式リファレンスを見て下さい」
と書かれている記事を見たことがあるので、その点も気になります。
ポリゴン系の関数じゃなくても再現可能ということでしょうか?

DrawModiBillboard3Dで見た目がそれっぽくなるので、簡単かと思い、
使ってみたコードですが、DrawModiBillboard3Dでは限界に感じました。
#include "DxLib.h"

int G[3] ;
float a=0;
int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
        else                            GetHitKeyStateAll_InputKey=0;
    }
    return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
    G[0] = LoadGraph( "back/0/00.png" ) ;
    G[1] = LoadGraph( "board/board.png" ) ;
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理          ↑画面をクリア           ↑入力状態を保存       ↑ESCが押されていない

    // 3D空間上に画像を描画
    DrawModiBillboard3D( VGet( 220.0f, a, a ),
        -60.0f,  200.0f,
         60.0f,  200.0f,
         460.0f, -280.0f,
        -460.0f, -280.0f, G[0], TRUE ) ;
    a++;
    DrawGraph( 0 , 0 , G[1] , TRUE ) ;
    DrawFormatString(0,0,GetColor(255,255,255)," %d",a);


        ScreenFlip();
    }

    DxLib_End();
    return 0;
}



画像

Ma

Re:東方の3D背景の作り方

#2

投稿記事 by Ma » 15年前

最初に: 素人意見です。参考までに。

いろんな実装方法があるんじゃないかな?
ここの管理人さんがやっているように、一枚一枚計算していってもいいですし、
それこそ、mqoデータにしちゃってスクロールだけですむようにするとか、、、
他があまりおもいつきませんが・・・w

結局、一番楽なのはmqoデータでスクロールじゃないかな。
そうすれば、どんな形だろうが他のソフトで作ってしまえばいいだけだから、
この方法の長所はプログラム側がかなり楽になるところかな。
しいていえば、演出を増やすためにカメラを動的に動かすようなスクリプトとか作らないといけないかもしれないけれどね。

mqo読み込み、表示については、公式リファレンスを参照されたし。

レッドリ

Re:東方の3D背景の作り方

#3

投稿記事 by レッドリ » 15年前

なるほど…
mqo読み込み、表示については分かりました。
プログラムもどれを使えばいいか分かりました。
それで、pngをmqoデータに変換ってできるのでしょうか?
検索で出てこなかったです。
やはりメタセコとかいうので作成していくのでしょうか?

地霊殿の1面っぽい岩の地面の1枚絵を作ったので
後はそれをスクロールさせたいので
これをmqoに変換できればいい感じになりそうなのですが…

Ma

Re:東方の3D背景の作り方

#4

投稿記事 by Ma » 15年前

単純に地面(画像の自由変形)を描画したいだけなら、mqoを使わずに、ここの講座にある3D背景の方法をとったほうがいいです。
私が推奨したmqoをつかう、というのは、マジな3D、つまり塔があったり、3Dな木があったり3Dな岩があったりした場合です。


>pngをmqoデータに変換ってできるのでしょうか?
そもそもmqoとは何かを理解してください。
mqoは頂点情報が含まれている三次元のデータです。(詳しい人はもっと詳しく教えてくれるでしょうが)
三次元の空間を記録するデータです。

pngの画像をテクスチャとしてmqoのポリゴンに表示することはできますが、直接的な意味での変換は考えられません。
(ピクセル情報から3次元データを作るってのもできるでしょうが、目的にそぐわないので除外。)

mqoを作るには、メタセコイアを使うのをおすすめします。
mqoを作る方法の詳細は、メタセコイアの講座等を参照するといいとおもいますよ。 画像

レッドリ

Re:東方の3D背景の作り方

#5

投稿記事 by レッドリ » 15年前

地霊殿っぽくできました!
ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る