Beispiel #1
0
        SceneNode CreateAnnotation(Vector3 start, Vector3 end, Vector3 offset, String text)
        {
            var line = GeometryBuilder.CreateLine(start + offset, end + offset);

            var mesh     = FontManager.Instance().CreateMesh(text);
            var textNode = new PrimitiveSceneNode(mesh, null);

            float scale = 0.015f;

            textNode.SetTransform(Matrix4.makeRotationAxis(Vector3.UNIT_X, 3.14159f * 0.5f) * Matrix4.makeScale(scale, scale, 1));
            textNode.ComputeBoundingBox(Matrix4.Identity);
            float halfW = textNode.GetWorldBBox().getHalfSize().x;
            var   dist  = end.distanceTo(start);
            float ratio = (dist * 0.5f - halfW) / dist;

            textNode.SetTransform(Matrix4.makeTranslation((start + end) * ratio + offset) * textNode.GetTransform());


            var line2 = GeometryBuilder.CreateLine(start, start + offset + new Vector3(0, 0, -2));
            var line3 = GeometryBuilder.CreateLine(end, end + offset + new Vector3(0, 0, -2));

            GroupSceneNode group = new GroupSceneNode();

            group.AddNode(new PrimitiveSceneNode(line, null));
            group.AddNode(new PrimitiveSceneNode(line2, null));
            group.AddNode(new PrimitiveSceneNode(line3, null));
            group.AddNode(textNode);

            return(group);
        }