Ejemplo n.º 1
0
        internal void DrawLevel()
        {
            if (!loaded) return;
            d3ddevice.SetTransform(TransformType.Projection, Matrix.PerspectiveFovRH((float)(Math.PI / 4), panel1.Width / (float)panel1.Height, 1, cam.DrawDistance));
            d3ddevice.SetTransform(TransformType.View, cam.ToMatrix());
            Text = "X=" + cam.Position.X + " Y=" + cam.Position.Y + " Z=" + cam.Position.Z + " Pitch=" + cam.Pitch.ToString("X") + " Yaw=" + cam.Yaw.ToString("X") + " Interval=" + interval + (cam.mode == 1 ? " Distance=" + cam.Distance : "") + (animation != null ? " Animation=" + animation.Name + " Frame=" + animframe : "");
            d3ddevice.RenderState.FillMode = EditorOptions.RenderFillMode;
            d3ddevice.RenderState.CullMode = EditorOptions.RenderCullMode;
            d3ddevice.Material = new Material { Ambient = Color.White };
            d3ddevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black.ToArgb(), 1, 0);
            d3ddevice.RenderState.ZBufferEnable = true;
            d3ddevice.BeginScene();
            //all drawings after this line
            EditorOptions.RenderStateCommonSetup(d3ddevice);

            MatrixStack transform = new MatrixStack();
            if (animation != null)
                RenderInfo.Draw(model.DrawModelTreeAnimated(d3ddevice, transform, Textures, meshes, animation, animframe), d3ddevice, cam);
            else
                RenderInfo.Draw(model.DrawModelTree(d3ddevice, transform, Textures, meshes), d3ddevice, cam);

            if (selectedObject != null)
                DrawSelectedObject(model, transform);

            d3ddevice.EndScene(); //all drawings before this line
            d3ddevice.Present();
        }
Ejemplo n.º 2
0
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     HitResult result = HitResult.NoHit;
     transform.Push();
     transform.NJTranslate(item.Position.ToVector3());
     transform.NJRotateY(item.Rotation.Y);
     transform.Push();
     transform.NJTranslate(0, 0, 10);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 2);
     result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(0, 0, 20);
     transform.NJRotateX(0x2000);
     transform.NJTranslate(0, 0, -3);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 0.699999988079071f);
     result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(0, 0, 20);
     transform.NJRotateX(0xE000);
     transform.NJTranslate(0, 0, -3);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 0.699999988079071f);
     result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
     transform.Pop();
     transform.NJScale((item.Scale.X + 10) / 5f, (item.Scale.Y + 10) / 5f, 0.1000000014901161f);
     result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 3
0
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateY(item.Rotation.Y);
     result.AddRange(ballmodel.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_REGULAR"), ballmeshes));
     if (item.Selected)
         result.AddRange(ballmodel.DrawModelTreeInvert(dev, transform, ballmeshes));
     transform.Pop();
     double v24 = item.Scale.X * 0.05000000074505806;
     transform.Push();
     double v22 = item.Scale.X * 0.5 + item.Position.Y;
     transform.NJTranslate(item.Position.X, (float)v22, item.Position.Z);
     transform.NJScale(1.0f, (float)v24, 1.0f);
     result.AddRange(cylindermodel.DrawModelTree(dev, transform, null, cylindermeshes));
     if (item.Selected)
         result.AddRange(cylindermodel.DrawModelTreeInvert(dev, transform, cylindermeshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(item.Position.X, item.Position.Y + item.Scale.Z, item.Position.Z);
     result.AddRange(spheremodel.DrawModelTree(dev, transform, null, spheremeshes));
     if (item.Selected)
         result.AddRange(spheremodel.DrawModelTreeInvert(dev, transform, spheremeshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 4
0
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     int rows = (int)Math.Max(item.Scale.X, 1);
     int cols = (int)Math.Max(item.Scale.Z, 1);
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateObject(item.Rotation.X & 0xC000, item.Rotation.Y, 0);
     transform.NJTranslate((1 - rows) * 7.5f, 0, (1 - cols) * 7.5f);
     for (int i = 0; i < rows; ++i)
     {
         transform.Push();
         for (int j = 0; j < cols; ++j)
         {
             result.AddRange(model.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_REGULAR"), meshes));
             if (item.Selected)
                 result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
             transform.NJTranslate(0, 0, 15);
         }
         transform.Pop();
         transform.NJTranslate(15, 0, 0);
     }
     transform.Pop();
     return result;
 }
Ejemplo n.º 5
0
        public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List<RenderInfo> result = new List<RenderInfo>();
            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y - 0x5772);
            transform.NJScale((item.Scale.X), (item.Scale.Y), (item.Scale.Z));

            float largestScale = item.Scale.X;
            if (item.Scale.Y > largestScale) largestScale = item.Scale.Y;
            if (item.Scale.Z > largestScale) largestScale = item.Scale.Z;

            BoundingSphere boxSphere = new BoundingSphere() { Center = new Vertex(item.Position.X, item.Position.Y, item.Position.Z), Radius = (1.5f * largestScale) };

            RenderInfo outputInfo = new RenderInfo(mesh, 0, transform.Top, material, texture, FillMode.Solid, boxSphere);
            result.Add(outputInfo);

            if (item.Selected)
            {
                RenderInfo highlightInfo = new RenderInfo(mesh, 0, transform.Top, material, texture, FillMode.WireFrame, boxSphere);
                result.Add(highlightInfo);
            }

            transform.Pop();
            return result;
        }
Ejemplo n.º 6
0
 public override void Render(Device dev, EditorCamera cam)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     MatrixStack transform = new MatrixStack();
     Texture[] texs = ObjectHelper.GetTextures("SHOOTING0");
     result.AddRange(carriermdl.DrawModelTree(dev, transform, texs, carriermesh));
     RenderInfo.Draw(result, dev, cam);
 }
Ejemplo n.º 7
0
 public static HitResult CheckSpriteHit(Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     Vector3 pos = Vector3.Unproject(Near, Viewport, Projection, View, transform.Top);
     Vector3 dir = Vector3.Subtract(pos, Vector3.Unproject(Far, Viewport, Projection, View, transform.Top));
     IntersectInformation info;
     if (!SquareMesh.Intersect(pos, dir, out info)) return HitResult.NoHit;
     return new HitResult(null, info.Dist);
 }
Ejemplo n.º 8
0
 public Game()
     : base(800, 600, GraphicsMode.Default, "OpenTK Quick Start Sample")
 {
     VSync = VSyncMode.On;
     core = new GameCore();
     controlState = new ControlState();
     stack = new MatrixStack();
     modelDrawer = new ModelDrawer(stack);
 }
Ejemplo n.º 9
0
 public override HitResult CheckHit(Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View)
 {
     MatrixStack transform = new MatrixStack();
     transform.Push();
     transform.NJTranslate(0, offset, 0);
     transform.NJTranslate(Position);
     transform.NJRotateY(YRotation);
     return Model.CheckHit(Near, Far, Viewport, Projection, View, transform, Meshes);
 }
Ejemplo n.º 10
0
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateObject(item.Rotation);
     HitResult result = model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes);
     transform.Pop();
     return result;
 }
