空間に画像を描画
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
カメラのビュー行列を行列演算して好きな方向に回転させる必要があります。
その行列で絵を貼ったポリゴン板を表示させることで可能です。
その行列で絵を貼ったポリゴン板を表示させることで可能です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
最初にそういって貰えれば・・・。ヒューガ さんが書きました:えーと画像データだけで壁作ったり地面作ったりということなのですが・・・
地面や壁の生成は、DrawPolygon3D()やDrawPolygonIndexed3D()で出来ますが、画像分割というか画像の貼り付けの位置調整はUVマッピングで行います。
「DXライブラリ置き場 3D関係関数リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... html#R14N7
「DXライブラリ置き場 3D関係関数リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... html#R14N8
まぁ勉強になるんでやってみてください。
私はモデラーで作ったほうが楽だと思いますが地形を自動生成する場合はこの方法は避けて通れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
私は3Dでは無いと思います。ヒューガ さんが書きました:y座標0.0のところに平面的にひろげるだけです。
画像も元の大きさが縦横数千ピクセルなので分割しないとまずいです。
これ以外の方法はないのですか?
GPUの仕様上は数千ピクセルは辛いでしょうし、2の累乗数でないのもマズイです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
ヒューガ
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
spinrtfでファイル名文字列を作れば良いのではないでしょうか。
C++だとsstreamのstd::ostringstreamも使えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
ヒューガ
Re: 空間に画像を描画
#include "DxLib.h"
#include <stdio.h>
#define GROUND_MAX 100
int map[100];
int groundimg[100];
void map_sys(){
for(int i=0;i<GROUND_MAX;i++){
MV1SetPosition(map[i],VGet(200*(i%10),0.0f,200*(9-i/10)));
}
}
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ){
ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
char FileName[10];
map[0]=MV1LoadModel("./ground/ground.mqo");
for(int i=1;i<GROUND_MAX;i++){
map[i]=MV1DuplicateModel(map[0]);
}
for(int i=0;i<GROUND_MAX;i++){
sprintf(FileName,"./ground/mapimg_%03d",i+1);
groundimg[i]=LoadGraph(FileName);
}
while( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {
map_sys();
for(int i=0;i<GROUND_MAX;i++){
MV1SetTextureGraphHandle(map[i],0,groundimg[i],FALSE);
MV1DrawModel(map[i]);
}
SetCameraPositionAndTarget_UpVecY(VGet(0.0f,100.0f,-300.0f),VGet(0.0f,0.0f,0.0f));
}
DxLib_End();
return 0;
}あと終了時に警告がでるのですがどうしてでしょう?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
とりあえず、文字列配列ですが理解されているか心配になりました。
char FileName[10]; ナル文字を合わせて10文字までしか格納できません。
sprintf(FileName,"./ground/mapimg_%03d",i+1); ファイル名はパスを合わせて10文字以上有ると思います。
【追記】
MV1DuplicateModelするとテクスチャは変更できない気がします。
char FileName[10]; ナル文字を合わせて10文字までしか格納できません。
sprintf(FileName,"./ground/mapimg_%03d",i+1); ファイル名はパスを合わせて10文字以上有ると思います。
【追記】
MV1DuplicateModelするとテクスチャは変更できない気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
1つの場合だけでどうなるか確認して下さい。ヒューガ さんが書きました:1桁ずれてました。
これで警告は出ないようになりましたがテクスチャはいまだに変わりません・・・
問題があれば要素を減らして確認することはデバッグの基礎テクニックです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
デバッグのために物事を単純化するのですのですから、そういう事です。ヒューガ さんが書きました:1つの場合だけでとは板1枚のみでどうなるかということでしょうか?
うまく言ったら2つにしてみます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 空間に画像を描画
Log.txtにエラーが出ていないか確認して下さい。ヒューガ さんが書きました:テクスチャが変わっていません・・・
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
ヒューガ
Re: 空間に画像を描画
拡張子が抜けてました。
ありがとうございました。
#include "DxLib.h"
#include <stdio.h>
#define GROUND_MAX 100
int map[GROUND_MAX];
int groundimg[GROUND_MAX];
void map_sys(){
for(int i=0;i<GROUND_MAX;i++){
MV1SetPosition(map[i],VGet(200*(i%10),0.0f,200*(9-i/10)));
}
}
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ){
ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
char FileName[100];
map[0]=MV1LoadModel("./ground/ground.mqo");
for(int i=1;i<GROUND_MAX;i++){
map[i]=MV1DuplicateModel(map[0]);
}
for(int i=0;i<GROUND_MAX;i++){
sprintf(FileName,"./ground/mapimg_%03d.png",i+1);
groundimg[i]=LoadGraph(FileName);
}
while( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {
map_sys();
for(int i=0;i<GROUND_MAX;i++){
MV1SetTextureGraphHandle(map[i],0,groundimg[i],FALSE);
MV1DrawModel(map[i]);
}
SetCameraPositionAndTarget_UpVecY(VGet(1000.0f,100.0f,-300.0f),VGet(1000.0f,0.0f,0.0f));
}
DxLib_End();
return 0;
}