예제 #1
0
        /// <summary>
        /// Buduje quada o wymaganych parametrach. Quad bedzie mogl byc wyswietlony w przestrzeni 3D. Ma nakladn¹ teksture wg textureName
        /// </summary>
        /// <param name="quadrangle"></param>
        /// <param name="origin"></param>
        /// <param name="textureName"></param>
        public void SetCorners3D(Quadrangle quadrangle, Vector3 origin, String textureName)
        {
            this.quadrangle = quadrangle;
            Vector2 leftBottom  = quadrangle.Peaks[0].ToVector2();
            Vector2 leftTop     = quadrangle.Peaks[1].ToVector2();
            Vector2 rightTop    = quadrangle.Peaks[2].ToVector2();
            Vector2 rightBottom = quadrangle.Peaks[3].ToVector2();

            float extend = 1.25f;


            corners       = new float[4][];
            corners[0]    = new float[3];
            corners[0][0] = extend * rightBottom.x + origin.x;
            corners[0][1] = extend * rightBottom.y + origin.y;
            corners[0][2] = origin.z;


            corners[1]    = new float[3];
            corners[1][0] = extend * rightTop.x + origin.x;
            corners[1][1] = extend * rightTop.y + origin.y;
            corners[1][2] = origin.z;


            corners[2]    = new float[3];
            corners[2][0] = extend * leftTop.x + origin.x;
            corners[2][1] = extend * leftTop.y + origin.y;
            corners[2][2] = origin.z;


            corners[3]    = new float[3];
            corners[3][0] = extend * leftBottom.x + origin.x;
            corners[3][1] = extend * leftBottom.y + origin.y;
            corners[3][2] = origin.z;


            float textureTop    = 0;
            float textureLeft   = 0;
            float textureBottom = 1;
            float textureRight  = 1;

            //      manualObject.RenderQueueGroup = (byte)RenderQueueGroupID.RENDER_QUEUE_MAIN - 1;

            manualObject.Clear();
            manualObject.Begin("Misc/BoundingQuadrangle", RenderOperation.OperationTypes.OT_TRIANGLE_LIST);
            manualObject.Position(origin.x + leftBottom.x, origin.y + leftBottom.y, origin.z);
            manualObject.TextureCoord(textureLeft, textureBottom);
            manualObject.Position(origin.x + leftTop.x, origin.y + leftTop.y, origin.z);
            manualObject.TextureCoord(textureLeft, textureTop);
            manualObject.Position(origin.x + rightTop.x, origin.y + rightTop.y, origin.z);
            manualObject.TextureCoord(textureRight, textureTop);
            manualObject.Position(origin.x + rightBottom.x, origin.y + rightBottom.y, origin.z);
            manualObject.TextureCoord(textureRight, textureBottom);

            /*    manualObject.Position( origin.x + leftBottom.x, origin.y + leftBottom.y,  origin.z);
             *  manualObject.TextureCoord(0, 0);*/
            manualObject.Quad(3, 2, 1, 0);
            manualObject.End();


/*
 *          AxisAlignedBox box = new AxisAlignedBox();
 *          float hwidth = 1.4f * (quadrangle.RightMostX - quadrangle.LeftMostX) * 0.5f;
 *          float hheight = 1.4f * (quadrangle.HighestY - quadrangle.LowestY) * 0.5f;
 *          box.SetMinimum(origin.x - hwidth, origin.y - hheight, origin.z - 10);
 *          box.SetMaximum(origin.x + hwidth, origin.y + hheight, origin.z + 10);
 *
 *          manualObject.BoundingBox = box;
 */
            MaterialPtr mat  = ViewHelper.CloneMaterial("AdMaterial", manualObject.Name + "AdMaterial");
            Pass        pass = mat.GetBestTechnique().GetPass(0);

            pass.DepthWriteEnabled = true;
            pass.SetSceneBlending(SceneBlendType.SBT_TRANSPARENT_ALPHA);

            TextureUnitState state = pass.GetTextureUnitState(0);

            state.SetTextureName(textureName);

            manualObject.SetMaterialName(0, mat.Name);
            manualObject.CastShadows = false;
            OnSetCorners();
            //  manualObject.SetMaterialName(0, "Concrete");
        }