Ejemplo n.º 11
0
 public override void Render(Device dev, EditorCamera cam)
 {
     if (NoRender) return;
     MatrixStack transform = new MatrixStack();
     transform.Push();
     transform.NJTranslate(cam.Position);
     transform.NJScale(Skybox_Scale);
     RenderInfo.Draw(model.DrawModelTree(dev, transform, ObjectHelper.GetTextures("BG_SHAREOBJ"), meshes), dev, cam);
     transform.Pop();
 }
Ejemplo n.º 12
0
 public override void Render(Device dev, EditorCamera cam)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     MatrixStack transform = new MatrixStack();
     transform.Push();
     Texture[] texs = ObjectHelper.GetTextures("WINDY_BACK2");
     for (int i = 0; i < 3; i++)
         result.AddRange(models[i].DrawModelTree(dev, transform, texs, meshes[i]));
     transform.Pop();
     RenderInfo.Draw(result, dev, cam);
 }
Ejemplo n.º 13
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y - 0x5772);
            transform.NJScale((item.Scale.X), (item.Scale.Y), (item.Scale.Z));
            HitResult result = mesh.CheckHit(Near, Far, Viewport, Projection, View, transform);

            transform.Pop();
            return result;
        }
Ejemplo n.º 14
0
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateObject(item.Rotation.X, item.Rotation.Y - 0x8000, item.Rotation.Z);
     result.AddRange(model.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_REGULAR"), meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 15
0
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateY(item.Rotation.Y);
     transform.NJScale((item.Scale.X + 10) / 5f, (item.Scale.Y + 10) / 5f, (item.Scale.Z + 10) / 5f);
     result.AddRange(model.DrawModelTree(dev, transform, null, meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 16
0
 public override void Render(Device dev, EditorCamera cam)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     MatrixStack transform = new MatrixStack();
     transform.Push();
     transform.NJTranslate(cam.Position.X, 0, cam.Position.Z);
     transform.NJScale(Skybox_Scale);
     Texture[] texs = ObjectHelper.GetTextures("BG_BEACH");
     result.AddRange(model1.DrawModelTree(dev, transform, texs, mesh1));
     result.AddRange(model2.DrawModelTree(dev, transform, texs, mesh2));
     transform.Pop();
     RenderInfo.Draw(result, dev, cam);
 }
Ejemplo n.º 17
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y);

            float X, Y;
            X = (float)((item.Scale.X + 10.0) * 0.1f);
            Y = (float)((item.Scale.Y + 10.0) * 0.1f);
            transform.NJScale(X, Y, X);

            HitResult result = model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes);
            transform.Pop();
            return result;
        }
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     transform.Push();
     Matrix m = transform.Top;
     transform.NJTranslate(xpos ?? item.Position.X, ypos ?? item.Position.Y, zpos ?? item.Position.Z);
     transform.NJRotateXYZ(xrot ?? item.Rotation.X, yrot ?? item.Rotation.Y, zrot ?? item.Rotation.Z);
     HitResult result;
     if (model == null)
         result = ObjectHelper.CheckSpriteHit(Near, Far, Viewport, Projection, View, transform);
     else
     {
         transform.NJScale(xscl ?? item.Scale.X, yscl ?? item.Scale.Y, zscl ?? item.Scale.Z);
         result = model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes);
     }
     transform.Pop();
     return result;
 }
Ejemplo n.º 19
0
        internal void DrawLevel()
        {
            if (!loaded) return;
            cam.FOV = (float)(Math.PI / 4);
            cam.Aspect = panel1.Width / (float)panel1.Height;
            cam.DrawDistance = 10000;
            d3ddevice.SetTransform(TransformType.Projection, Matrix.PerspectiveFovRH(cam.FOV, cam.Aspect, 1, cam.DrawDistance));
            d3ddevice.SetTransform(TransformType.View, cam.ToMatrix());
            Text = "X=" + cam.Position.X + " Y=" + cam.Position.Y + " Z=" + cam.Position.Z + " Pitch=" + cam.Pitch.ToString("X") + " Yaw=" + cam.Yaw.ToString("X") + " Interval=" + interval + (cam.mode == 1 ? " Distance=" + cam.Distance : "");
            d3ddevice.SetRenderState(RenderStates.FillMode, (int)EditorOptions.RenderFillMode);
            d3ddevice.SetRenderState(RenderStates.CullMode, (int)EditorOptions.RenderCullMode);
            d3ddevice.Material = new Material { Ambient = Color.White };
            d3ddevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black.ToArgb(), 1, 0);
            d3ddevice.RenderState.ZBufferEnable = true;
            d3ddevice.BeginScene();
            //all drawings after this line
            cam.DrawDistance = EditorOptions.RenderDrawDistance;
            d3ddevice.SetTransform(TransformType.Projection, Matrix.PerspectiveFovRH(cam.FOV, cam.Aspect, 1, cam.DrawDistance));
            d3ddevice.SetTransform(TransformType.View, cam.ToMatrix());
            cam.BuildFrustum(d3ddevice.Transform.View, d3ddevice.Transform.Projection);

            EditorOptions.RenderStateCommonSetup(d3ddevice);

            MatrixStack transform = new MatrixStack();
            List<RenderInfo> renderlist = new List<RenderInfo>();
            if (LevelData.LevelItems != null)
                for (int i = 0; i < LevelData.LevelItems.Count; i++)
                {
                    bool display = false;
                    if (visibleToolStripMenuItem.Checked && LevelData.LevelItems[i].Visible)
                        display = true;
                    else if (invisibleToolStripMenuItem.Checked && !LevelData.LevelItems[i].Visible)
                        display = true;
                    else if (allToolStripMenuItem.Checked)
                        display = true;
                    if (display)
                        renderlist.AddRange(LevelData.LevelItems[i].Render(d3ddevice, cam, transform));
                }
            RenderInfo.Draw(renderlist, d3ddevice, cam);

            d3ddevice.EndScene(); // scene drawings go before this line

            transformGizmo.Draw(d3ddevice, cam);
            d3ddevice.Present();
        }
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     transform.Push();
     transform.NJTranslate(xpos ?? item.Position.X, ypos ?? item.Position.Y, zpos ?? item.Position.Z);
     transform.NJRotateXYZ(xrot ?? item.Rotation.X, yrot ?? item.Rotation.Y, zrot ?? item.Rotation.Z);
     if (model == null)
         result.AddRange(ObjectHelper.RenderSprite(dev, transform, null, item.Position.ToVector3(), item.Selected));
     else
     {
         transform.NJScale(xscl ?? item.Scale.X, yscl ?? item.Scale.Y, zscl ?? item.Scale.Z);
         result.AddRange(model.DrawModelTree(dev, transform, ObjectHelper.GetTextures(texture), meshes));
         if (item.Selected)
             result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     }
     transform.Pop();
     return result;
 }
