Beispiel #1
0
        public override void Run(RenderControl render)
        {
            var geometry = FontManager.Instance().CreateMesh("AnyCAD!");
            var node     = new PrimitiveSceneNode(geometry, null);

            render.ShowSceneNode(node);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        public override void Run(RenderControl render)
        {
            var arc    = SketchBuilder.MakeArcOfCircle(new GCirc(GP.XOY(), 10), 0, Math.PI);
            var points = new GPntList
            {
                new GPnt(0, 0, 0),
                new GPnt(2, 5, 0),
                new GPnt(15, 15, 0)
            };
            var line = SketchBuilder.MakeBSpline(points);

            var extrema = new ExtremaCurveCurve();

            extrema.Initialize(arc, line);
            int count = extrema.GetPointCount();

            for (int ii = 0; ii < count; ++ii)
            {
                var point = extrema.GetPoint1(ii);
                var node  = new PrimitiveSceneNode(GeometryBuilder.AtomSphere(), EnumPrimitiveType.TRIANGLES, null);
                node.SetTransform(Matrix4.makeTranslation(Vector3.From(point)));
                render.ShowSceneNode(node);
            }

            render.ShowShape(arc, Vector3.Red);
            render.ShowShape(line, Vector3.Green);
        }
Beispiel #4
0
        private void NewForm3D_Load(object sender, EventArgs e)
        {
            var box      = GeometryBuilder.CreateBox(100, 200, 300);
            var material = MeshPhongMaterial.Create("simple");

            material.SetColor(ColorTable.Red);
            var node = new PrimitiveSceneNode(box, material);

            mRenderView.ShowSceneNode(node);

            mRenderView.SetStandardView(EnumStandardView.DefaultView);
            mRenderView.ZoomAll();

            // 转发给事件处理
            mRenderView.SetAfterRenderingCallback(() => {
                if (UpdateTagEvent != null)
                {
                    UpdateTagEvent();
                }
            });

            // 创建两个自定义标注
            var mTagCtl = new MyTagControl(mRenderView, new Vector3(200, 300, 400), Vector3.Zero);

            UpdateTagEvent += mTagCtl.UpdateLayout;

            var mTagCtl2 = new MyTagControl(mRenderView, new Vector3(-100, -200, 100), Vector3.Zero);

            UpdateTagEvent += mTagCtl2.UpdateLayout;
        }
        public void Create(RenderControl render)
        {
            // 随便构造些点
            float offset = 10.0f;

            for (int ii = 0; ii < 10; ++ii)
            {
                for (int jj = 0; jj < ii; ++jj)
                {
                    mPoints.Add(new Vector3(jj * offset, 100, ii * offset));
                }
            }


            mMotionTrail = new ParticleSceneNode((uint)mPoints.Count, ColorTable.Green, 3.0f);

            mCurrentIdx = 0;

            render.ShowSceneNode(mMotionTrail);

            var lineMaterial = BasicMaterial.Create("myline");

            lineMaterial.SetColor(ColorTable.Hex(0xFF0000));
            var line = GeometryBuilder.CreateLine(Vector3.Zero, new Vector3(1, 0, 0));

            mLineNode = new PrimitiveSceneNode(line, lineMaterial);
            mLineNode.SetTransform(MakeTransform(mStart, mPoints[0]));
            mLineNode.RequstUpdate();
            render.ShowSceneNode(mLineNode);
        }
        public override void Run(RenderControl render)
        {
            // add a plane
            var mMaterial1 = MeshPhongMaterial.Create("phong.texture");

            mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide);
            var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg"));

            mMaterial1.SetColorMap(texture);

            var plane     = GeometryBuilder.CreatePlane(500, 500);
            var planeNode = new PrimitiveSceneNode(plane, mMaterial1);

            planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -2.5f)));
            planeNode.SetPickable(false);

            render.ShowSceneNode(planeNode);



            mDevice = new PrimitiveSceneNode(GeometryBuilder.CreateSphere(5), null);
            render.ShowSceneNode(mDevice);

            mCome = new RigidAnimation();
            mCome.Add(new MoveAnimationClip(mDevice, mWorkingPosition, 0, 5));

            mGo = new RigidAnimation();
            mGo.Add(new MoveAnimationClip(mDevice, new Vector3(-200, -200, 0), 0, 5));
        }
        public override void Run(RenderControl render)
        {
            // Create material
            var mMaterial1 = MeshPhongMaterial.Create("phong.texture");

            mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide);
            var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg"));

            mMaterial1.SetColorMap(texture);

            var plane     = GeometryBuilder.CreatePlane(500, 500);
            var planeNode = new PrimitiveSceneNode(plane, mMaterial1);

            planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -100)));
            render.ShowSceneNode(planeNode);

            var box     = GeometryBuilder.CreateBox(100, 100, 200);
            var boxNode = new PrimitiveSceneNode(box, mMaterial1);

            render.ShowSceneNode(boxNode);

            var sphere     = GeometryBuilder.CreateSphere(50, 32, 32);
            var sphereNode = new PrimitiveSceneNode(sphere, mMaterial1);

            sphereNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, 150)));

            render.ShowSceneNode(sphereNode);
        }
