// Draw public void Draw(Camera cam) { gpu.SetVertexBuffer(vertexBuffer); gpu.Indices = indexBuffer; int obj_cnt = objex.Count, o; o = 0; while (o < obj_cnt) { Obj3D ob = objex[o]; #region // Reminder_To_Set_Lighting_Draw_Params_Later for custom lighting class and effect // TO DO (later): // if (DrawDepth) light.SetDepthParams(ob.transform); // for drawing to a depth shader // else if (DrawShadows) light.SetShadowParams(ob.transform, cam); // for drawing shadows (using depth shader results) // else light.SetDrawParams(ob.transform,cam,ob.tex); // regular drawing #endregion // Set shader paramaters: basic_effect.Texture = ob.tex; basic_effect.World = ob.transform; basic_effect.View = cam.view; basic_effect.Projection = cam.proj; basic_effect.FogEnabled = true; basic_effect.FogStart = 15; basic_effect.FogEnd = 500; basic_effect.FogColor = new Vector3(0f, 0f, 0f); foreach (EffectPass pass in basic_effect.CurrentTechnique.Passes) { pass.Apply(); gpu.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, ob.start_index, ob.triangle_count); o++; } } }
// BASIC CUBE public void AddCube(float width, float length, float height, Vector3 mid_position, Vector3 rotation, string textureFile, Rectangle?sourceRect) { Obj3D obj = new Obj3D(); obj.AddCube(mid_position, new Vector3(width, height, length), rotation, textureFile, sourceRect); objex.Add(obj); }
// BASIC OBJECTS THAT YOU CAN ADD ------------------------------ // BASIC FLOOR public void AddFloor(float width, float length, Vector3 mid_position, Vector3 rotation, string textureFile, Rectangle?sourceRect) { Obj3D obj = new Obj3D(); obj.AddQuad(mid_position, width, length, rotation, textureFile, sourceRect); objex.Add(obj); }
// Basic Cube public void AddCube(float width, float length, float height, Vector3 mid_position, Vector3 rotation, string textureFile, Rectangle?sourceRect) { Obj3D obj = new Obj3D(); obj.AddCube(mid_position, new Vector3(width, height, length), rotation, textureFile, sourceRect); Console.WriteLine("adding cube with texture " + textureFile); objex.Add(obj); Console.WriteLine("Added!"); }
// ADDING BASIC OBJECTS -------------------------- // Basic Floor public void AddFloor(float width, float length, Vector3 mid_position, Vector3 rotation, string textureFile, Rectangle?sourceRect) { Obj3D obj = new Obj3D(); obj.AddQuad(mid_position, width, length, rotation, textureFile, sourceRect); Console.WriteLine("adding floor with texture " + textureFile); objex.Add(obj); Console.WriteLine("Added!"); }
/// <summary> /// This loads an *.obj file which has been embedded in the SciChart.Examples.ExternalDependencies as an /// embedded resource. Valid obj files include the values provided by <see cref="Obj3D"/> type /// </summary> /// <param name="objResource">The resource to load</param> /// <returns>A byte[] array representing the obj file</returns> public byte[] LoadWavefrontObject(Obj3D objResource) { var asm = GetType().Assembly; var resourceString = asm.GetManifestResourceNames().Single(x => x.Contains(objResource.Value)); using (var stream = asm.GetManifestResourceStream(resourceString)) using (var ms = new MemoryStream()) { stream.CopyTo(ms); return(ms.ToArray()); } }
private void ReadObj3D(uint addr, out Obj3D obj) { obj = new Obj3D(); obj.PtrNext = ReadPtrAndAdvance(ref addr); obj.Flags = ReadU16AndAdvance(ref addr); obj.XPos = ReadS32AndAdvance(ref addr); obj.ZPos = ReadS32AndAdvance(ref addr); obj.YPos = ReadS32AndAdvance(ref addr); obj.Width = ReadS32AndAdvance(ref addr); obj.Depth = ReadS32AndAdvance(ref addr); obj.Height = ReadS32AndAdvance(ref addr); obj.prevSpeed = ReadS32AndAdvance(ref addr); obj.XOrig = ReadS32AndAdvance(ref addr); obj.ZOrig = ReadS32AndAdvance(ref addr); obj.YOrig = ReadS32AndAdvance(ref addr); obj.XVel = ReadS32AndAdvance(ref addr); obj.ZVel = ReadS32AndAdvance(ref addr); obj.YVel = ReadS32AndAdvance(ref addr); obj.XUnk = ReadS32AndAdvance(ref addr); obj.ZUnk = ReadS32AndAdvance(ref addr); obj.YUnk = ReadS32AndAdvance(ref addr); addr += 12; obj.PLC = ReadPtrAndAdvance(ref addr); obj.Sprite = ReadS16AndAdvance(ref addr); obj.SpriteScale = ReadS16AndAdvance(ref addr); obj.PtrMainFunc = ReadPtrAndAdvance(ref addr); obj.unks0 = ReadS16AndAdvance(ref addr); obj.unks1 = ReadS16AndAdvance(ref addr); obj.Mode = ReadS16AndAdvance(ref addr); obj.AccelCounter = ReadByteAndAdvance(ref addr); obj.PrevControls = ReadByteAndAdvance(ref addr); obj.CurControls = ReadByteAndAdvance(ref addr); obj.ChargeCtr = ReadByteAndAdvance(ref addr); obj.LastWasCharge = ReadByteAndAdvance(ref addr); obj.InvincCount = ReadByteAndAdvance(ref addr); obj.unk5 = ReadS32AndAdvance(ref addr); obj.Damage = ReadS32AndAdvance(ref addr); obj.State = ReadByteAndAdvance(ref addr); obj.ControlsLocked = ReadByteAndAdvance(ref addr); obj.unkb0 = ReadByteAndAdvance(ref addr); obj.BreachCtr = ReadByteAndAdvance(ref addr); obj.ScreenX = ReadS32AndAdvance(ref addr); obj.ScreenY = ReadS32AndAdvance(ref addr); obj.unkb1 = ReadByteAndAdvance(ref addr); obj.unkb2 = ReadByteAndAdvance(ref addr); }
private void GetEcco3DScreenCoords(Obj3D obj, out int X, out int Y, out int Z) { X = 160 + ((obj.XPos >> 0xC) - Cam3D.X); Y = 112 - ((obj.YPos >> 0xC) - Cam3D.Y); Z = _top + 112 - ((obj.ZPos >> 0xC) - Cam3D.Z); }