Exemple #1
0
        private void LoadParticleInstance()
        {
            float pSize = 0;

            switch (_state)
            {
            case INSTANCE_MODE.DEBUG:
                pSize = _DebugBBSize;
                break;

            default:
                pSize = _BBSize;
                break;
            }

            List <BillboardVertex> vertices = new List <BillboardVertex>();
            List <short>           indices  = new List <short>();
            short baseIndex = (short)0;

            BillboardVertex vertex = new BillboardVertex();

            vertex.Position = new Vector4(1f, 1f, 1f, 1f);
            vertex.TexCoord = new Vector4(0.0f, 0.0f, -pSize, pSize);
            vertices.Add(vertex);

            vertex.Position = new Vector4(1, 1, 1, 1);
            vertex.TexCoord = new Vector4(1.0f, 0.0f, pSize, pSize);
            vertices.Add(vertex);

            vertex.Position = new Vector4(1, 1, 1, 0);
            vertex.TexCoord = new Vector4(0.0f, 1.0f, -pSize, -pSize);
            vertices.Add(vertex);

            vertex.Position = new Vector4(1, 1, 1, 0);
            vertex.TexCoord = new Vector4(1.0f, 1.0f, pSize, -pSize);
            vertices.Add(vertex);

            indices.Add((short)(0 + baseIndex));
            indices.Add((short)(1 + baseIndex));
            indices.Add((short)(2 + baseIndex));
            indices.Add((short)(2 + baseIndex));
            indices.Add((short)(1 + baseIndex));
            indices.Add((short)(3 + baseIndex));

            _vertexBuffer = new VertexBuffer(_graphicsDevice, typeof(BillboardVertex), vertices.Count, BufferUsage.WriteOnly);
            _vertexBuffer.SetData(vertices.ToArray());

            _indexBuffer = new IndexBuffer(_graphicsDevice, IndexElementSize.SixteenBits, indices.Count, BufferUsage.WriteOnly);
            _indexBuffer.SetData(indices.ToArray());
        }
        public void CreateBillboardVerticesFromList(List<Tuple<Vector3, Vector3>> treeList)
        {
            if (!treeList.Any())
                return;

            var billboardVertices = new BillboardVertex[treeList.Count * 6];
            int i = 0;
            var random = new Random();
            foreach (var t in treeList)
                createOne(
                    ref i,
                    billboardVertices,
                    t.Item1 + _world.TranslationVector,
                    t.Item2,
                    0.0001f + (float) random.NextDouble());

            _vertexBuffer = Buffer.Vertex.New(Effect.GraphicsDevice, billboardVertices);
            _vertexInputLayout = VertexInputLayout.FromBuffer(0, _vertexBuffer);
        }
        private void createOne(
            ref int i,
            BillboardVertex[] bv,
            Vector3 p,
            Vector3 n,
            float rnd)
        {
            n.Normalize();
            bv[i++] = new BillboardVertex(p, n, new Vector2(0, 0), rnd);
            bv[i++] = new BillboardVertex(p, n, new Vector2(1, 0), rnd);
            bv[i++] = new BillboardVertex(p, n, new Vector2(1, 1), rnd);

            bv[i++] = new BillboardVertex(p, n, new Vector2(0, 0), rnd);
            bv[i++] = new BillboardVertex(p, n, new Vector2(1, 1), rnd);
            bv[i++] = new BillboardVertex(p, n, new Vector2(0, 1), rnd);
        }
        public override void InitTask()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();

            Graphs.Add(graphControler);
            graphControler.SetupParams(new GraphParameters(new Vector3(0, -20), "Test"));

            var customFont  = FontsGenerator.GetOrCreateFont("Arial", 32);
            var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800);

            mainTexture.name = "Target";
            var dotTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800);

            mainTexture.name = "Dot";
            var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 800, 800);

            selectFrame.name = "SelectFrame";

            var textTextureFactory = new TextTextureFactory(customFont, 0);

            var baseScale = Vector2.one;

            var         imageParameters       = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true);
            var         selectFrameParameters = new BillboardParameters(selectFrame, scale: baseScale * 6f, isMonoColor: true, useCache: false);
            var         text           = textTextureFactory.MakeTextTexture($"Select Me", true);
            const float scale          = 10;
            var         textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);

            _selectableVertex = graphControler.SpawnVertex <SelectableVertex, SelectableVertexParameters>(
                new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, new Vector3(-20, 20)));

            var dotImageParameters = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true);

            text           = textTextureFactory.MakeTextTexture($"Dot 1", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _dot1          = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(0, 20)));

            text           = textTextureFactory.MakeTextTexture($"Dot 2", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _dot2          = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(20, 20)));

            text           = textTextureFactory.MakeTextTexture($"Move me", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _moveVertex    = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(30, 20, -10)));

            text           = textTextureFactory.MakeTextTexture($"Click me", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            var clickVeretex = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-50, 20, -10)));

            var snowPref = Resources.Load <GameObject>(@"Prefabs\Snowflake");

            clickVeretex.gameObject.AddComponent <Button3D>().Action = (g) => { _clickCount++; Destroy(Instantiate(snowPref, clickVeretex.transform.position, Quaternion.identity), 2); };

            var colors = new List <Color>(7)
            {
                new Color(1f, 0f, 0f),
                new Color(1f, 127f / 255f, 0f),
                new Color(1f, 1f, 0f),
                new Color(0f, 1f, 0f),
                new Color(0f, 0f, 1f),
                new Color(75f / 255f, 0f, 130f / 255f),
                new Color(143f, 0f, 1f),
            };

            var edgeTypes = new List <(Type type, EdgeParameters parameters)>(1)
            {
                (typeof(StretchableEdge), new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.white), new SpringParameters(1, 10)))
            };

            var player = CreatePlayer();

            player.SetupParams(new PlayerParameters(Vector3.zero, Vector3.zero, SceneParametersContainer.PlayerSpeed, 20, isVR: SceneParametersContainer.IsVR,
                                                    new ToolConfig[4]
            {
                new ToolConfig(typeof(SelectItemTool), new SelectItemToolParams(colors)),
                new ToolConfig(typeof(GrabItemTool), new GrabItemToolParams()),
                new ToolConfig(typeof(EdgeCreaterTool), new EdgeCreaterToolParams(edgeTypes)),
                new ToolConfig(typeof(ClickTool), new ClickToolParams())
            }));
        }
        public GraphForBillboardVertexes CreateGraph()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();

            graph.AddComponent <Button3D>().Action = (g) => graphControler.StartForceBasedLayout(1000);
            Graphs.Add(graphControler);
            graphControler.SetupParams(new GraphParameters(new Vector3(-69, -15, -30), "Click me"));

            var customFont  = Resources.Load <Font>(_fontPath);
            var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 200, 200);

            mainTexture.name = "Target";

            var textTextureFactory = new TextTextureFactory(customFont, 32);
            var resizedTetxure     = Texture2DExtension.ResizeTexture(mainTexture, 200, 200);

            var baseScale = Vector2.one;

            var imageParameters = new BillboardParameters(resizedTetxure, scale: baseScale * 3f, useCache: true);

            var stretchableEdgeMaterialParameters = new StretchableEdgeMaterialParameters(Color.white, true);
            var edgeParameters = new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.yellow, true), new SpringParameters(1, 5));
            var coordinates    = new Vector3[26] {
                new Vector3(-91.62799f, -2.3942585f, -43.161083f),
                new Vector3(-91.138885f, -3.3022366f, -17.54464f),
                new Vector3(-68.31055f, -9.711845f, -29.303394f),
                new Vector3(-71.31007f, -2.7437487f, -56.661026f),
                new Vector3(-45.411583f, -2.9353018f, -42.584347f),
                new Vector3(-47.30028f, -3.1969986f, -22.738922f),
                new Vector3(-64.77525f, -3.20299f, -2.5527115f),
                new Vector3(-49.3282f, 5.356124f, -2.7157516f),
                new Vector3(-37.920048f, 5.7275085f, -30.361862f),
                new Vector3(-52.707493f, 8.093277f, -57.873806f),
                new Vector3(-88.294876f, 7.605483f, -57.47967f),
                new Vector3(-81.45683f, 6.2511196f, -1.4397621f),
                new Vector3(-105.84165f, 6.152034f, -28.007107f),
                new Vector3(-99.75531f, 16.45427f, -11.093414f),
                new Vector3(-38.78393f, 16.683071f, -14.812604f),
                new Vector3(-40.808224f, 15.8126135f, -44.379215f),
                new Vector3(-73.01358f, 14.908555f, -55.7931f),
                new Vector3(-68.13217f, 15.000669f, 1.9544525f),
                new Vector3(-83.44349f, 25.460217f, -8.76181f),
                new Vector3(-59.4664f, 24.522339f, -10.350107f),
                new Vector3(-47.37295f, 23.873238f, -31.69215f),
                new Vector3(-92.189575f, 24.484436f, -28.520731f),
                new Vector3(-81.99469f, 23.73766f, -46.882977f),
                new Vector3(-56.52922f, 23.624348f, -43.66665f),
                new Vector3(-72.91645f, 30.9808f, -30.28012f),
                new Vector3(-93f, 20f, -42f),
            };

            var currentVertex = new BillboardVertex[coordinates.Length];

            for (var i = 0; i < coordinates.Length; ++i)
            {
                currentVertex[i] = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(new BillboardVertexParameters(new[] { imageParameters }, coordinates[i]));
            }

            currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);

            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);
            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);

            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters);
            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);

            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);
            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters);

            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters);

            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters);
            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters);

            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);
            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);

            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);

            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);
            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);
            currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);
            currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);

            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);

            var         text           = textTextureFactory.MakeTextTexture($"Click me", true);
            const float scale          = 20;
            var         textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale));

            return(graphControler);
        }