Ejemplo n.º 21
0
        unsafe void PrepareState()
        {
            if (m_ParticleRenderingState != null)
            {
                Simulate (DateTime.Now);

                PositionBuffer.Publish ();
                ColorAndSizeBuffer.Publish ();
                m_SystemState.Activate ();
                return;
            }

            unsafe
            {
                //VelocityBuffer = new BufferObject<Vector4> (sizeof(Vector4), size) { Name = "velocity_buffer", Usage = BufferUsageHint.DynamicDraw };
                PositionBuffer = new BufferObject<Vector4> (sizeof(Vector4), PARTICLES_COUNT) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw };
                ColorAndSizeBuffer = new BufferObject<Vector4> (sizeof(Vector4), PARTICLES_COUNT) { Name = "colorandsize_buffer", Usage = BufferUsageHint.DynamicDraw };
            }

            m_Projection = new MatrixStack ().Push (Matrix4.CreateOrthographic (14, 14, -1, 1));

            m_TransformationStack = new MatrixStack (m_Projection).Push (Matrix4.Identity).Push (Matrix4.Identity);

            m_UniformState = new UniformState ().Set ("color", new Vector4 (0, 0, 1, 1)).Set ("red", 1.0f).Set ("green", 0.0f).Set ("blue", 1.0f).Set ("colors", new float[] { 0, 1, 0, 1 }).Set ("colors2", new Vector4[] { new Vector4 (1, 0.1f, 0.1f, 0), new Vector4 (1, 0, 0, 0), new Vector4 (1, 1, 0.1f, 0) }).Set ("modelview_transform", m_TransformationStack);

            var sprite = new[] { new Vector3 (-1, -1, 0), new Vector3 (-1, 1, 0), new Vector3 (1, 1, 0), new Vector3 (1, -1, 0) };

            var vdata_buffer = new BufferObject<Vector3> (sizeof(Vector3)) { Name = "vdata_buffer", Usage = BufferUsageHint.DynamicDraw, Data = sprite };

            m_ParticleRenderingState = new ArrayObject (new VertexAttribute { AttributeName = "vertex_pos", Buffer = vdata_buffer, Size = 3, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_pos", Buffer = PositionBuffer, Divisor = 1, Size = 4, Stride = 0, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_colorandsize", Buffer = ColorAndSizeBuffer, Divisor = 1, Size = 4, Type = VertexAttribPointerType.Float });
            m_ParticleRenderingProgram = new Program ("main_program", opentk.ShadingSetup.RenderPass.GetResourceShaders(string.Empty, GetType ().Namespace.Split ('.').Last ()).ToArray ());

            m_SystemState = new State (null, m_ParticleRenderingState, m_ParticleRenderingProgram, m_UniformState);

            var hnd = PositionBuffer.Handle;
            hnd = ColorAndSizeBuffer.Handle;

            m_DebugView = new opentk.QnodeDebug.QuadTreeDebug(10000, m_TransformationStack);
            InitializeSystem();
            PrepareState ();
        }
