|
|
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画像を回転させるとギザギザになるのは当たり前のことなので諦めましょう
としか言えません
|
|
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 *メイン
|
|
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
どこか間違っているところがあれば教えてください。よろしくお願いします。
|
|
2012/8/14(Tue) 07:15:13|NO.48497
・現状ではImage,2に何も描画されていない
・alCopyScreenToImageでbuffer 1をImage,2へコピーする必要がある
|
|
2012/8/14(Tue) 12:09:27|NO.48500
mamoさん、ありがとうございます。ギザギザじゃなくてとてもうれしいです。
しかし、回転の中心(xとy)を車の位置にするにはどうすればいいんですかね?
これは完全に回転とかけ離れていると思うのですが、求め方を教えて頂けませんか?
|
|
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

| |
|
2012/8/15(Wed) 13:21:58|NO.48565
スパムやらIP番号とか個人情報がのせられたので閉じます。
|
|
2012/8/15(Wed) 14:21:09|NO.48570
IP晒されて何の影響が・・・
しかも他人のものでしょ?
|
|