ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年9月21日(木) 08:40

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2007年12月27日(木) 20:55 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
ゲームを作ってて必要になったので作りました。

次のコードを、CImage2DクラスのPublicアクセスできる位置に入れてください。[hide=差分]
コード:
Sub DrawRotate(thita As Single,x As Single,y As Single,width As Single,height As Single)
	DrawRotateEx(thita,x,y,width,height,width/2,height/2)
End Sub

Sub DrawRotateEx(thita As Single,x As Single,y As Single,width As Single,height As Single,ox As Single,oy As Single)
	'thita::回転角(単位はラジアン、右回転。)
	'x,y::回転前の描画先の左上頂点座標
	'width,height::描画元のサイズ
	'ox,oy::描画元の左上頂点座標を(0,0)とした場合の、回転の中心座標

	Dim sc As Single,cc As Single
	Dim oxwi As Single,oyhe As Single

	'テクスチャーブレンディングの設定
	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE)
	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE)
	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE)

	'アルファブレンディングの設定
	dx_lpD3DDEV->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE)
	dx_lpD3DDEV->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA)
	dx_lpD3DDEV->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA)

	'テクスチャー設定
	dx_lpD3DDEV->SetTexture(0,lpD3DTexture)

	'頂点フォーマット設定
	dx_lpD3DDEV->SetFVF(D3DFVF_DEFAULT2D)

	'何度も使う値は予め計算しておく。
	sc=Sin(thita) As Single
	cc=Cos(thita) As Single
	oxwi=ox-width
	oyhe=oy-height

	vertices[0].x=x-cc*ox+sc*oy+ox
	vertices[0].y=y-cc*oy-sc*ox+oy
	vertices[0].tu=0
	vertices[0].tv=0

	vertices[1].x=x-cc*oxwi+sc*oy+ox
	vertices[1].y=y-cc*oy-sc*oxwi+oy
	vertices[1].tu=1
	vertices[1].tv=0

	vertices[2].x=x-cc*oxwi+sc*oyhe+ox
	vertices[2].y=y-cc*oyhe-sc*oxwi+oy
	vertices[2].tu=1
	vertices[2].tv=1

	vertices[3].x=x-cc*ox+sc*oyhe+ox
	vertices[3].y=y-cc*oyhe-sc*ox+oy
	vertices[3].tu=0
	vertices[3].tv=1

	'ポリゴン描画
	dx_lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,vertices,SizeOf(DEFAULTVERTEX2D))

	'アルファブレンディングの無効化
	dx_lpD3DDEV->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE)
End Sub
[/hide][hide=コード例]
コード:
Dim Square1 As CImage2D,thita As Single
Dim Square2 As CImage2D,Square3 As CImage2D

Function InitProc()
	'DirectXを初期化
	If dx_Init(hMainWnd,ScreenX,ScreenY,FALSE)=0 Then
		InitProc=0
		Exit Function
	End If

	'マウスカーソルを非表示にする
	ShowCursor(FALSE)

	' TODO: この位置にアプリケーションの初期化コードを記述してください。
	Square1.SetColor(D3DCOLOR_RGBA(255,255,255,255))
	Square2.SetColor(D3DCOLOR_RGBA(0,0,255,255))
	Square3.SetColor(D3DCOLOR_RGBA(255,0,0,255))
	thita=0

	InitProc=1
End Function

Sub RenderProc()
	' TODO: この位置に描画に関するコードを記述してください。
	thita+=0.01
	Square1.DrawRotateEx(0.5*thita,130,130,140,140, 70,70)
	Square2.DrawRotateEx(  2*thita,120,185, 30, 30, 40,15)
	Square3.DrawRotateEx( -3*thita,240,185, 30, 30,-10,15)