Ejemplo n.º 22
0
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     HitResult result = HitResult.NoHit;
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateY(item.Rotation.Y);
     result = HitResult.Min(result, ballmodel.CheckHit(Near, Far, Viewport, Projection, View, transform, ballmeshes));
     transform.Pop();
     double v24 = item.Scale.X * 0.05000000074505806;
     transform.Push();
     double v22 = item.Scale.X * 0.5 + item.Position.Y;
     transform.NJTranslate(item.Position.X, (float)v22, item.Position.Z);
     transform.NJScale(1.0f, (float)v24, 1.0f);
     result = HitResult.Min(result, cylindermodel.CheckHit(Near, Far, Viewport, Projection, View, transform, cylindermeshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(item.Position.X, item.Position.Y + item.Scale.Z, item.Position.Z);
     result = HitResult.Min(result, spheremodel.CheckHit(Near, Far, Viewport, Projection, View, transform, spheremeshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 23
0
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     HitResult result = HitResult.NoHit;
     for (int i = 0; i < Math.Min(item.Scale.X + 1, 8); i++)
     {
         transform.Push();
         if (item.Scale.Z == 1) // circle
         {
             double v4 = i * 360.0;
             Vector3 v7 = new Vector3(
                 ObjectHelper.ConvertBAMS((int)(v4 / item.Scale.X * 65536.0 * 0.002777777777777778)) * item.Scale.Y,
                 0,
                 ObjectHelper.ConvertBAMSInv((int)(v4 / item.Scale.X * 65536.0 * 0.002777777777777778)) * item.Scale.Y);
             transform.Push();
             transform.NJTranslate(item.Position);
             transform.NJRotateObject(item.Rotation);
             Vector3 pos = Vector3.TransformCoordinate(v7, transform.Top);
             transform.Pop();
             transform.NJTranslate(pos);
             result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
         }
         else // line
         {
             transform.Push();
             transform.NJTranslate(item.Position);
             transform.NJRotateObject(item.Rotation);
             double v5;
             if (i % 2 == 1)
                 v5 = i * item.Scale.Y * -0.5;
             else
                 v5 = Math.Ceiling(i * 0.5) * item.Scale.Y;
             Vector3 pos = Vector3.TransformCoordinate(new Vector3(0, 0, (float)v5), transform.Top);
             transform.Pop();
             transform.NJTranslate(pos);
             result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
         }
         transform.Pop();
     }
     return result;
 }
Ejemplo n.º 24
0
 public override List<RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
 {
     List<RenderInfo> result = new List<RenderInfo>();
     transform.Push();
     transform.NJTranslate(item.Position.ToVector3());
     transform.NJRotateY(item.Rotation.Y);
     transform.Push();
     transform.NJTranslate(0, 0, 10);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 2);
     result.AddRange(model.DrawModelTree(dev, transform, null, meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(0, 0, 20);
     transform.NJRotateX(0x2000);
     transform.NJTranslate(0, 0, -3);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 0.699999988079071f);
     result.AddRange(model.DrawModelTree(dev, transform, null, meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     transform.Push();
     transform.NJTranslate(0, 0, 20);
     transform.NJRotateX(0xE000);
     transform.NJTranslate(0, 0, -3);
     transform.NJScale(0.1000000014901161f, 0.1000000014901161f, 0.699999988079071f);
     result.AddRange(model.DrawModelTree(dev, transform, null, meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     transform.NJScale((item.Scale.X + 10) / 5f, (item.Scale.Y + 10) / 5f, 0.1000000014901161f);
     result.AddRange(model.DrawModelTree(dev, transform, null, meshes));
     if (item.Selected)
         result.AddRange(model.DrawModelTreeInvert(dev, transform, meshes));
     transform.Pop();
     return result;
 }
Ejemplo n.º 25
0
 public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     HitResult result = HitResult.NoHit;
     int rows = (int)Math.Max(item.Scale.X, 1);
     int cols = (int)Math.Max(item.Scale.Z, 1);
     transform.Push();
     transform.NJTranslate(item.Position);
     transform.NJRotateObject(item.Rotation.X & 0xC000, item.Rotation.Y, 0);
     transform.NJTranslate((1 - rows) * 7.5f, 0, (1 - cols) * 7.5f);
     for (int i = 0; i < rows; ++i)
     {
         transform.Push();
         for (int j = 0; j < cols; ++j)
         {
             result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, meshes));
             transform.NJTranslate(0, 0, 15);
         }
         transform.Pop();
         transform.NJTranslate(15, 0, 0);
     }
     transform.Pop();
     return result;
 }
        public ModelViewProjectionParameters(
			 string prefix,
			 IValueProvider<Matrix4> modelview,
			 IValueProvider<Matrix4> projection
		)
        {
            m_Transformation = new MatrixStack();
            m_TransformationInv = new MatrixStack();

            Prefix = prefix;
            ModelView = modelview;
            ModelViewInv = new MatrixInversion(modelview);
            Projection = projection;
            ProjectionInv = new MatrixInversion(projection);
            ModelViewProjection = m_Transformation;
            ModelViewProjectionInv = m_TransformationInv;

            m_Transformation.Push(Projection);
            m_Transformation.Push(ModelView);

            m_TransformationInv.Push(ModelViewInv);
            m_TransformationInv.Push(ProjectionInv);
        }
Ejemplo n.º 27
0
 public ModelDrawer(MatrixStack stack)
 {
     this.stack = stack;
 }
Ejemplo n.º 28
0
 public static HitResult CheckSpriteHit(Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
 {
     return(SquareMesh.CheckHit(Near, Far, Viewport, Projection, View, transform));
 }
Ejemplo n.º 29
0
 public abstract HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform);
Ejemplo n.º 30
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            HitResult result = HitResult.NoHit;

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateObject(item.Rotation);
            transform.NJTranslate(2f, 0f, 0f);
            transform.Push();
            result = HitResult.Min(result, frog.CheckHit(Near, Far, Viewport, Projection, View, transform, frogmsh));
            transform.Pop();
            return(result);
        }
Ejemplo n.º 31
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            HitResult result = HitResult.NoHit;

            transform.Push();
            transform.NJTranslate(item.Position.X, (item.Position.Y + item.Scale.Y), item.Position.Z);
            transform.NJRotateObject(item.Rotation);
            transform.Push();
            result = HitResult.Min(result, frog.CheckHit(Near, Far, Viewport, Projection, View, transform, frogmsh));
            transform.Pop();
            transform.Push();
            transform.NJTranslate(item.Position.X, (item.Position.Y + item.Scale.Y), item.Position.Z);
            transform.NJRotateY(item.Rotation.Y);
            transform.Push();
            result = HitResult.Min(result, bubble.CheckHit(Near, Far, Viewport, Projection, View, transform, bubblemsh));
            transform.Pop();
            transform.Push();
            transform.NJTranslate(item.Position.X, (item.Position.Y + item.Scale.Y), item.Position.Z);
            transform.NJScale((item.Scale.X + 1f), (item.Scale.X + 1f), (item.Scale.X + 1f));
            transform.Push();
            result = HitResult.Min(result, sphere.CheckHit(Near, Far, Viewport, Projection, View, transform, spheremsh));
            transform.Pop();
            return(result);
        }
Ejemplo n.º 32
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            v5 = (ulong)item.Scale.X;
            if (v5 != 0)
            {
                v6 = (int)v5 - 1;
                if (v6 == 0)
                {
                    transform.Push();
                    transform.NJTranslate(item.Position);
                    transform.NJRotateObject(item.Rotation);
                    result.AddRange(modelB.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_WINDY"), meshesB));
                    if (item.Selected)
                    {
                        result.AddRange(modelB.DrawModelTreeInvert(transform, meshesB));
                    }
                    transform.Pop();
                    return(result);
                }
                if (v6 == 1)
                {
                    transform.Push();
                    transform.NJTranslate(item.Position);
                    transform.NJRotateObject(item.Rotation);
                    result.AddRange(modelC.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_WINDY"), meshesC));
                    if (item.Selected)
                    {
                        result.AddRange(modelC.DrawModelTreeInvert(transform, meshesC));
                    }
                    transform.Pop();
                    return(result);
                }
            }
            else
            {
                transform.Push();
                transform.NJTranslate(item.Position);
                transform.NJRotateObject(item.Rotation);
                result.AddRange(modelA.DrawModelTree(dev, transform, ObjectHelper.GetTextures("OBJ_WINDY"), meshesA));
                if (item.Selected)
                {
                    result.AddRange(modelA.DrawModelTreeInvert(transform, meshesA));
                }
                transform.Pop();
                return(result);
            }
            return(result);
        }
Ejemplo n.º 33
0
 private void UpdateWeightedModels()
 {
     if (scenenum > 0)
     {
         for (int i = 0; i < @event.Scenes[scenenum].Entities.Count; i++)
         {
             if (@event.Scenes[scenenum].Entities[i].Model != null)
             {
                 if (@event.Scenes[scenenum].Entities[i].Model.HasWeight)
                 {
                     if (animframe == -1 || @event.Scenes[scenenum].Entities[i].Motion == null)
                     {
                         @event.Scenes[scenenum].Entities[i].Model.UpdateWeightedModel(new MatrixStack(), meshes[scenenum][i]);
                     }
                     else
                     {
                         MatrixStack m = new MatrixStack();
                         m.NJTranslate([email protected][scenenum].Entities[i].Motion.Models[0].GetPosition(animframe));
                         @event.Scenes[scenenum].Entities[i].Model.UpdateWeightedModelAnimated(m, @event.Scenes[scenenum].Entities[i].Motion, animframe, meshes[scenenum][i]);
                     }
                 }
                 else if (@event.Scenes[scenenum].Entities[i].ShapeMotion != null)
                 {
                     if (animframe == -1)
                     {
                         @event.Scenes[scenenum].Entities[i].Model.ProcessVertexData();
                     }
                     else
                     {
                         @event.Scenes[scenenum].Entities[i].Model.ProcessShapeMotionVertexData(@event.Scenes[scenenum].Entities[i].ShapeMotion, animframe);
                     }
                     NJS_OBJECT[] models = @event.Scenes[scenenum].Entities[i].Model.GetObjects();
                     for (int j = 0; j < models.Length; j++)
                     {
                         if (models[j].Attach != null)
                         {
                             try { meshes[scenenum][i][j] = models[j].Attach.CreateD3DMesh(); }
                             catch { }
                         }
                     }
                 }
             }
         }
         if (@event.Scenes[scenenum].Big?.Model != null)
         {
             if (@event.Scenes[scenenum].Big.Model.HasWeight)
             {
                 if (animframe == -1)
                 {
                     @event.Scenes[scenenum].Big.Model.UpdateWeightedModel(new MatrixStack(), bigmeshes[scenenum]);
                 }
                 else
                 {
                     int an = 0;
                     int fr = animframe;
                     while (an < @event.Scenes[scenenum].Big.Motions.Count && @event.Scenes[scenenum].Big.Motions[an].a.Frames < fr)
                     {
                         fr -= @event.Scenes[scenenum].Big.Motions[an].a.Frames;
                         an++;
                     }
                     if (an < @event.Scenes[scenenum].Big.Motions.Count)
                     {
                         @event.Scenes[scenenum].Big.Model.UpdateWeightedModelAnimated(new MatrixStack(), @event.Scenes[scenenum].Big.Motions[an].a, fr, bigmeshes[scenenum]);
                     }
                 }
             }
         }
         if (eventcamera && animframe != -1 && @event.Scenes[scenenum].CameraMotions != null)
         {
             cam.mode = 2;
             int an = 0;
             int fr = animframe;
             while (@event.Scenes[scenenum].CameraMotions[an].Frames < fr)
             {
                 fr -= @event.Scenes[scenenum].CameraMotions[an].Frames;
                 an++;
             }
             AnimModelData data = @event.Scenes[scenenum].CameraMotions[an].Models[0];
             cam.Position = data.GetPosition(fr).ToVector3();
             Vector3 dir;
             if (data.Vector.Count > 0)
             {
                 dir = data.GetVector(fr).ToVector3();
             }
             else
             {
                 dir = Vector3.Normalize(cam.Position - data.GetTarget(fr).ToVector3());
             }
             cam.Direction = dir;
             cam.Roll      = data.GetRoll(fr);
             cam.FOV       = SonicRetro.SAModel.Direct3D.Extensions.BAMSToRad(@event.Scenes[scenenum].CameraMotions[an].Models[0].GetAngle(fr));
         }
         else
         {
             cam.mode = 0;
             cam.FOV  = (float)(Math.PI / 4);
             if (animframe != -1 && @event.Scenes[scenenum].CameraMotions != null)
             {
                 int an = 0;
                 int fr = animframe;
                 while (@event.Scenes[scenenum].CameraMotions[an].Frames < fr)
                 {
                     fr -= @event.Scenes[scenenum].CameraMotions[an].Frames;
                     an++;
                 }
                 AnimModelData data = @event.Scenes[scenenum].CameraMotions[an].Models[0];
                 Vector3       pos  = data.GetPosition(fr).ToVector3();
                 Vector3       dir;
                 if (data.Vector.Count > 0)
                 {
                     dir = data.GetVector(fr).ToVector3();
                 }
                 else
                 {
                     dir = Vector3.Normalize(pos - data.GetTarget(fr).ToVector3());
                 }
                 int    roll = data.GetRoll(fr);
                 float  bams_sin = SonicRetro.SAModel.Direct3D.Extensions.NJSin(roll);
                 float  bams_cos = SonicRetro.SAModel.Direct3D.Extensions.NJCos(-roll);
                 float  thing = dir.X * dir.X + dir.Z * dir.Z;
                 double sqrt = Math.Sqrt(thing);
                 float  v3 = dir.Y * dir.Y + thing;
                 double v4 = 1.0 / Math.Sqrt(v3);
                 double sqrt__ = sqrt * v4;
                 double sqrt___ = v4 * dir.Y;
                 double v7, v8;
                 if (thing <= 0.000001)
                 {
                     v7 = 1.0;
                     v8 = 0.0;
                 }
                 else
                 {
                     double v5 = 1.0 / Math.Sqrt(thing);
                     double v6 = v5;
                     v7 = v5 * dir.Z;
                     v8 = -(v6 * dir.X);
                 }
                 double v9 = sqrt___ * v8;
                 cammatrix.M14 = 0;
                 cammatrix.M23 = (float)sqrt___;
                 cammatrix.M24 = 0;
                 cammatrix.M34 = 0;
                 cammatrix.M11 = (float)(v7 * bams_cos - v9 * bams_sin);
                 cammatrix.M12 = (float)(v9 * bams_cos + v7 * bams_sin);
                 cammatrix.M13 = -(float)(sqrt__ * v8);
                 cammatrix.M21 = -(float)(sqrt__ * bams_sin);
                 cammatrix.M22 = (float)(sqrt__ * bams_cos);
                 double v10 = v7 * sqrt___;
                 cammatrix.M31 = (float)(bams_sin * v10 + v8 * bams_cos);
                 cammatrix.M32 = (float)(v8 * bams_sin - v10 * bams_cos);
                 cammatrix.M33 = (float)(v7 * sqrt__);
                 cammatrix.M41 = -(cammatrix.M31 * pos.Z) - cammatrix.M11 * pos.X - cammatrix.M21 * pos.Y;
                 cammatrix.M42 = -(cammatrix.M32 * pos.Z) - cammatrix.M12 * pos.X - cammatrix.M22 * pos.Y;
                 float  v12 = -(cammatrix.M33 * pos.Z) - cammatrix.M13 * pos.X;
                 double v13 = sqrt___ * pos.Y;
                 cammatrix.M44 = 1;
                 cammatrix.M43 = (float)(v12 - v13);
                 cammatrix.Invert();
             }
         }
     }
 }
Ejemplo n.º 34
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateObject(item.Rotation.X, item.Rotation.Y - 0x8000, item.Rotation.Z);
            result.AddRange(model.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("e_g_kumitex"), meshes, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            if (item.Selected)
            {
                result.AddRange(model.DrawModelTreeInvert(transform, meshes));
            }
            transform.Pop();
            return(result);
        }
Ejemplo n.º 35
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            HitResult result = HitResult.NoHit;

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y);
            result = HitResult.Min(result, ballmodel.CheckHit(Near, Far, Viewport, Projection, View, transform, ballmeshes));
            transform.Pop();
            double v24 = item.Scale.X * 0.05000000074505806;

            transform.Push();
            double v22 = item.Scale.X * 0.5 + item.Position.Y;

            transform.NJTranslate(item.Position.X, (float)v22, item.Position.Z);
            transform.NJScale(1.0f, (float)v24, 1.0f);
            result = HitResult.Min(result, cylindermodel.CheckHit(Near, Far, Viewport, Projection, View, transform, cylindermeshes));
            transform.Pop();
            transform.Push();
            transform.NJTranslate(item.Position.X, item.Position.Y + item.Scale.Z, item.Position.Z);
            result = HitResult.Min(result, spheremodel.CheckHit(Near, Far, Viewport, Projection, View, transform, spheremeshes));
            transform.Pop();
            return(result);
        }
Ejemplo n.º 36
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y);
            result.AddRange(ballmodel.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("OBJ_REGULAR"), ballmeshes));
            if (item.Selected)
            {
                result.AddRange(ballmodel.DrawModelTreeInvert(transform, ballmeshes));
            }
            transform.Pop();
            double v24 = item.Scale.X * 0.05000000074505806;

            transform.Push();
            double v22 = item.Scale.X * 0.5 + item.Position.Y;

            transform.NJTranslate(item.Position.X, (float)v22, item.Position.Z);
            transform.NJScale(1.0f, (float)v24, 1.0f);
            result.AddRange(cylindermodel.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, null, cylindermeshes, boundsByMesh: true));
            if (item.Selected)
            {
                result.AddRange(cylindermodel.DrawModelTreeInvert(transform, cylindermeshes, boundsByMesh: true));
            }
            transform.Pop();
            transform.Push();
            transform.NJTranslate(item.Position.X, item.Position.Y + item.Scale.Z, item.Position.Z);
            result.AddRange(spheremodel.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, null, spheremeshes, boundsByMesh: true));
            if (item.Selected)
            {
                result.AddRange(spheremodel.DrawModelTreeInvert(transform, spheremeshes, boundsByMesh: true));
            }
            transform.Pop();
            return(result);
        }
