Пример #1
0
        /*
         * /// <summary>
         * /// Test line-triangle intersection
         * /// </summary>
         * void OnDrawGizmos()
         * {
         *  if(!Application.isPlaying)
         *      return;
         *
         *  DrawPolyline.ForGizmo(new Vector3[] {_handle1.transform.position, _handle2.transform.position, _handle3.transform.position, _handle1.transform.position }, Color.white);
         *
         *  //var screenRay = SceneView.currentDrawingSceneView.camera.ScreenPointToRay(Input.mousePosition);
         *  var screenRay = new Ray(Vector3.zero, Vector3.forward);
         *  Debug.DrawRay(screenRay.origin, screenRay.direction * 1000, Color.yellow);
         *  Vector3 intersectPos;
         *  var result = Intersections.LineTriangleIntersection(screenRay, _handle1.transform.position, _handle2.transform.position,
         *      _handle3.transform.position, out intersectPos);
         *
         *  if(result == 1)
         *  {
         *      Gizmos.color = Color.red;
         *      Gizmos.DrawSphere(intersectPos, 0.1f);
         *  }
         *  else
         *      Debug.Log(result);
         * }
         */

        /// <summary>
        /// Test barycentric interpolation
        /// </summary>
        void OnDrawGizmos()
        {
            if (!Application.isPlaying)
            {
                return;
            }

            _handle1.transform.position = (Vector2)_handle1.transform.position;
            _handle2.transform.position = (Vector2)_handle2.transform.position;
            _handle3.transform.position = (Vector2)_handle3.transform.position;
            _handle4.transform.position = (Vector2)_handle4.transform.position;

            DrawPolyline.ForGizmo(new[]
            {
                _handle1.transform.position, _handle2.transform.position, _handle3.transform.position
            }, Color.white, true);

            Gizmos.color = Color.red;
            Gizmos.DrawSphere(_handle1.transform.position, 0.5f);
            Gizmos.color = Color.green;
            Gizmos.DrawSphere(_handle2.transform.position, 0.5f);
            Gizmos.color = Color.blue;
            Gizmos.DrawSphere(_handle3.transform.position, 0.5f);

            var result = Intersections.Barycentric2DCoords(_handle4.transform.position, _handle1.transform.position,
                                                           _handle2.transform.position, _handle3.transform.position);

            Debug.Log(result);

            var resultColor = new Color(result.x, result.y, result.z);

            Gizmos.color = resultColor;
            Gizmos.DrawSphere(_handle4.transform.position, 0.5f);
        }
Пример #2
0
        private void DrawChunkAndBlock(Vector2 worldPosition)
        {
            const float yOffset = 0.01f;

            if (IsMapMode())
            {
                var   chunkPos = Chunk.GetPosition(worldPosition);
                Chunk chunk;
                if (_main.Map.Map.TryGetValue(chunkPos, out chunk))
                {
                    //Draw chunk bounds
                    var chunkBounds = (Bounds)Chunk.GetBounds(chunkPos);

                    var r1 = new Vector3(chunkBounds.min.x, chunk.HeightMap[0, 0] + yOffset, chunkBounds.min.z);
                    var r2 = new Vector3(chunkBounds.max.x, chunk.HeightMap[chunk.GridSize - 1, 0] + yOffset, chunkBounds.min.z);
                    var r3 = new Vector3(chunkBounds.min.x, chunk.HeightMap[0, chunk.GridSize - 1] + yOffset, chunkBounds.max.z);
                    var r4 = new Vector3(chunkBounds.max.x, chunk.HeightMap[chunk.GridSize - 1, chunk.GridSize - 1] + yOffset,
                                         chunkBounds.max.z);

                    DrawPolyline.ForGizmo(GetChunkPolyBound(chunk, yOffset), Color.red);

                    //Draw block bounds
                    var blockPos = (Vector2i)worldPosition;
                    var localPos = Chunk.GetLocalPosition(worldPosition);
                    r1 = new Vector3(blockPos.X, chunk.HeightMap[localPos.X, localPos.Z] + yOffset, blockPos.Z);
                    r2 = new Vector3(blockPos.X + 1, chunk.HeightMap[localPos.X + 1, localPos.Z] + yOffset, blockPos.Z);
                    r3 = new Vector3(blockPos.X, chunk.HeightMap[localPos.X, localPos.Z + 1] + yOffset, blockPos.Z + 1);
                    r4 = new Vector3(blockPos.X + 1, chunk.HeightMap[localPos.X + 1, localPos.Z + 1] + yOffset, blockPos.Z + 1);

                    DrawRectangle.ForDebug(r1, r2, r4, r3, Color.red);

                    //Draw block normal
                    var n1          = chunk.NormalMap[localPos.X, localPos.Z];
                    var blockCenter = (r1 + r2 + r3 + r4) / 4;
                    DrawArrow.ForDebug(blockCenter, n1, Color.red);
                }
            }
            else                //Layout mode
            {
                //Draw chunk bounds
                var chunkPos    = Chunk.GetPosition(worldPosition);
                var chunkBounds = Chunk.GetBounds(chunkPos);
                DrawRectangle.ForGizmo(chunkBounds, Color.red);

                //Draw block bounds
                DrawRectangle.ForGizmo(new Bounds2i((Vector2i)worldPosition, 1, 1), Color.red);
            }
        }