作成者 |
メッセージ |
|
|
記事の件名: |
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
> ゲームを作ってて必要になったので作りました。 > > 次のコードを、CImage2DクラスのPublicアクセスできる位置に入れてください。[hide=差分][code]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[/code][/hide][hide=コード例][code]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[/code][/hide]
|
|
|
投稿記事 |
Posted: 2012年11月26日(月) 21:13 |
|
|
|
|
|
記事の件名: |
[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
ゲームを作ってて必要になったので作りました。
次のコードを、CImage2DクラスのPublicアクセスできる位置に入れてください。[hide=差分][code]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[/code][/hide][hide=コード例][code]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[/code][/hide]
|
|
|
投稿記事 |
Posted: 2007年12月27日(木) 20:55 |
|
|
|
|