ab.com コミュニティ https://www.activebasic.com/forum/ |
|
[DirectX]CImage2D追加メソッド「回転描画」 https://www.activebasic.com/forum/viewtopic.php?t=2205 |
ページ 1 / 1 |
作成者: | konisi [ 2007年12月27日(木) 20:55 ] |
記事の件名: | [DirectX]CImage2D追加メソッド「回転描画」 |
ゲームを作ってて必要になったので作りました。 次のコードを、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 |
作成者: | ゲスト [ 2012年11月26日(月) 21:13 ] |
記事の件名: | Re: [DirectX]CImage2D追加メソッド「回転描画」 |
> ゲームを作ってて必要になったので作りました。 > > 次のコードを、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 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |