次のコードを、CImage2DクラスのPublicアクセスできる位置に入れてください。
差分 [ここをクリックすると内容が表示されます]
コード: 全て選択
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
コード例 [ここをクリックすると内容が表示されます]
コード: 全て選択
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