public void t3D描画(Device device, Matrix mat, Rectangle rc画像内の描画領域) { if (this.texture == null) { return; } float x = ((float)rc画像内の描画領域.Width) / 2f; float y = ((float)rc画像内の描画領域.Height) / 2f; float z = 0.0f; float f左U値 = ((float)rc画像内の描画領域.Left) / ((float)this.szテクスチャサイズ.Width); float f右U値 = ((float)rc画像内の描画領域.Right) / ((float)this.szテクスチャサイズ.Width); float f上V値 = ((float)rc画像内の描画領域.Top) / ((float)this.szテクスチャサイズ.Height); float f下V値 = ((float)rc画像内の描画領域.Bottom) / ((float)this.szテクスチャサイズ.Height); this.color4.Alpha = ((float)this._opacity) / 255f; int color = this.color4.ToArgb(); if (this.cvPositionColoredVertexies == null) { this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[4]; } // #27122 2012.1.13 from: 以下、マネージドオブジェクト(=ガベージ)の量産を抑えるため、new は使わず、メンバに値を1つずつ直接上書きする。 this.cvPositionColoredVertexies[0].Position.X = -x; this.cvPositionColoredVertexies[0].Position.Y = y; this.cvPositionColoredVertexies[0].Position.Z = z; this.cvPositionColoredVertexies[0].Color = color; this.cvPositionColoredVertexies[0].TextureCoordinates.X = f左U値; this.cvPositionColoredVertexies[0].TextureCoordinates.Y = f上V値; this.cvPositionColoredVertexies[1].Position.X = x; this.cvPositionColoredVertexies[1].Position.Y = y; this.cvPositionColoredVertexies[1].Position.Z = z; this.cvPositionColoredVertexies[1].Color = color; this.cvPositionColoredVertexies[1].TextureCoordinates.X = f右U値; this.cvPositionColoredVertexies[1].TextureCoordinates.Y = f上V値; this.cvPositionColoredVertexies[2].Position.X = -x; this.cvPositionColoredVertexies[2].Position.Y = -y; this.cvPositionColoredVertexies[2].Position.Z = z; this.cvPositionColoredVertexies[2].Color = color; this.cvPositionColoredVertexies[2].TextureCoordinates.X = f左U値; this.cvPositionColoredVertexies[2].TextureCoordinates.Y = f下V値; this.cvPositionColoredVertexies[3].Position.X = x; this.cvPositionColoredVertexies[3].Position.Y = -y; this.cvPositionColoredVertexies[3].Position.Z = z; this.cvPositionColoredVertexies[3].Color = color; this.cvPositionColoredVertexies[3].TextureCoordinates.X = f右U値; this.cvPositionColoredVertexies[3].TextureCoordinates.Y = f下V値; this.tレンダリングステートの設定(device); device.SetTransform(TransformState.World, mat); device.SetTexture(0, this.texture); device.VertexFormat = PositionColoredTexturedVertex.Format; device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, in this.cvPositionColoredVertexies); }
public void t2D描画(Device device, int x, int y, float depth, Rectangle rc画像内の描画領域) { if (this.texture == null) { return; } this.tレンダリングステートの設定(device); if (this.fZ軸中心回転 == 0f) { #region [ (A) 回転なし ] //----------------- float f補正値X = -0.5f; // -0.5 は座標とピクセルの誤差を吸収するための座標補正値。(MSDN参照) float f補正値Y = -0.5f; // float w = rc画像内の描画領域.Width; float h = rc画像内の描画領域.Height; float f左U値 = ((float)rc画像内の描画領域.Left) / ((float)this.szテクスチャサイズ.Width); float f右U値 = ((float)rc画像内の描画領域.Right) / ((float)this.szテクスチャサイズ.Width); float f上V値 = ((float)rc画像内の描画領域.Top) / ((float)this.szテクスチャサイズ.Height); float f下V値 = ((float)rc画像内の描画領域.Bottom) / ((float)this.szテクスチャサイズ.Height); this.color4.Alpha = ((float)this._opacity) / 255f; int color = this.color4.ToArgb(); if (this.cvTransformedColoredVertexies == null) { this.cvTransformedColoredVertexies = new TransformedColoredTexturedVertex[4]; } // #27122 2012.1.13 from: 以下、マネージドオブジェクト(=ガベージ)の量産を抑えるため、new は使わず、メンバに値を1つずつ直接上書きする。 this.cvTransformedColoredVertexies[0].Position.X = x + f補正値X; this.cvTransformedColoredVertexies[0].Position.Y = y + f補正値Y; this.cvTransformedColoredVertexies[0].Position.Z = depth; this.cvTransformedColoredVertexies[0].Position.W = 1.0f; this.cvTransformedColoredVertexies[0].Color = color; this.cvTransformedColoredVertexies[0].TextureCoordinates.X = f左U値; this.cvTransformedColoredVertexies[0].TextureCoordinates.Y = f上V値; this.cvTransformedColoredVertexies[1].Position.X = (x + (w * this.vc拡大縮小倍率.X)) + f補正値X; this.cvTransformedColoredVertexies[1].Position.Y = y + f補正値Y; this.cvTransformedColoredVertexies[1].Position.Z = depth; this.cvTransformedColoredVertexies[1].Position.W = 1.0f; this.cvTransformedColoredVertexies[1].Color = color; this.cvTransformedColoredVertexies[1].TextureCoordinates.X = f右U値; this.cvTransformedColoredVertexies[1].TextureCoordinates.Y = f上V値; this.cvTransformedColoredVertexies[2].Position.X = x + f補正値X; this.cvTransformedColoredVertexies[2].Position.Y = (y + (h * this.vc拡大縮小倍率.Y)) + f補正値Y; this.cvTransformedColoredVertexies[2].Position.Z = depth; this.cvTransformedColoredVertexies[2].Position.W = 1.0f; this.cvTransformedColoredVertexies[2].Color = color; this.cvTransformedColoredVertexies[2].TextureCoordinates.X = f左U値; this.cvTransformedColoredVertexies[2].TextureCoordinates.Y = f下V値; this.cvTransformedColoredVertexies[3].Position.X = (x + (w * this.vc拡大縮小倍率.X)) + f補正値X; this.cvTransformedColoredVertexies[3].Position.Y = (y + (h * this.vc拡大縮小倍率.Y)) + f補正値Y; this.cvTransformedColoredVertexies[3].Position.Z = depth; this.cvTransformedColoredVertexies[3].Position.W = 1.0f; this.cvTransformedColoredVertexies[3].Color = color; this.cvTransformedColoredVertexies[3].TextureCoordinates.X = f右U値; this.cvTransformedColoredVertexies[3].TextureCoordinates.Y = f下V値; device.SetTexture(0, this.texture); device.VertexFormat = TransformedColoredTexturedVertex.Format; device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, in this.cvTransformedColoredVertexies); //----------------- #endregion } else { #region [ (B) 回転あり ] //----------------- float f補正値X = ((rc画像内の描画領域.Width % 2) == 0) ? -0.5f : 0f; // -0.5 は座標とピクセルの誤差を吸収するための座標補正値。(MSDN参照) float f補正値Y = ((rc画像内の描画領域.Height % 2) == 0) ? -0.5f : 0f; // 3D(回転する)なら補正はいらない。 float f中央X = ((float)rc画像内の描画領域.Width) / 2f; float f中央Y = ((float)rc画像内の描画領域.Height) / 2f; float f左U値 = ((float)rc画像内の描画領域.Left) / ((float)this.szテクスチャサイズ.Width); float f右U値 = ((float)rc画像内の描画領域.Right) / ((float)this.szテクスチャサイズ.Width); float f上V値 = ((float)rc画像内の描画領域.Top) / ((float)this.szテクスチャサイズ.Height); float f下V値 = ((float)rc画像内の描画領域.Bottom) / ((float)this.szテクスチャサイズ.Height); this.color4.Alpha = ((float)this._opacity) / 255f; int color = this.color4.ToArgb(); if (this.cvPositionColoredVertexies == null) { this.cvPositionColoredVertexies = new PositionColoredTexturedVertex[4]; } // #27122 2012.1.13 from: 以下、マネージドオブジェクト(=ガベージ)の量産を抑えるため、new は使わず、メンバに値を1つずつ直接上書きする。 this.cvPositionColoredVertexies[0].Position.X = -f中央X + f補正値X; this.cvPositionColoredVertexies[0].Position.Y = f中央Y + f補正値Y; this.cvPositionColoredVertexies[0].Position.Z = depth; this.cvPositionColoredVertexies[0].Color = color; this.cvPositionColoredVertexies[0].TextureCoordinates.X = f左U値; this.cvPositionColoredVertexies[0].TextureCoordinates.Y = f上V値; this.cvPositionColoredVertexies[1].Position.X = f中央X + f補正値X; this.cvPositionColoredVertexies[1].Position.Y = f中央Y + f補正値Y; this.cvPositionColoredVertexies[1].Position.Z = depth; this.cvPositionColoredVertexies[1].Color = color; this.cvPositionColoredVertexies[1].TextureCoordinates.X = f右U値; this.cvPositionColoredVertexies[1].TextureCoordinates.Y = f上V値; this.cvPositionColoredVertexies[2].Position.X = -f中央X + f補正値X; this.cvPositionColoredVertexies[2].Position.Y = -f中央Y + f補正値Y; this.cvPositionColoredVertexies[2].Position.Z = depth; this.cvPositionColoredVertexies[2].Color = color; this.cvPositionColoredVertexies[2].TextureCoordinates.X = f左U値; this.cvPositionColoredVertexies[2].TextureCoordinates.Y = f下V値; this.cvPositionColoredVertexies[3].Position.X = f中央X + f補正値X; this.cvPositionColoredVertexies[3].Position.Y = -f中央Y + f補正値Y; this.cvPositionColoredVertexies[3].Position.Z = depth; this.cvPositionColoredVertexies[3].Color = color; this.cvPositionColoredVertexies[3].TextureCoordinates.X = f右U値; this.cvPositionColoredVertexies[3].TextureCoordinates.Y = f下V値; int n描画領域内X = x + (rc画像内の描画領域.Width / 2); int n描画領域内Y = y + (rc画像内の描画領域.Height / 2); var vc3移動量 = new Vector3(n描画領域内X - (((float)device.Viewport.Width) / 2f), -(n描画領域内Y - (((float)device.Viewport.Height) / 2f)), 0f); var matrix = Matrix.Identity * Matrix.Scaling(this.vc拡大縮小倍率); matrix *= Matrix.RotationZ(this.fZ軸中心回転); matrix *= Matrix.Translation(vc3移動量); device.SetTransform(TransformState.World, matrix); device.SetTexture(0, this.texture); device.VertexFormat = PositionColoredTexturedVertex.Format; device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, in this.cvPositionColoredVertexies); //----------------- #endregion } }