Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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
            }
        }