HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0813
SPK (投稿者削除)12未解決


SPK

リンク

2012/8/13(Mon) 20:01:47|NO.48488

この記事は投稿者により削除されました。
2012/8/15(Wed) 13:22:30



この記事に返信する


匿名希望

リンク

2012/8/13(Mon) 20:27:37|NO.48489

2D画像を回転させるとギザギザになるのは当たり前のことなので諦めましょう
としか言えません



YSR

リンク

2012/8/13(Mon) 20:44:28|NO.48490

>cvrotate
サンプル読もうぜ……回転後の座標の計算とかはググったら分かるかと。あ、
>ギザギザ
はrotateで回したらの話な



ミント

リンク

2012/8/13(Mon) 21:15:37|NO.48492

参考になるかどうかわかりませんが、だいぶ前にやったソース つ
ちなみにYSRさんが言っているとおりサンプルソース参考になりますよー。
ってかそれがこれのはず・・・多分!


#include "a2d.hsp" ;Artlet2Dを使います宣言 screen 0,640,480 ;画像ファイルから仮想イメージを作成 alCreateImageByFile 1,"結晶.png" ;画像ファイルの幅、高さを取得 alGetFileWidth "結晶.png", sizex, sizey ;回転座標 MY_x = 100 ;X MY_y = 100 ;Y ;***************メインループ************ *メイン redraw 0 : color : boxf ;***************カウンター************** color 255,255,255 pos 0,0 : mes "ragの数 " + R_ight ;*************************************** ;仮想イメージを作成 alCreateImage 2 ;回転用のスクリーンを用意 ;座標変換パラメータを設定 (回転) alTransModeRotateAt R_ight, MY_x, MY_y ;回転角度,回転の中心X,回転の中心Y ;回転させてコピー alCopyImageToImage 1,2, MY_x - (sizex / 2), MY_y - (sizey / 2) ;画面にコピー alCopyImageToScreen 2,0 R_ight += 1 ;右回転 redraw : await 1 goto *メイン



SPK

リンク

2012/8/13(Mon) 21:57:33|NO.48494

ミントさんのを元に、ソースを改造しました。しかし、黒の車に見立てたやつしか表示されません。
ソースのせておきます。

#include "a2d.hsp" mapx=1000;マップの大きさX mapy=1000;マップの大きさY buffer 1,mapx,mapy //外枠 color 200,150,100 boxf 10,10,mapx-10,mapy-10;外 color 255,255,255 boxf 20,20,mapx-20,mapy-20;内 //--- screen 0,800,600 title "CarSim" posx=0 posy=0 r=0.0 x = 100 ;X y = 100 ;Y gmode 0,mapx,mapy repeat;メインループ redraw 0 color 255,255,255 boxf alCreateImage 2; getkey n,38 getkey e,39 getkey s,40 getkey w,37 if n=1:posy++;前スイッチ if s=1:posy--;後ろスイッチ if e=1:r-=0.05;右スイッチ if w=1:r+=0.05;左スイッチ pos posx,posy //gcopy 2,0,0,mapx,mapy alTransModeRotateAt r, x, y alCopyImageToImage 1,2,x-(mapx/2),y-(mapy/2) alCopyImageToScreen 2,0 color boxf 380,350,420,420 redraw 1 await 2 loop
どこか間違っているところがあれば教えてください。よろしくお願いします。



mamo

リンク

2012/8/14(Tue) 07:15:13|NO.48497

・現状ではImage,2に何も描画されていない
・alCopyScreenToImageでbuffer 1をImage,2へコピーする必要がある



SPK

リンク

2012/8/14(Tue) 12:09:27|NO.48500

mamoさん、ありがとうございます。ギザギザじゃなくてとてもうれしいです。
しかし、回転の中心(xとy)を車の位置にするにはどうすればいいんですかね?
これは完全に回転とかけ離れていると思うのですが、求め方を教えて頂けませんか?



kanahiron

リンク

2012/8/14(Tue) 23:56:17|NO.48528

畜生 データ消えた
よく見てませんでしたよ ええ
NO.48526はスパムですので注意



てれてれ

リンク

2012/8/15(Wed) 00:12:30|NO.48532

まあスパムでは無いということは置いといて、どちらにせよ悪意のある書き込みですね。

このIPアドレスのユーザーの書き込みには今後注意した方が良さそうです。
もすこっと
IPアドレス 114.159.105.191
ホスト名 p2191-ipngn201yosida.nagano.ocn.ne.jp



晩御飯

リンク

2012/8/15(Wed) 00:58:43|NO.48538

画像の中心が0,0になるように移動、回転、移動させた分だけ戻す



暇人

リンク

2012/8/15(Wed) 11:17:42|NO.48555

車の位置をalTransModeRotateAtのpx,pyに設定すれば良い