Beispiel #8
0
        public override void Run(RenderControl render)
        {
            if (!ReadData())
            {
                return;
            }

            var material = MeshPhongMaterial.Create("cae-material");

            material.GetTemplate().SetVertexColors(true);
            material.SetFaceSide(EnumFaceSide.DoubleSide);


            var position = BufferAttribute.Create(EnumAttributeSemantic.Position, EnumAttributeComponents.Three, mPositions);
            var color    = BufferAttribute.Create(EnumAttributeSemantic.Color, EnumAttributeComponents.Three, mColors);

            BufferGeometry geometry = new BufferGeometry();

            geometry.AddAttribute(position);
            geometry.AddAttribute(color);

            NormalCalculator.ComputeVertexNormals(geometry);

            var node = new PrimitiveSceneNode(geometry, EnumPrimitiveType.TRIANGLES, material);

            node.SetPickable(false);

            PaletteWidget pw = new PaletteWidget();

            pw.Update(mColorTable);

            render.ShowSceneNode(pw);

            render.ShowSceneNode(node);
        }
        public override void Run(RenderControl render)
        {
            CreateShader();

            mMaterial = MaterialManager.Instance().FindInstance("blackHole_instance");
            if (mMaterial == null)
            {
                var template = MaterialManager.Instance().CreateTemplateByName("blackHole_shader_template", shaderName);
                mMaterial = MaterialManager.Instance().Create("blackHole_instance", template);
            }

            var plane = GeometryBuilder.CreatePlane(2, 2);
            var node  = new PrimitiveSceneNode(plane, mMaterial);

            node.SetPickable(false);

            render.ShowSceneNode(node);
        }
        public override void Run(RenderControl render)
        {
            if (!ReadData())
            {
                return;
            }

            var material = PointsMaterial.Create("point-material");

            material.GetTemplate().SetVertexColors(true);

            var geometry = GeometryBuilder.CreatePoints(new Float32Array(mPositions), new Float32Array(mColors));

            var node = new PrimitiveSceneNode(geometry, material);

            //node.SetPickable(false);

            render.ShowSceneNode(node);
        }
        public override void Run(RenderControl render)
        {
            // prepare points data
            const int COUNT  = 300;
            var       buffer = new Float32Buffer(0);

            buffer.Reserve(COUNT * 3);

            var colors = new Float32Buffer(0);

            Random random = new Random();

            for (int i = 0; i < COUNT; i++)
            {
                float x = 2000 * (float)random.NextDouble() - 1000;
                float y = 2000 * (float)random.NextDouble() - 1000;
                float z = 2000 * (float)random.NextDouble() - 1000;

                buffer.Append(x, y, z);
                colors.Append((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble());
            }

            var primitive = GeometryBuilder.CreatePoints(new Float32Array(buffer), new Float32Array(colors));

            // prepare point material
            var material = PointsMaterial.Create("points-material");

            material.SetSizeAttenuation(false);
            material.SetPointSize(15.0f);
            material.SetColorMap(ImageTexture2D.Create(GetResourcePath("textures/snowflake7_alpha.png")));
            material.SetTransparent(true);

            // enable vertex color
            material.GetTemplate().SetVertexColors(true);


            // add to scene
            var node = new PrimitiveSceneNode(primitive, material);

            node.SetPickable(false);
            render.ShowSceneNode(node);
        }
Beispiel #12
0
        public override void Run(RenderControl render)
        {
            mGeometry = GeometryBuilder.CreatePlane(20000, 20000, worldWidth - 1, worldDepth - 1);
            var position = mGeometry.GetGeometry().GetAttribute(0);

            position.SetDataUsage(EnumBufferDataUsage.DYNAMIC_DRAW);
            var mPosition = new Float32Array(position.GetData());

            for (uint i = 0; i < position.GetCount() / 3; i++)
            {
                float z = (float)(35 * Math.Sin(i / 2));
                mPosition.SetValue(i * 3 + 2, z);
            }

            var material = BasicMaterial.Create("basic-water");
            var img      = FileImage.Create(GetResourcePath("textures/water.png"));
            var texture  = new ImageTexture2D();

            texture.SetSource(img);
            var desc = texture.GetDesc();

            desc.SetWrapS(EnumTextureWrappingType.REPEAT);
            desc.SetWrapT(EnumTextureWrappingType.REPEAT);
            texture.SetRepeat(new Vector2(5, 5));

            material.AddTexture("map", texture);
            var color = Vector3.ColorFromHex(0x0044ff);

            material.SetUniform("diffuse", Uniform.Create(color));


            var node = new PrimitiveSceneNode(mGeometry, material);

            node.SetPickable(false);
            node.SetCulling(false);

            render.ShowSceneNode(node);
        }
        public override void Run(RenderControl render)
        {
            if (!mLoaded)
            {
                mLoaded = true;

                FontManager.Instance().AddFont("LS", @"C:\Windows\Fonts\STLITI.TTF");
            }

            {
                var fontMaterial = FontMaterial.Create("font-texture-1");
                fontMaterial.SetFaceSide(EnumFaceSide.DoubleSide);
                fontMaterial.SetColor(new Vector3(1, 1, 0));
                fontMaterial.SetBackground(new Vector3(0, 0, 1));
                fontMaterial.SetBillboard(true);

                var dim   = fontMaterial.SetText("Hello 世界!", 128, "LS");
                var shape = GeometryBuilder.CreatePlane(dim.x * 0.1f, dim.y * 0.1f);

                var node = new PrimitiveSceneNode(shape, fontMaterial);
                node.SetPickable(false);

                render.ShowSceneNode(node);
            }
            {
                var fixedSizeMaterial = SpriteMaterial.Create("font-mesh-material");
                fixedSizeMaterial.SetSizeAttenuation(false);
                fixedSizeMaterial.SetColor(ColorTable.Green);

                var mesh  = FontManager.Instance().CreateMesh("哈哈");
                var node  = new PrimitiveSceneNode(mesh, fixedSizeMaterial);
                var scale = 1 / 2200.0f;
                node.SetTransform(Matrix4.makeTranslation(0, 0, 10) * Matrix4.makeScale(scale, scale, scale));
                node.SetPickable(false);

                render.ShowSceneNode(node);
            }
        }
        public override void Run(RenderControl render)
        {
            // prepare lines data
            const int COUNT  = 300;
            var       buffer = new Float32Buffer(0);

            buffer.Reserve(COUNT * 3);

            var colors = new Float32Buffer(0);

            Random random = new Random();

            for (int i = 0; i < COUNT; i++)
            {
                float x = 20 * (float)random.NextDouble() - 10;
                float y = 20 * (float)random.NextDouble() - 10;
                float z = 20 * (float)random.NextDouble() - 10;

                buffer.Append(x, y, z);
                colors.Append((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble());
            }

            var primitive = GeometryBuilder.CreateLines(new Float32Array(buffer), null, new Float32Array(colors));

            GeometryBuilder.ComputeLineDistances(primitive);
            // prepare dashed line material
            var material = LineDashedMaterial.Create("dashed-line");

            // enable vertex color
            material.SetVertexColors(true);
            material.SetDashSize(1.0f);

            // add to scene
            var node = new PrimitiveSceneNode(primitive, material);

            render.ShowSceneNode(node);
        }