こんにちは、土鳩といいます。
前回(昨日なのですが…)3D描画の時に消失点を指定できる
CreateViewportMatrix関数とSetTransformToViewport関数を教えていただきました。
しかし、今日これをサンプル(龍神録プログラミングの館59章より)で試そうとしたのですが、
うまくいきませんでした。
void move_view(){
float X=640.f, Y=480.f; // ウィンドウのサイズ
float Xd=-110.f, Yd=0.f ; // 消失点の移動量
MATRIX mat;
CreateViewportMatrix(&mat, X/2.f+Xd, Y/2.f+Yd, X, Y);
SetTransformToViewport(&mat);
}
これをメインループの直前にいれれば、消失点が左に110動くはずなんですが…
自分が「ここだ」と思っているメインループの場所が違うのでしょうか…?
初歩的な問題なのですが、どなたかわかる方は助言,アドバイスの方よろしくお願いします。
3D描画時のメインループについて.
Re:3D描画時のメインループについて.
>うまくいきませんでした
具体的には?
ビルドが通らなかった、とかですか?
>自分が「ここだ」と思っているメインループの場所が違うのでしょうか…?
その可能性はありますね。
ビルドが通っていたと仮定して、ありがちなのが DxLib_Initよりも前だった、とか。
で、どこにその move_view()を置いたのですか?
Re:3D描画時のメインループについて.
Justyさん、返答ありがとうございます。
>ビルドが通らなかった、とかですか?
はい、ビルドの時にエラーが起きて、編集する前の結果しか出ませんでした。
>どこにその move_view()を置いたのですか?
→ここです
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,…
確かに今見返してみれば初期化は何回もする必要ないですよね…
>ビルドが通らなかった、とかですか?
はい、ビルドの時にエラーが起きて、編集する前の結果しか出ませんでした。
>どこにその move_view()を置いたのですか?
→ここです
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,…
確かに今見返してみれば初期化は何回もする必要ないですよね…
Re:3D描画時のメインループについて.
>→ここです
ここ・・というのは関数の外のような気がしますが・・?
そこに関数を書いたということでしょうか?
そうならば、関数の呼び出しはどこで行っていますか?
ここ・・というのは関数の外のような気がしますが・・?
そこに関数を書いたということでしょうか?
そうならば、関数の呼び出しはどこで行っていますか?
Re:3D描画時のメインループについて.
>ビルドの時にエラーが起きて
具体的にどういうエラーになったのですか?
エラーコードと内容、行番号、その周辺のコード等々の詳細情報も含めて書かないと、
読み手側には何が起きているのか伝わらないです。
特に掲示板ですと、レスが帰ってくるまでラグがあるので、
状況を把握する為だけのやりとりだけで無駄に時間が過ぎていってしまいますよ。
説明が難しいのであれば、状況を再現できるコードをアップすれば、
何かわかるかもしれません。
Re:3D描画時のメインループについて.
…前の書き込みでいろいろと不手際があったようです…
ご迷惑をかけてすみません…
>ビルドの時にエラーが起きて
その時に出たエラーの内容というのが、
「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
とのことでした。
そりゃあれだけむちゃくちゃな文の入れ方してればエラーも起きますよねぇ…。
>管理人様
管理人様の、「関数の呼び出し」という言葉でつっかかるものがあり、
最初から見返してみれば、「void ~ (){}」はあくまで定義するだけで、
その後メインループのなかに「~()」を入れないと使えないということに
気づきました…。
ということで、ここに入れればいいのだと思いますが、どうでしょうか(汗)??
*Ob2 = t;
}
void move_view(){
float X=640.f, Y=480.f;
…
~中略~
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
ini();
move_view();
ご迷惑をかけてすみません…
>ビルドの時にエラーが起きて
その時に出たエラーの内容というのが、
「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
とのことでした。
そりゃあれだけむちゃくちゃな文の入れ方してればエラーも起きますよねぇ…。
>管理人様
管理人様の、「関数の呼び出し」という言葉でつっかかるものがあり、
最初から見返してみれば、「void ~ (){}」はあくまで定義するだけで、
その後メインループのなかに「~()」を入れないと使えないということに
気づきました…。
ということで、ここに入れればいいのだと思いますが、どうでしょうか(汗)??
*Ob2 = t;
}
void move_view(){
float X=640.f, Y=480.f;
…
~中略~
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
ini();
move_view();
Re:3D描画時のメインループについて.
>「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
>とのことでした。
なるほど、そういうことでしたか。
つまり、土鳩さんの方ではエラーの内容を見ていないわけですね。
環境が書かれていませんが、多分 VisualStudioだと思いますので、
それを前提で話を進めます。
まず、「出力ウインドウ」を表示してください。
画面内になければ、メニュー「表示」の中にある「出力ウインドウ」を選択すれば出てきます。
出力ウインドウの「出力元の表示」が「ビルド」になっていることを確認し、
実際にビルドを行ってください。
これで、出てきたメッセージの中に
例えば、
[color=#d0d0ff" face="monospace] e:\xxx\xx\xx\xx\test.cpp(22) : error C2143: 構文エラー : ';' が '}' の前にありません[/color]
のような感じでエラーが発生したソースパス、エラーコードや、エラーの内容が
表示されているはずです。
ひとまずこのメッセージを解析してエラーを取り除いてみてください。
それでも判らなければ、そのソースコードと一緒にそのエラーメッセージを
添えて再質問をしてください。
>ここに入れればいいのだと思いますが、どうでしょうか(汗)??
多分それでいいと思います。
Re:3D描画時のメインループについて.
Justyさん、管理人様、ありがとうございました。
これからエラー等の質問をする際には中身まで詳しく調べてからそれを
伝えるようにします。
それと、ビルドエラーの方は正しく関数を使うように書き込んだら自然と治ってしまいました…。
もうこんな簡単なことに引っかからないよう
もっと勉強しなくては、と改めて実感した限りです…
まだまだC言語に関してはひよっこなので、また迷惑を掛けてしまうかもしれませんが、
そのときはまたよろしくお願いいたします。
今回は本当に、ありがとうございました。
これからエラー等の質問をする際には中身まで詳しく調べてからそれを
伝えるようにします。
それと、ビルドエラーの方は正しく関数を使うように書き込んだら自然と治ってしまいました…。
もうこんな簡単なことに引っかからないよう
もっと勉強しなくては、と改めて実感した限りです…
まだまだC言語に関してはひよっこなので、また迷惑を掛けてしまうかもしれませんが、
そのときはまたよろしくお願いいたします。
今回は本当に、ありがとうございました。