#include "a2d.hsp" mapx=1000;マップの大きさX mapy=1000;マップの大きさY buffer 1,mapx,mapy //外枠 color 200,150,100 boxf 10,10,mapx-10,mapy-10;外 color 255,255,200 boxf 20,20,mapx-20,mapy-20;内 color 100,200,255 font "MS 明朝",300,17 pos 100,100 mes " HSP\n 回転\nテスト" alCreateImage 1,mapx,mapy; alCopyScreenToImage 1,1,0,0,mapx,mapy,0,0 //--- winx=400 winy=400 x = winx/2 ;X//回転の中心 y = winy-100 ;Y screen 0,winx,winy posx=double(mapx-winx)//マップ上の座標(コピー元左上の座標) posy=double(mapy-winy) r=0.0 alCreateImage 2,winx+200,winy+200//回転処理用のバッファを大きめに確保(回転すると角の部分が足りなくなる) repeat;メインループ redraw 0 color 255,255,255 ;boxf getkey n,38 getkey e,39 getkey s,40 getkey w,37 if n=1:sy+2;前スイッチ if s=1:sy-2;後ろスイッチ if e=1:r-=0.01;右スイッチ if w=1:r+=0.01;左スイッチ posx-=sin(r)*sy//回転後の移動位置 posy-=cos(r)*sy sy=0 ;alCreateImage 2,winx+200,winy+200//alCopyが重いから画像クリア関係は今回省略 alTransModeRotateAt rad2deg(r), x+100, y+100//大きめに確保した半分を加算(画面の中心じゃない場合向きによって足りなくなるが・・・) alCopyImageToImage 1,2,0,0,winx+200,winy+200,posx-100,posy-100 alCopyImageToScreen 2,0,0,0,winx,winy,100,100 color boxf x-20,y-50,x+20,y+20 pos x-100,y-120 mes strf("x=%d y=%d コピー元左上",posx,posy) mes strf("%.2f度",rad2deg(r)) mes strf("x=%d y=%d マップバッファ回転の中心",posx+x,posy+y) redraw 1 await 15 loop
alTransModeRotateAtは綺麗だけど回転コピー後にHSP側にコピーの必要があるから
ウィンドウのサイズによって凄く重くなる・・・


gsquareは綺麗じゃないけど、その分軽い
コピー元座標を回転できるから回転後のサイズを気にしなくて良い

rsizx=256//回転画像の分割サイズ rsizy=256 mapx=2000;マップの大きさX mapy=2000;マップの大きさY buffer 1,mapx+rsizx*2,mapy+rsizy*2//gsquareのコピー元が範囲外になると歪むので上下左右1分割分確保 //外枠 color 200,150,100 boxf rsizx+10,rsizy+10,rsizx+mapx-10,rsizy+mapy-10;外 color 255,200,255 boxf rsizx+20,rsizy+20,rsizx+mapx-20,rsizy+mapy-20;内 //--- color 100,200,255 font "MS 明朝",600,17 pos rsizx+100,rsizy+100 mes " HSP\n 回転\nテスト" wsx=800 wsy=600 screen 0,wsx,wsy posx=double(mapx+rsizx-100)//マップバッファ上の座標 posy=double(mapy+rsizy-100) r=0.0 x = 400 ;X//回転の中心(画面上の座標) y = 400 ;Y rx=wsx/rsizx+((wsx\rsizx)>0) ry=wsy/rsizy+((wsy\rsizy)>0) repeat;メインループ redraw 0 getkey n,38 getkey e,39 getkey s,40 getkey w,37 if n=1:sy=2;前スイッチ if s=1:sy=-2;後ろスイッチ if e=1:r+=0.01 if w=1:r-=0.01 rc=cos(r) rs=sin(r) posx+=rs*sy//回転後の移動位置 posy-=rc*sy sy=0 repeat rx*ry wx=rsizx*(cnt\rx) hy=rsizy*(cnt/rx) //コピー先座標は回転させない正位置 p2=wx,wx+rsizx,wx+rsizx,wx p3=hy,hy,hy+rsizy,hy+rsizy //コピー元の矩形座標を回転させてコピー p4=int(rc*(wx-x)-rs*(hy-y))+posx p4(1)=int(rc*(wx+rsizx-x)-rs*(hy-y))+posx p4(2)=int(rc*(wx+rsizx-x)-rs*(hy+rsizy-y))+posx p4(3)=int(rc*(wx-x)-rs*(hy+rsizy-y))+posx p5=int(rc*(hy-y)+rs*(wx-x))+posy p5(1)=int(rc*(hy-y)+rs*(wx+rsizx-x))+posy p5(2)=int(rc*(hy+rsizy-y)+rs*(wx+rsizx-x))+posy p5(3)=int(rc*(hy+rsizy-y)+rs*(wx-x))+posy gsquare 1,p2,p3,p4,p5 loop boxf x-20,y-50,x+20,y+20 pos x,y-120 mes strf("x=%d y=%d バッファ上の回転中心",posx,posy) mes strf("%.2f度",rad2deg(r)) mes strf("x=%d y=%d マップ上の回転中心",posx-rsizx,posy-rsizy) redraw 1 await 15 loop



SPK

リンク

2012/8/15(Wed) 13:21:58|NO.48565

スパムやらIP番号とか個人情報がのせられたので閉じます。



mamo

リンク

2012/8/15(Wed) 14:21:09|NO.48570

IP晒されて何の影響が・・・
しかも他人のものでしょ?



ONION software Copyright 1997-2023(c) All rights reserved.