Ejemplo n.º 37
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJScale(item.Scale);
            result.AddRange(model.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("OBJ_REGULAR"), meshes));
            if (item.Selected)
            {
                result.AddRange(model.DrawModelTreeInvert(transform, meshes));
            }
            transform.Pop();
            return(result);
        }
Ejemplo n.º 38
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            if (texs == null)
            {
                texs = ObjectHelper.GetTextures("objtex_common", texarr, dev);
            }
            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateObject(item.Rotation);
            result.AddRange(model.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, meshes));
            if (item.Selected)
            {
                result.AddRange(model.DrawModelTreeInvert(transform, meshes));
            }
            transform.Pop();
            return(result);
        }
        //
        private void PrepareState()
        {
            if (m_Initialized)
            {
                if (PARTICLES_COUNT != m_PositionBuffer.Data.Length)
                {
                    Position = m_PositionBuffer.Data = new Vector4[PARTICLES_COUNT];
                    Dimension = m_DimensionBuffer.Data = new Vector4[PARTICLES_COUNT];
                    Color = m_ColorBuffer.Data = new Vector4[PARTICLES_COUNT];
                    Rotation = m_RotationBuffer.Data = new Matrix4[PARTICLES_COUNT];
                    RotationLocal = m_RotationLocalBuffer.Data = new Matrix4[PARTICLES_COUNT];

                    InitializeSystem ();
                }

                Simulate (DateTime.Now);

                switch (PublishMethod){
                case PublishMethod.AllAtOnce:

                    m_PositionBuffer.Publish ();
                    m_DimensionBuffer.Publish ();
                    m_ColorBuffer.Publish ();
                    m_RotationBuffer.Publish();
                    m_RotationLocalBuffer.Publish();

                    Publish (0, PARTICLES_COUNT);
                    break;
                case PublishMethod.Incremental:
                    {
                      m_PublishCounter %= PARTICLES_COUNT;

                        var start = m_PublishCounter;
                        var end = Math.Min(start + PublishSize, PARTICLES_COUNT);
                        var cnt = end - start;

                        m_PositionBuffer.PublishPart (start, cnt);
                        m_DimensionBuffer.PublishPart (start, cnt);
                        m_ColorBuffer.PublishPart (start, cnt);
                        m_RotationBuffer.PublishPart (start, cnt);
                        m_RotationLocalBuffer.PublishPart (start, cnt);

                      Publish (start, cnt);
                        m_PublishCounter = end;
                    }
                    break;
                default:
                    break;
                }

                return;
            }

            unsafe
            {
                m_PositionBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw };
                m_DimensionBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "dimension_buffer", Usage = BufferUsageHint.DynamicDraw };
                m_ColorBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "color_buffer", Usage = BufferUsageHint.DynamicDraw };
                m_RotationBuffer = new BufferObject<Matrix4> (sizeof(Matrix4), 0) { Name = "rotation_buffer", Usage = BufferUsageHint.DynamicDraw };
                m_RotationLocalBuffer = new BufferObject<Matrix4> (sizeof(Matrix4), 0) { Name = "rotation_local_buffer", Usage = BufferUsageHint.DynamicDraw };
            }

            ParticleStateArrayObject =
                new ArrayObject (
                    new VertexAttribute { AttributeName = "sprite_pos", Buffer = m_PositionBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float },
                    new VertexAttribute { AttributeName = "sprite_color", Buffer = m_ColorBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float },
                    new VertexAttribute { AttributeName = "sprite_dimensions", Buffer = m_DimensionBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float },
                    new VertexAttribute { AttributeName = "sprite_rotation_local", Buffer = m_RotationLocalBuffer, Size = 16, Stride = 64, Type = VertexAttribPointerType.Float },
                    new VertexAttribute { AttributeName = "sprite_rotation", Buffer = m_RotationBuffer, Size = 16, Stride = 64, Type = VertexAttribPointerType.Float }
                );

            //
            PublishSize = 100000;
            ModelScaleFactor = 1;

            TransformationStack = new MatrixStack(2);
            ProjectionStack = new MatrixStack(1);
            CameraMvp = new ModelViewProjectionParameters("", TransformationStack, ProjectionStack);

            //
            m_Manip = new OrbitManipulator (ProjectionStack);
            m_Grid = new Grid (CameraMvp);
            TransformationStack[0] = m_Manip.RT;
            TransformationStack.ValueStack[1] = Matrix4.Scale(ModelScaleFactor);

            //
            Uniforms = new UniformState
            {
                {"particle_scale_factor", () => this.ParticleScaleFactor},
                {CameraMvp}
            };

            //
            Shading = GlobalContext.Container.GetExportedValues<IShadingSetup>().FirstOrDefault();
            PrepareStateCore();

            m_Initialized = true;
            PrepareState ();
        }
