private bool TestColl(Vector3 v) { v.X = -v.X; v.Y = -v.Y; v.Z = -v.Z; bool flag = false; foreach (Co2 current in coll.alCo2) { if (current.Min.X <= v.X && current.Min.Y <= v.Y && current.Min.Z <= v.Z && v.X <= current.Max.X && v.Y <= current.Max.Y && v.Z <= current.Max.Z) { int num = 0; int num2 = 0; for (int i = current.Co3frm; i < current.Co3to; i++) { Co3 co = coll.alCo3[i]; num += ((Plane.DotCoordinate(coll.alCo5[co.PlaneCo5], v) > 0f) ? 1 : 0); num2++; } flag |= (num2 != 0 && num == num2); } } return(flag); }
private void p1_Paint(object sender, PaintEventArgs e) { Size clientSize = p1.ClientSize; float aspect = (clientSize.Height != 0) ? (clientSize.Width / (float)clientSize.Height) : 0f; device.SetTransform(TransformState.World, Matrix.Identity); device.SetTransform(TransformState.View, Matrix.LookAtLH(CameraEye, CameraEye + Target, CameraUp)); device.SetTransform(TransformState.Projection, Matrix.PerspectiveFovLH(Convert.ToSingle(fov.Value) / 180f * 3.14159f, aspect, Convert.ToSingle(50), Convert.ToSingle(5000000))); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, p1.BackColor, 1f, 0); device.BeginScene(); device.SetTextureStageState(0, TextureStage.ColorOperation, cbVertexColor.Checked ? TextureOperation.Modulate : TextureOperation.SelectArg1); device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Texture); device.SetTextureStageState(0, TextureStage.ColorArg2, TextureArgument.Diffuse); device.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate); device.SetTextureStageState(0, TextureStage.AlphaArg1, TextureArgument.Texture); device.SetTextureStageState(0, TextureStage.AlphaArg2, TextureArgument.Diffuse); device.SetRenderState(RenderState.FogEnable, cbFog.Checked); if (vb != null) { device.SetStreamSource(0, vb, 0, CustomVertex.PositionColoredTextured.Size); device.VertexFormat = CustomVertex.PositionColoredTextured.Format; foreach (RIB current in alib) { if (current.ib != null && current.render) { device.SetRenderState(RenderState.FogEnable, cbFog.Checked && current.name.Equals("MAP")); device.Indices = current.ib; device.SetTexture(0, altex[current.texi & 65535]); device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, cntVerts, 0, current.cnt / 3); } } } if (tsbBallGame.Checked) { var list = new List <CustomVertex.PositionColored>(); foreach (Ball current2 in alBall) { list.Add(new CustomVertex.PositionColored(current2.pos, Color.Red.ToArgb())); } if (list.Count != 0) { device.VertexFormat = CustomVertex.PositionColored.Format; device.SetRenderState(RenderState.PointScaleEnable, true); device.SetRenderState(RenderState.PointSize, 10f); device.SetRenderState(RenderState.PointScaleA, 0f); device.SetRenderState(RenderState.PointScaleB, 0f); device.SetRenderState(RenderState.PointScaleC, 1f); device.DrawUserPrimitives(PrimitiveType.PointList, list.Count, list.ToArray()); device.SetRenderState(RenderState.PointScaleEnable, false); } } if (tsbShowColl.Checked) { vut.Clear(); foreach (Co2 current3 in coll.alCo2) { for (int i = current3.Co3frm; i < current3.Co3to; i++) { Co3 co = coll.alCo3[i]; int clr = Color.Yellow.ToArgb(); if (0 <= co.vi0 && 0 <= co.vi1 && 0 <= co.vi2) { vut.AddTri(coll.alCo4[co.vi0], coll.alCo4[co.vi2], coll.alCo4[co.vi1], clr); if (0 <= co.vi3) { vut.AddTri(coll.alCo4[co.vi3], coll.alCo4[co.vi2], coll.alCo4[co.vi0], clr); } } } } if (vut.alv.Count != 0) { device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.SelectArg1); device.SetTextureStageState(0, TextureStage.ColorArg1, TextureArgument.Diffuse); device.SetRenderState(RenderState.AlphaBlendEnable, false); device.SetRenderState(RenderState.Lighting, true); device.SetRenderState(RenderState.AlphaTestEnable, false); device.SetRenderState(RenderState.ShadeMode, ShadeMode.Gouraud); device.SetRenderState(RenderState.NormalizeNormals, true); device.EnableLight(0, true); Light light = device.GetLight(0); light.Direction = Target; light.Diffuse = new Color4(-1); device.SetLight(0, light); Material material = device.Material; device.Material = material; Matrix value = Matrix.Scaling(-1f, -1f, -1f); device.SetTransform(TransformState.World, value); device.VertexFormat = CustomVertex.PositionNormalColored.Format; device.DrawUserPrimitives(PrimitiveType.TriangleList, vut.alv.Count / 3, vut.alvtmp = vut.alv.ToArray()); device.SetRenderState(RenderState.AlphaBlendEnable, true); device.SetRenderState(RenderState.Lighting, false); device.SetRenderState(RenderState.AlphaTestEnable, true); } } device.EndScene(); device.Present(); }