コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="size"></param>
        /// <param name="step"></param>
        public GridHelper(float size, float step)
        {
            var colorConvertor = new ColorConverter();

            var geometry = new Geometry();
            var material = new LineBasicMaterial {
                VertexColors = Three.VertexColors
            };

            this.Color1 = (Color)colorConvertor.ConvertFromString("#444444");
            this.Color2 = (Color)colorConvertor.ConvertFromString("#888888");

            this.Color1 = Color.DeepSkyBlue; // TODO deze kleur komt door
            this.Color2 = Color.GreenYellow; // TODO deze kleur komt NIET door

            for (var i = -size; i <= size; i += step)
            {
                geometry.Vertices.AddRange(new [] {
                    new Vector3(-size, 0, i), new Vector3(size, 0, i),
                    new Vector3(i, 0, -size), new Vector3(i, 0, size)
                }
                                           );

                var color = (i == 0) ? this.Color1 : this.Color2;

                geometry.Colors.AddRange(new [] { color, color, color, color });
            }

            this.Geometry = geometry;
            this.Material = material;
            this.Mode     = this.LinePieces;
        }
コード例 #2
0
 private CameraHelper(Camera camera, Geometry geometry, LineBasicMaterial material)
     : base(geometry, material, LineType.Pieces)
 {
     this.camera           = camera;
     this.matrixWorld      = camera.matrixWorld;
     this.matrixAutoUpdate = false;
 }
コード例 #3
0
ファイル: TestRenderer.cs プロジェクト: koperniki/DefLab
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        public override void Load(Control control)
        {
            base.Load(control);

            //

            camera = new PerspectiveCamera(27, control.Width / (float)control.Height, 1, 4000);
            this.camera.Position.Z = 2750;

            scene = new Scene();


            const int segments = 10000;

            var geometry = new BufferGeometry();
            var material = new LineBasicMaterial {
                VertexColors = 2
            };

            var positions = new float[segments * 3];
            var colors    = new float[segments * 3];

            const float r = 800.0f;

            for (var i = 0; i < segments; i++)
            {
                var x = Mat.Random() * r - r / 2;
                var y = Mat.Random() * r - r / 2;
                var z = Mat.Random() * r - r / 2;

                // positions

                positions[i * 3 + 0] = x;
                positions[i * 3 + 1] = y;
                positions[i * 3 + 2] = z;

                // colors

                colors[i * 3 + 0] = (x / r) + 0.5f;
                colors[i * 3 + 1] = (y / r) + 0.5f;
                colors[i * 3 + 2] = (z / r) + 0.5f;
            }

            geometry.AddAttribute("position", new BufferAttribute <float>(positions, 3));
            geometry.AddAttribute("color", new BufferAttribute <float>(colors, 3));

            geometry.ComputeBoundingSphere();

            mesh = new Line(geometry, material);
            scene.Add(mesh);

            renderer.gammaInput  = true;
            renderer.gammaOutput = true;
        }
コード例 #4
0
ファイル: BoxHelper.cs プロジェクト: vijirams/three.net
        public static BoxHelper Create(Renderer renderer, Object3D o)
        {
            var mat = new LineBasicMaterial(renderer)
            {
                Diffuse = new Color(0xffff00)
            };
            var geo       = new Geometry();
            var boxHelper = new BoxHelper(geo, mat);

            boxHelper.o = o;
            boxHelper.Update();
            return(boxHelper);
        }