Ejemplo n.º 40
0
        public override List<RenderInfo> Render(Device dev, EditorCamera camera, MatrixStack transform)
        {
            if (!camera.SphereInFrustum(Bounds))
                return EmptyRenderInfo;

            return LevelData.ObjDefs[ID].Render(this, dev, camera, transform);
        }
Ejemplo n.º 41
0
 public Tuple<List<RenderItem>, List<Light>> Inject(double time, CameraWrapper cw)
 {
     List<RenderItem> ris = new List<RenderItem>();
     List<Light> lis = new List<Light>();
     MatrixStack ms = new MatrixStack();
     this.Root(time).Inject(this.versionDictionary, time, this.MaxDepth, ms, cw, ris, lis, 0x00);
     return new Tuple<List<RenderItem>, List<Light>>(ris, lis);
 }
Ejemplo n.º 42
0
 public static BoundingSphere GetModelBounds(NJS_OBJECT model, MatrixStack transform, float scale)
 {
     return(GetModelBounds(model, transform, scale, new BoundingSphere()));
 }
Ejemplo n.º 43
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            HitResult result = HitResult.NoHit;

            v5 = (ulong)item.Scale.X;
            if (v5 != 0)
            {
                v6 = (int)v5 - 1;
                if (v6 == 0)
                {
                    transform.Push();
                    transform.NJTranslate(item.Position);
                    transform.NJRotateObject(item.Rotation);
                    result = HitResult.Min(result, modelB.CheckHit(Near, Far, Viewport, Projection, View, transform, meshesB));
                    transform.Pop();
                    return(result);
                }
                if (v6 == 1)
                {
                    transform.Push();
                    transform.NJTranslate(item.Position);
                    transform.NJRotateObject(item.Rotation);
                    result = HitResult.Min(result, modelC.CheckHit(Near, Far, Viewport, Projection, View, transform, meshesC));
                    transform.Pop();
                    return(result);
                }
            }
            else
            {
                transform.Push();
                transform.NJTranslate(item.Position);
                transform.NJRotateObject(item.Rotation);
                result = HitResult.Min(result, modelA.CheckHit(Near, Far, Viewport, Projection, View, transform, meshesA));
                transform.Pop();
                return(result);
            }
            return(result);
        }
