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(); }
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; }
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; }
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; }
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; }
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); }
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); }
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); }
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); }
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; }
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(); }
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); }
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; }
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; }
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; }
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); }
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; }
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; }
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 (); }
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; }
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; }
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; }
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); }
public ModelDrawer(MatrixStack stack) { this.stack = stack; }
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)); }
public abstract HitResult CheckHit(SETItem item, Vector3 Near, Vector3 Far, Viewport Viewport, Matrix Projection, Matrix View, MatrixStack transform);
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); }
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); }
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); }
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(); } } } }
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); }
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); }
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); }
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); }
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 (); }
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); }
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); }
public static BoundingSphere GetModelBounds(NJS_OBJECT model, MatrixStack transform, float scale) { return(GetModelBounds(model, transform, scale, new BoundingSphere())); }
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); }
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(); }
public abstract List <RenderInfo> Render(SETItem item, Device dev, EditorCamera camera, MatrixStack transform);
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); }
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); }