コード例 #5
0
        public static CameraHelper Create(Renderer renderer, Camera camera)
        {
            var pointMap = new Dictionary <string, List <int> >();

            var geometry = new Geometry();
            var material = new LineBasicMaterial(renderer)
            {
                Diffuse      = Color.White,
                VertexColors = VertexColorMode.Vertex
            };
            var cameraHelper = new CameraHelper(camera, geometry, material);

            //Colors
            var hexFrustum = new Color(0xffaa00);
            var hexCone    = new Color(0xff0000);
            var hexUp      = new Color(0x00aaff);
            var hexTarget  = new Color(0xffffff);
            var hexCross   = new Color(0x333333);

            // near
            cameraHelper.AddLine("n1", "n2", hexFrustum);
            cameraHelper.AddLine("n2", "n4", hexFrustum);
            cameraHelper.AddLine("n4", "n3", hexFrustum);
            cameraHelper.AddLine("n3", "n1", hexFrustum);

            // far
            cameraHelper.AddLine("f1", "f2", hexFrustum);
            cameraHelper.AddLine("f2", "f4", hexFrustum);
            cameraHelper.AddLine("f4", "f3", hexFrustum);
            cameraHelper.AddLine("f3", "f1", hexFrustum);

            // sides
            cameraHelper.AddLine("n1", "f1", hexFrustum);
            cameraHelper.AddLine("n2", "f2", hexFrustum);
            cameraHelper.AddLine("n3", "f3", hexFrustum);
            cameraHelper.AddLine("n4", "f4", hexFrustum);

            // cone
            cameraHelper.AddLine("p", "n1", hexCone);
            cameraHelper.AddLine("p", "n2", hexCone);
            cameraHelper.AddLine("p", "n3", hexCone);
            cameraHelper.AddLine("p", "n4", hexCone);

            // up
            cameraHelper.AddLine("u1", "u2", hexUp);
            cameraHelper.AddLine("u2", "u3", hexUp);
            cameraHelper.AddLine("u3", "u1", hexUp);

            // target
            cameraHelper.AddLine("c", "t", hexTarget);
            cameraHelper.AddLine("p", "c", hexCross);

            // cross
            cameraHelper.AddLine("cn1", "cn2", hexCross);
            cameraHelper.AddLine("cn3", "cn4", hexCross);
            cameraHelper.AddLine("cf1", "cf2", hexCross);
            cameraHelper.AddLine("cf3", "cf4", hexCross);

            cameraHelper.Update();
            return(cameraHelper);
        }
コード例 #6
0
ファイル: AxisHelper.cs プロジェクト: vijirams/three.net
 private AxisHelper(Geometry geometry, LineBasicMaterial material) : base(geometry, material, LineType.Pieces)
 {
 }
コード例 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        public override void Load(Control control)
        {
            base.Load(control);

            //

            camera = new PerspectiveCamera(50, control.Width / (float)control.Height, 1, 4000);
            // new OrthographicCamera(-control.Width/20, control.Width / 20, -control.Height / 20, control.Height / 20);//
            this.camera.Position.Z = 50;

            camera.LookAt(new Vector3(0, 0, 0));

            controls = new CamControl(control, camera);

            controls.RotateSpeed = 5;
            controls.ZoomSpeed   = 5;
            controls.PanSpeed    = 2;



            controls.StaticMoving         = true;
            controls.DynamicDampingFactor = 0.4f;

            scene = new Scene();
            scene.Add(camera);

            var material = new LineBasicMaterial {
                VertexColors = ThreeCs.Three.VertexColors
            };

            if (dataList != null)
            {
                foreach (var data in dataList)
                {
                    int segments  = data.Count;
                    var geometry  = new BufferGeometry();
                    var positions = new float[segments * 3];
                    var colors    = new float[segments * 3];

                    for (int i = 0; i < segments; i++)
                    {
                        positions[i * 3 + 0] = data[i].X;
                        positions[i * 3 + 1] = data[i].Y;
                        positions[i * 3 + 2] = data[i].Z * 5;

                        colors[i * 3 + 0] = 0.5f;
                        colors[i * 3 + 1] = 0.5f;
                        colors[i * 3 + 2] = 0.5f;
                    }

                    geometry.AddAttribute("position", new BufferAttribute <float>(positions, 3));
                    geometry.AddAttribute("color", new BufferAttribute <float>(colors, 3));

                    geometry.ComputeBoundingSphere();

                    mesh = new Line(geometry, material);
                    scene.Add(mesh);
                }
            }



            renderer.gammaInput  = true;
            renderer.gammaOutput = true;
        }