End Sub
[/hide]

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2012年11月26日(月) 21:13 
> ゲームを作ってて必要になったので作りました。
>
> 次のコードを、CImage2DクラスのPublicアクセスできる位置に入れてください。[hide=差分]
コード:
Sub DrawRotate(thita As Single,x As Single,y As Single,width As Single,height As Single)
> 	DrawRotateEx(thita,x,y,width,height,width/2,height/2)
> End Sub
> 
> Sub DrawRotateEx(thita As Single,x As Single,y As Single,width As Single,height As Single,ox As Single,oy As Single)
> 	'thita::回転角(単位はラジアン、右回転。)
> 	'x,y::回転前の描画先の左上頂点座標
> 	'width,height::描画元のサイズ
> 	'ox,oy::描画元の左上頂点座標を(0,0)とした場合の、回転の中心座標
> 
> 	Dim sc As Single,cc As Single
> 	Dim oxwi As Single,oyhe As Single
> 
> 	'テクスチャーブレンディングの設定
> 	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE)
> 	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE)
> 	dx_lpD3DDEV->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE)
> 
> 	'アルファブレンディングの設定
> 	dx_lpD3DDEV->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE)
> 	dx_lpD3DDEV->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA)
> 	dx_lpD3DDEV->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA)
> 
> 	'テクスチャー設定
> 	dx_lpD3DDEV->SetTexture(0,lpD3DTexture)
> 
> 	'頂点フォーマット設定
> 	dx_lpD3DDEV->SetFVF(D3DFVF_DEFAULT2D)
> 
> 	'何度も使う値は予め計算しておく。
> 	sc=Sin(thita) As Single
> 	cc=Cos(thita) As Single
> 	oxwi=ox-width
> 	oyhe=oy-height
> 
> 	vertices[0].x=x-cc*ox+sc*oy+ox
> 	vertices[0].y=y-cc*oy-sc*ox+oy
> 	vertices[0].tu=0
> 	vertices[0].tv=0
> 
> 	vertices[1].x=x-cc*oxwi+sc*oy+ox
> 	vertices[1].y=y-cc*oy-sc*oxwi+oy
> 	vertices[1].tu=1
> 	vertices[1].tv=0
> 
> 	vertices[2].x=x-cc*oxwi+sc*oyhe+ox
> 	vertices[2].y=y-cc*oyhe-sc*oxwi+oy
> 	vertices[2].tu=1
> 	vertices[2].tv=1
> 
> 	vertices[3].x=x-cc*ox+sc*oyhe+ox
> 	vertices[3].y=y-cc*oyhe-sc*ox+oy
> 	vertices[3].tu=0
> 	vertices[3].tv=1
> 
> 	'ポリゴン描画
> 	dx_lpD3DDEV->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,vertices,SizeOf(DEFAULTVERTEX2D))
> 
> 	'アルファブレンディングの無効化
> 	dx_lpD3DDEV->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE)
> End Sub
[/hide][hide=コード例]
コード:
Dim Square1 As CImage2D,thita As Single
> Dim Square2 As CImage2D,Square3 As CImage2D
> 
> Function InitProc()
> 	'DirectXを初期化
> 	If dx_Init(hMainWnd,ScreenX,ScreenY,FALSE)=0 Then
> 		InitProc=0
> 		Exit Function
> 	End If
> 
> 	'マウスカーソルを非表示にする
> 	ShowCursor(FALSE)
> 
> 	' TODO: この位置にアプリケーションの初期化コードを記述してください。
> 	Square1.SetColor(D3DCOLOR_RGBA(255,255,255,255))
> 	Square2.SetColor(D3DCOLOR_RGBA(0,0,255,255))
> 	Square3.SetColor(D3DCOLOR_RGBA(255,0,0,255))
> 	thita=0
> 
> 	InitProc=1
> End Function
> 
> Sub RenderProc()
> 	' TODO: この位置に描画に関するコードを記述してください。
> 	thita+=0.01
> 	Square1.DrawRotateEx(0.5*thita,130,130,140,140, 70,70)
> 	Square2.DrawRotateEx(  2*thita,120,185, 30, 30, 40,15)
> 	Square3.DrawRotateEx( -3*thita,240,185, 30, 30,-10,15)
> End Sub
[/hide]


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke