金币2808
积分9844
注册时间2016-12-2
最后登录2024-11-23
|
Code:
- public void Draw3DBox(FMinimalViewInfo POV, AActor actor)
- {
- float l, w, h, o;
- l = 60f; w = 60f; h = 160f; o = 50f; //box size for standing player
-
- float zOffset = -100f;
-
- if (actor.Type == ActorTypes.Vehicle) //vehicles have a bigger box
- {
- zOffset = 50;
- l = 200f; w = 160f; h = 80f; o = 0f;
- }
-
- //build box
- Vector3 p00 = new Vector3(o, -w / 2,0f);
- Vector3 p01 = new Vector3(o, w / 2, 0f);
- Vector3 p02 = new Vector3(o - l, w / 2, 0f);
- Vector3 p03 = new Vector3(o - l, -w / 2, 0f);
-
- //rotate rectangle to match actor rotation
- float theta1 = 2.0f * (float)Math.PI * (actor.Rotation.Y) / 180.0f;
- Matrix rotM = Matrix.RotationZ((float)(theta1 / 2)); // rotate around Z-axis
-
- Vector3 curPos = new Vector3(actor.Location.X, actor.Location.Y, actor.Location.Z + zOffset);
- p00 = Vector3.TransformCoordinate(p00, rotM) + curPos;
- p01 = Vector3.TransformCoordinate(p01, rotM) + curPos;
- p02 = Vector3.TransformCoordinate(p02, rotM) + curPos;
- p03 = Vector3.TransformCoordinate(p03, rotM) + curPos;
-
- RawVector2 s00 = W2S(p00, POV);
- RawVector2 s01 = W2S(p01, POV);
- RawVector2 s02 = W2S(p02, POV);
- RawVector2 s03 = W2S(p03, POV);
- RawVector2[] square0 = { s00, s01, s02, s03, s00 };
-
- DrawLines(square0);
-
- // top rectangle
- p00.Z += h; s00 = W2S(p00, POV);
- p01.Z += h; s01 = W2S(p01, POV);
- p02.Z += h; s02 = W2S(p02, POV);
- p03.Z += h; s03 = W2S(p03, POV);
-
- RawVector2[] square1 = { s00, s01, s02, s03, s00 };
- DrawLines(square1);
-
- // upper/lower rectangles get connected
- DrawLine(new RawVector2(square0[0].X, square0[0].Y), new RawVector2(square1[0].X, square1[0].Y));
- DrawLine(new RawVector2(square0[1].X, square0[1].Y), new RawVector2(square1[1].X, square1[1].Y));
- DrawLine(new RawVector2(square0[2].X, square0[2].Y), new RawVector2(square1[2].X, square1[2].Y));
- DrawLine(new RawVector2(square0[3].X, square0[3].Y), new RawVector2(square1[3].X, square1[3].Y));
- }
复制代码
Code:
- public void DrawLines(RawVector2[] point0)
- {
- if (point0.Length < 2)
- return;
-
- for (int x = 0; x < point0.Length - 1; x++)
- DrawLine(point0[x], point0[x + 1],);
- }
复制代码
|
|