Ejemplo n.º 44
0
        internal void DrawEntireModel()
        {
            if (!loaded)
            {
                return;
            }
            d3ddevice.SetTransform(TransformState.Projection, Matrix.PerspectiveFovRH(cam.FOV, panel1.Width / (float)panel1.Height, 1, cam.DrawDistance));
            d3ddevice.SetTransform(TransformState.View, cam.ToMatrix());
            UpdateStatusString();
            d3ddevice.SetRenderState(RenderState.FillMode, EditorOptions.RenderFillMode);
            d3ddevice.SetRenderState(RenderState.CullMode, EditorOptions.RenderCullMode);
            d3ddevice.Material = new Material {
                Ambient = Color.White.ToRawColor4()
            };
            d3ddevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black.ToRawColorBGRA(), 1, 0);
            d3ddevice.SetRenderState(RenderState.ZEnable, true);
            d3ddevice.BeginScene();

            //all drawings after this line
            EditorOptions.RenderStateCommonSetup(d3ddevice);

            MatrixStack       transform  = new MatrixStack();
            List <RenderInfo> renderList = new List <RenderInfo>();

            for (int i = 0; i < @event.Scenes[0].Entities.Count; i++)
            {
                if (@event.Scenes[0].Entities[i].Model != null)
                {
                    if (@event.Scenes[0].Entities[i].Model.HasWeight)
                    {
                        renderList.AddRange(@event.Scenes[0].Entities[i].Model.DrawModelTreeWeighted(EditorOptions.RenderFillMode, transform.Top, Textures, meshes[0][i]));
                        if (@event.Scenes[0].Entities[i] == selectedObject)
                        {
                            renderList.AddRange(@event.Scenes[0].Entities[i].Model.DrawModelTreeWeightedInvert(transform.Top, meshes[0][i]));
                        }
                    }
                    else
                    {
                        renderList.AddRange(@event.Scenes[0].Entities[i].Model.DrawModelTree(EditorOptions.RenderFillMode, transform, Textures, meshes[0][i]));
                        if (@event.Scenes[0].Entities[i] == selectedObject)
                        {
                            renderList.AddRange(@event.Scenes[0].Entities[i].Model.DrawModelTreeInvert(transform, meshes[0][i]));
                        }
                    }
                }
            }
            if (scenenum > 0)
            {
                for (int i = 0; i < @event.Scenes[scenenum].Entities.Count; i++)
                {
                    if (@event.Scenes[scenenum].Entities[i].Model != null)
                    {
                        if (@event.Scenes[scenenum].Entities[i].Model.HasWeight)
                        {
                            if (animframe != -1 && @event.Scenes[scenenum].Entities[i].Motion != null)
                            {
                                transform.Push();
                                transform.NJTranslate(@event.Scenes[scenenum].Entities[i].Motion.Models[0].GetPosition(animframe));
                            }
                            renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTreeWeighted(EditorOptions.RenderFillMode, transform.Top, Textures, meshes[scenenum][i]));
                            if (@event.Scenes[scenenum].Entities[i] == selectedObject)
                            {
                                renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTreeWeightedInvert(transform.Top, meshes[scenenum][i]));
                            }
                            if (animframe != -1 && @event.Scenes[scenenum].Entities[i].Motion != null)
                            {
                                transform.Pop();
                            }
                        }
                        else if (animframe == -1 || @event.Scenes[scenenum].Entities[i].Motion == null)
                        {
                            renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTree(EditorOptions.RenderFillMode, transform, Textures, meshes[scenenum][i]));
                            if (@event.Scenes[scenenum].Entities[i] == selectedObject)
                            {
                                renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTreeInvert(transform, meshes[scenenum][i]));
                            }
                        }
                        else
                        {
                            renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTreeAnimated(EditorOptions.RenderFillMode, transform, Textures, meshes[scenenum][i], @event.Scenes[scenenum].Entities[i].Motion, animframe));
                            if (@event.Scenes[scenenum].Entities[i] == selectedObject)
                            {
                                renderList.AddRange(@event.Scenes[scenenum].Entities[i].Model.DrawModelTreeAnimatedInvert(transform, meshes[scenenum][i], @event.Scenes[scenenum].Entities[i].Motion, animframe));
                            }
                        }
                    }
                }
                if (@event.Scenes[scenenum].Big?.Model != null)
                {
                    if (@event.Scenes[scenenum].Big.Model.HasWeight)
                    {
                        renderList.AddRange(@event.Scenes[scenenum].Big.Model.DrawModelTreeWeighted(EditorOptions.RenderFillMode, transform.Top, Textures, bigmeshes[scenenum]));
                    }
                    else if (animframe == -1)
                    {
                        renderList.AddRange(@event.Scenes[scenenum].Big.Model.DrawModelTree(EditorOptions.RenderFillMode, transform, Textures, bigmeshes[scenenum]));
                    }
                    else
                    {
                        int an = 0;
                        int fr = animframe;
                        while (an < @event.Scenes[scenenum].Big.Motions.Count && @event.Scenes[scenenum].Big.Motions[an].a.Frames < fr)
                        {
                            fr -= @event.Scenes[scenenum].Big.Motions[an].a.Frames;
                            an++;
                        }
                        if (an < @event.Scenes[scenenum].Big.Motions.Count)
                        {
                            renderList.AddRange(@event.Scenes[scenenum].Big.Model.DrawModelTreeAnimated(EditorOptions.RenderFillMode, transform, Textures, bigmeshes[scenenum], @event.Scenes[scenenum].Big.Motions[an].a, fr));
                        }
                    }
                }
                if (!eventcamera && animframe != -1 && showCameraToolStripMenuItem.Checked)
                {
                    transform.Push();
                    transform.LoadMatrix(cammatrix);
                    renderList.AddRange(cammodel.DrawModel(EditorOptions.RenderFillMode, transform, null, cammesh, true));
                    transform.Pop();
                }
            }

            RenderInfo.Draw(renderList, d3ddevice, cam);
            d3ddevice.EndScene();             //all drawings before this line
            d3ddevice.Present();
        }
Ejemplo n.º 45
0
 public abstract List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform);
Ejemplo n.º 46
0
        public override List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform)
        {
            List <RenderInfo> result = new List <RenderInfo>();

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateObject(item.Rotation);
            transform.NJTranslate(2f, 0f, 0f);
            result.AddRange(frog.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("BIG_KAERU"), frogmsh));
            if (item.Selected)
            {
                result.AddRange(frog.DrawModelTreeInvert(transform, frogmsh));
            }
            transform.Pop();
            return(result);
        }
Ejemplo n.º 47
0
        public override HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform)
        {
            HitResult result = HitResult.NoHit;

            transform.Push();
            transform.NJTranslate(item.Position);
            transform.NJRotateY(item.Rotation.Y);
            transform.NJScale((item.Scale.X + 1f), (item.Scale.Y + 1f), (item.Scale.Z + 1f));
            transform.Push();
            result = HitResult.Min(result, model.CheckHit(Near, Far, Viewport, Projection, View, transform, mesh));
            transform.Pop();
            return(result);
        }