コード例 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        public override void Load(Control control)
        {
            base.Load(control);

            camera            = new PerspectiveCamera(27, control.Width / (float)control.Height, 1, 3500);
            camera.Position.Z = 2750;

            scene     = new Scene();
            scene.Fog = new Fog((Color)colorConvertor.ConvertFromString("#050505"), 2000, 3500);

            scene.Add(new AmbientLight((Color)colorConvertor.ConvertFromString("#444444")));

            var light1 = new DirectionalLight(Color.White, 0.5f);

            light1.Position = new Vector3(1, 1, 1);
            scene.Add(light1);

            var light2 = new DirectionalLight(Color.White, 1.5f);

            light2.Position = new Vector3(0, -1, 0);
            scene.Add(light2);

            //

            const int Triangles = 5000;

            var geometry = new BufferGeometry();

            var positions = new float[Triangles * 3 * 3];
            var normals   = new float[Triangles * 3 * 3];
            var colors    = new float[Triangles * 3 * 3];

            var color = new Color();

            const int n = 800; const int n2 = n / 2; // triangles spread in the cube
            const int d = 120; const int d2 = d / 2; // individual triangle size

            for (var i = 0; i < positions.Length; i += 9)
            {
                // positions

                var r = 0.5f;

                var x = getRandom() * n - n2;
                var y = getRandom() * n - n2;
                var z = getRandom() * n - n2;

                var ax = x + getRandom() * d - d2;
                var ay = y + getRandom() * d - d2;
                var az = z + getRandom() * d - d2;

                var bx = x + getRandom() * d - d2;
                var by = y + getRandom() * d - d2;
                var bz = z + getRandom() * d - d2;

                var cx = x + getRandom() * d - d2;
                var cy = y + getRandom() * d - d2;
                var cz = z + getRandom() * d - d2;

                positions[i]     = ax;
                positions[i + 1] = ay;
                positions[i + 2] = az;

                positions[i + 3] = bx;
                positions[i + 4] = by;
                positions[i + 5] = bz;

                positions[i + 6] = cx;
                positions[i + 7] = cy;
                positions[i + 8] = cz;

                // flat face normals

                var pA = new Vector3(ax, ay, az);
                var pB = new Vector3(bx, by, bz);
                var pC = new Vector3(cx, cy, cz);

                var cb = pC - pB;
                var ab = pA - pB;
                cb.Cross(ab).Normalize();

                var nx = cb.X;
                var ny = cb.Y;
                var nz = cb.Z;

                normals[i]     = nx;
                normals[i + 1] = ny;
                normals[i + 2] = nz;

                normals[i + 3] = nx;
                normals[i + 4] = ny;
                normals[i + 5] = nz;

                normals[i + 6] = nx;
                normals[i + 7] = ny;
                normals[i + 8] = nz;

                // colors

                var vx = (x / n) + 0.5;
                var vy = (y / n) + 0.5;
                var vz = (z / n) + 0.5;

                color = Color.FromArgb(255, (int)(vx * 255), (int)(vy * 255), (int)(vz * 255));

                colors[i]     = color.R / 255.0f;
                colors[i + 1] = color.G / 255.0f;
                colors[i + 2] = color.B / 255.0f;

                colors[i + 3] = color.R / 255.0f;
                colors[i + 4] = color.G / 255.0f;
                colors[i + 5] = color.B / 255.0f;

                colors[i + 6] = color.R / 255.0f;
                colors[i + 7] = color.G / 255.0f;
                colors[i + 8] = color.B / 255.0f;
            }

            geometry.AddAttribute("position", new BufferAttribute <float>(positions, 3));
            geometry.AddAttribute("normal", new BufferAttribute <float>(normals, 3));
            geometry.AddAttribute("color", new BufferAttribute <float>(colors, 3));

            geometry.ComputeBoundingSphere();

            var material = new MeshPhongMaterial()
            {
                Color     = (Color)colorConvertor.ConvertFromString("#aaaaaa"),
                Ambient   = (Color)colorConvertor.ConvertFromString("#aaaaaa"),
                Specular  = Color.White,
                Shininess = 250,
                Side      = Three.DoubleSide, VertexColors = Three.VertexColors,
            };

            mesh = new Mesh(geometry, material);
            scene.Add(mesh);

            //

            projector = new Projector();
            raycaster = new Raycaster();

            mouse = new Vector2();

            var geometry2 = new BufferGeometry();

            geometry2.AddAttribute("position", new BufferAttribute <float>(new float[4 * 3], 3));

            var material2 = new LineBasicMaterial()
            {
                Color = Color.White, Linewidth = 2, Transparent = true
            };

            line = new Line(geometry2, material2);
            scene.Add(line);

            renderer.SetClearColor(scene.Fog.Color);
        }
コード例 #9
0
 public Line(Geometry geometry, LineBasicMaterial material, LineType type = LineType.Strip)
 {
     this.geometry = geometry;
     Material      = material;
     this.Type     = type;
 }