田中です.
以前楕円を回転させて描画する方法について質問させていただきました.
ありがとうございました.
またDXライブラリについて質問です.
DXライブラリを用いて描画する際に,
・ 画面の左上を原点
・ 右方向がx軸正方向
・ 下方向がy軸正方向
というルールがあると思うのですが,これを
・ 画面の左下を原点
・ 右方向がx軸正方向
・ 上方向がy軸正方向
という風に設定変更する関数というのはございませんか?
描画関数のy座標を全て,
(画面の高さーy座標)
と書き換えれば良いと思うのですが,
いちいちそうするのも大変なので何か知恵をお借りできないかと思い質問させて頂きました.
よろしくお願い致します.
DXライブラリ,座標軸の反転
Re: DXライブラリ,座標軸の反転
とりあえずバッファに描画して反転する方法を試してみましたが、これは文字がひっくり返るので失敗です。
とりあえず、使用している描画関数のラッパを作るという案を提示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1) return -1;//初期化と裏画面化
int hDrawBuf=MakeScreen(640,480,FALSE);
SetDrawScreen( hDrawBuf );
while(ProcessMessage()==0 && ClearDrawScreen()==0) {
DrawString(100,100,"(100,100)",GetColor(255,255,255));
DrawString(300,100,"(300,100)",GetColor(255,255,255));
DrawString(100,300,"(100,300)",GetColor(255,255,255));
DrawString(300,300,"(300,300)",GetColor(255,255,255));
SetDrawScreen( DX_SCREEN_BACK );
DrawExtendGraph(0,480,640,0,hDrawBuf,FALSE);
ScreenFlip();
SetDrawScreen( hDrawBuf );
}
DxLib_End();
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
田中
Re: DXライブラリ,座標軸の反転
またまたみけ様,ありがとうございます.
>とりあえず、使用している描画関数のラッパを作るという案を提示します。
なるほど!ラッパというのググったら出てきました.
こんな感じでDrawLineやDrawCircleを無事に反転させて描画することが出来るようになりました.
ただ以前作成していただいた,DrawOval2を反転させてもなんかうまくいかないです(´Д⊂
angleが悪さしているのかよくわからないんですけど,90°?回転しちゃいます.
どうしたらいいでしょうか?
失敗してるやつ↓
>とりあえず、使用している描画関数のラッパを作るという案を提示します。
なるほど!ラッパというのググったら出てきました.
int DrawLine2(int x1, int y1, int x2, int y2,int Color, int Thickness = 1 ){
DrawLine(x1,-y1+screen_height,x2,-y2+screen_height,Color,Thickness);
return 0;
}
ただ以前作成していただいた,DrawOval2を反転させてもなんかうまくいかないです(´Д⊂
angleが悪さしているのかよくわからないんですけど,90°?回転しちゃいます.
どうしたらいいでしょうか?
int DrawOval2(int cx,int cy,int rx,int ry,int color,float angle,int thickness=1) {
float sine,cosine;
const int BUNKATU=512;
float px,py;
sine=sin(angle);
cosine=cos(angle);
px=cosine*rx;py=sine*rx;
if(rx<0)rx=-rx;
if(ry<0)ry=-ry;
for(int i=1;i<=BUNKATU;i++) {
float nowangle=i*2.0*DX_PI_F/BUNKATU;
float rawx,rawy;
float x,y;
rawx=rx*cos(nowangle);
rawy=ry*sin(nowangle);
x=cosine*rawx-sine*rawy;
y=sine*rawx+cosine*rawy;
DrawLine(cx+(int)px,cy+(int)py,cx+(int)x,cy+(int)y,color,thickness);
px=x;py=y;
}
// エラーチェック省略
return 0;
}
Re: DXライブラリ,座標軸の反転
int DrawOval3(int cx,int cy,int rx,int ry,int color,float angle,int thickness=1){
DrawOval2(cx,screen_height-cy,rx,ry,color,-angle,thickness);
return 0;
}(未検証です。失敗したらごめんなさい)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)