示例#1
0
        static void btnTest_click(HtmlDomEventArgs e)
        {
	        // set the scene size
	        float WIDTH = 400;
	        float HEIGHT = 300;

	        // set some camera attributes
	        float VIEW_ANGLE = 45;
	        float ASPECT = WIDTH / HEIGHT;
	        float NEAR = 0.1f;
	        float FAR = 10000;

	        // get the DOM element to attach to
	        // - assume we've got jQuery to hand
	        jQuery container = J("#container");

	        // create a WebGL renderer, camera
	        // and a scene
            WebGLRenderer renderer = new WebGLRenderer();
	        Camera camera = new PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR  );
	        Scene scene= new Scene();

	        // the camera starts at 0,0,0 so pull it back
	        camera.position.z = 300;

	        // start the renderer
	        renderer.setSize(WIDTH, HEIGHT);

	        // attach the render-supplied DOM element
	        container.append(renderer.domElement);

	        // create the sphere's material
            MeshLambertMaterial sphereMaterial = new MeshLambertMaterial(new MeshLambertMaterialOptions { color = 0xcc0000 });

            // set up the sphere vars
            int radius = 50, segments = 16, rings = 16;

            // create a new mesh with sphere geometry -
            // we will cover the sphereMaterial next!
            Mesh sphere = new Mesh(new SphereGeometry(radius, segments, rings), sphereMaterial);

            // add the sphere to the scene
            scene.add(sphere);

            // create a point light
            var pointLight = new PointLight(0xFFFFFF);

            // set its position
            pointLight.position.x = 10;
            pointLight.position.y = 50;
            pointLight.position.z = 130;

            // add to the scene
            scene.add(pointLight);

            // draw!
            renderer.render(scene, camera);

        }
示例#2
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // .obj nolonger works?


            // http://forums.newtek.com/showthread.php?139633-how-to-convert-sketchup-files-into-OBJ-without-the-PRO-version

            // http://www.gameartmarket.com/details?id=ag9zfmRhZGEtM2RtYXJrZXRyMgsSBFVzZXIiE3BpZXJ6YWtAcGllcnphay5jb20MCxIKVXNlclVwbG9hZBjc_5ik8ycM
            // http://www.gameartmarket.com/details?id=ag9zfmRhZGEtM2RtYXJrZXRyMgsSBFVzZXIiE3BpZXJ6YWtAcGllcnphay5jb20MCxIKVXNlclVwbG9hZBjXwOHe-icM
            // http://scfreak.0catch.com/dlindex.html
            // https://sites.google.com/a/jsc-solutions.net/backlog/knowledge-base/2013/201311/20131109-gold
            // view-source:file:///X:/opensource/github/three.js/examples/webgl_loader_obj.html

            var oo = new List <THREE.Object3D>();

            #region scene
            var window = Native.window;

            var camera = new THREE.PerspectiveCamera(
                45,
                window.aspect,
                1,
                2000
                );
            camera.position.z = 400;

            // scene

            var scene = new Scene();

            new AmbientLight(0x101030).AttachTo(scene);

            var directionalLight = new THREE.DirectionalLight(0xffeedd);
            directionalLight.position.set(0, 0, 1);
            scene.add(directionalLight);

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize(window.Width, window.Height);

            renderer.domElement.AttachToDocument();
            renderer.domElement.style.SetLocation(0, 0);



            var controls = new THREE.OrbitControls(camera, renderer.domElement);

            var st = Stopwatch.StartNew();

            Native.window.onframe +=
                delegate
            {
                oo.WithEach(
                    x =>
                    x.rotation.y = st.ElapsedMilliseconds * 0.001
                    );


                controls.update();
                camera.position = controls.center.clone();

                renderer.render(scene, camera);
            };

            Native.window.onresize +=
                delegate
            {
                camera.aspect = window.aspect;
                camera.updateProjectionMatrix();

                renderer.setSize(window.Width, window.Height);
            };
            #endregion



            new THREE_OBJAsset(
                new HTML.Images.FromAssets.texture_palm(),
                "assets/WebGLOBJExperiment/palm.obj"
                ).Source.Task.ContinueWithResult(
                palm =>
            {
                palm.position.y = -80;
                //scene.add(palm);
                palm.AttachTo(scene);

                oo.Add(palm);

                palm.position.x = -200;
                palm.scale      = new THREE.Vector3(5, 5, 5);
            }
                );

            new THREE_OBJAsset(
                new HTML.Images.FromAssets.texture_palm(),
                "assets/WebGLOBJExperiment/palm.obj"
                ).Source.Task.ContinueWithResult(
                palm2 =>
            {
                palm2.position.y = -80;
                palm2.AttachTo(scene);
                oo.Add(palm2);

                palm2.position.x = 200;
                palm2.scale      = new THREE.Vector3(5, 5, 5);
            }
                );

            new THREE_OBJAsset(
                new HTML.Images.FromAssets.Fence_texture3(),
                "assets/WebGLOBJExperiment/fence.obj"
                ).Source.Task.ContinueWithResult(
                fence =>
            {
                fence.position.y = -80;
                fence.AttachTo(scene);
                //scene.add(fence);
                oo.Add(fence);

                fence.position.x = -100;
                fence.scale      = new THREE.Vector3(0.2, 0.2, 0.2);
            }
                );

            new sack_of_gold2().Source.Task.ContinueWithResult(
                sack_of_gold2 =>
            {
                sack_of_gold2.position.y = -80;
                sack_of_gold2.AttachTo(scene);
                oo.Add(sack_of_gold2);

                sack_of_gold2.position.x = 70;
                sack_of_gold2.position.z = 100;
                sack_of_gold2.scale      = new THREE.Vector3(0.5, 0.5, 0.5);
            }
                );

            new sack_of_gold2().Source.Task.ContinueWithResult(
                o =>
            {
                o.position.y = -80;
                scene.add(o);
                oo.Add(o);

                o.position.x = -70;
                o.position.z = 100;
                o.scale      = new THREE.Vector3(0.5, 0.5, 0.5);
            }
                );

            new THREE_OBJAsset(
                new HTML.Images.FromAssets.ash_uvgrid01(),
                "assets/WebGLOBJExperiment/male02.obj"
                ).Source.Task.ContinueWithResult(
                o =>
            {
                o.position.y = -80;
                scene.add(o);
                oo.Add(o);

                o.position.x = 50;
                //o.scale = new THREE.Vector3(5, 5, 5);
            }
                );


            var ze = new ZeProperties
            {
                //() => renderer
            };

            ze.Show();

            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            ze.Add(() => controls);
            ze.Add(() => scene);

            ze.Left = 0;
        }
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {

            // this is of little help for now/
            // this one is loading dds?

            var mouseX = 0;
            var mouseY = 0;

            var camera = new THREE.PerspectiveCamera(45, Native.window.aspect, 1, 2000);
            camera.position.z = 100;


            var scene = new THREE.Scene();

            var ambient = new THREE.AmbientLight(0x101030);
            scene.add(ambient);

            var directionalLight = new THREE.DirectionalLight(0xffeedd);
            directionalLight.position.set(0, 0, 1).normalize();
            scene.add(directionalLight);

            // model

            // THREE.ImageUtils.loadCompressedTexture has been removed.Use THREE.DDSLoader instead.

            var loader = new THREE.OBJMTLLoader();


            //            ImageUtils.parseDDS(): Invalid magic number in DDS header view-source:76325
            //256
            //WebGL: drawElements: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'. Or the texture is Float or Half Float type with linear filtering while OES_float_linear or OES_half_float_linear extension is not enabled. 192.168.1.88/:1
            //WebGL: too many errors, no more errors will be reported to the console for this context. 


            // Request URL:http://192.168.1.88:30122/assets/WebGLMTLExperiment/01_-_Default1noCulling.dds

            { var ref0 = "assets/WebGLMTLExperiment/01_-_Default1noCulling.dds"; }
            { var ref0 = "assets/WebGLMTLExperiment/male-02-1noCulling.dds"; }
            { var ref0 = "assets/WebGLMTLExperiment/orig_02_-_Defaul1noCulling.dds"; }



            loader.load(
                "assets/WebGLMTLExperiment/male02.obj",
                "assets/WebGLMTLExperiment/male02_dds.mtl",

                                new Action<THREE.Object3D>(
                    o =>
                    {

                        //o.scale = new THREE.Vector3(40, 40, 40);

                        o.position.y = -80;
                        scene.add(o);
                        //oo.Add(o);

                    }
            ),


                   new Action<object>(
                    o =>
                    {
                        Console.WriteLine("progress " + new { o });
                    }
                ),

                 new Action<object>(
                    o =>
                    {
                        Console.WriteLine("error " + new { o });
                    }
                 )
            );






            var renderer = new THREE.WebGLRenderer();
            //renderer.setSize();

            // why are we getting offset?
            renderer.setSize(Native.window.Width, Native.window.Height);

            //Native.document.body.Clear();


            renderer.domElement.AttachToDocument();
            //renderer.domElement.AttachTo(Native.document.documentElement);

            //window.addEventListener( 'resize', onWindowResize, false );

            //}

            //function onWindowResize() {

            //    windowHalfX = window.innerWidth / 2;
            //    windowHalfY = window.innerHeight / 2;

            //    camera.aspect = window.innerWidth / window.innerHeight;
            //    camera.updateProjectionMatrix();

            //    renderer.setSize( window.innerWidth, window.innerHeight );

            //}

            var controls = new THREE.OrbitControls(camera, renderer.domElement);


            ////

            //function animate() {

            //    requestAnimationFrame( animate );
            //    render();

            //}

            Native.window.onframe +=
                delegate
                {


                    controls.update();
                    camera.position = controls.center.clone();

                    renderer.render(scene, camera);

                };



            #region ZeProperties
            var ze = new ZeProperties();

            ze.Show();
            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            ze.Add(() => controls);
            ze.Add(() => scene);
            ze.Left = 0;
            #endregion


        }
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // X:\jsc.svn\examples\javascript\synergy\webgl\WebGLDraggableCubes\WebGLDraggableCubes\Application.cs
            // X:\jsc.svn\examples\javascript\synergy\webgl\WebGLDraggableCubes\WebGLDraggableCubes\Design\AppCode.js

            var camera = new PerspectiveCamera(70, Native.window.aspect, 1, 10000);
            camera.position.set(0, 300, 500);

            var scene = new Scene();

            var geometry = new BoxGeometry(100, 100, 100);

            var random = new Random();

            objects = new THREE.Mesh[10];
            for (var i = 0; i < 10; i++)
            {
                var rgb = (int)(random.NextDouble() * 0xffffff);
                Console.WriteLine(new { i, rgb });

                var obj = new THREE.Mesh(geometry,
                    new THREE.MeshBasicMaterial(new { color = new THREE.Color(rgb) })
                    );


                obj.position.x = random.NextDouble() * 800 - 400;
                obj.position.y = random.NextDouble() * 800 - 400;
                obj.position.z = random.NextDouble() * 800 - 400;

                obj.scale.x = random.NextDouble() * 2 + 1;
                obj.scale.y = random.NextDouble() * 2 + 1;
                obj.scale.z = random.NextDouble() * 2 + 1;

                obj.rotation.x = random.NextDouble() * 2 * Math.PI;
                obj.rotation.y = random.NextDouble() * 2 * Math.PI;
                obj.rotation.z = random.NextDouble() * 2 * Math.PI;

                scene.add(obj);

                objects[i] = obj;

            }


            // THREE.Projector has been moved to /examples/js/renderers/Projector.js.
            var projector = new THREE.Projector();

            // ?
            var renderer = new THREE.WebGLRenderer();
            renderer.setClearColor(new THREE.Color(0xf0f0f0));
            //renderer.setSize(Native.window.Width, Native.window.Height);
            renderer.setSize();

            this.canvas = (IHTMLCanvas)renderer.domElement;
            //renderer.domElement.AttachToDocument();
            this.canvas.AttachToDocument();
            this.canvas.style.SetLocation(0, 0);
            this.canvas.css.style.cursor = IStyle.CursorEnum.pointer;
            this.canvas.css.active.style.cursor = IStyle.CursorEnum.move;

            canvas.onresize += delegate
            {
                camera.aspect = Native.window.aspect;
                camera.updateProjectionMatrix();

                //renderer.setSize(Native.window.Width, Native.window.Height);
                renderer.setSize();
            };

            canvas.onmousedown += (
                e =>
                {

                    e.preventDefault();

                    var px = (e.CursorX / (double)Native.window.Width);
                    var py = (e.CursorY / (double)Native.window.Height);

                    var vx = px * 2 - 1;
                    var vy = -py * 2 + 1;

                    Console.WriteLine(
                        new { e.CursorX, e.CursorY, px, py, vx, vy }
                        );

                    //var vector = new THREE.Vector3(
                    //  vx,
                    //  vy,
                    //  0.5);

                    var vector = new THREE.Vector3(
                  (e.CursorX / (double)Native.window.Width) * 2 - 1,
                 vy,
                 0.5);

                    //var vector = new THREE.Vector3(e.CursorX , e.CursorY, 1);

                    projector.unprojectVector(vector, camera);

                    //var raycaster = new THREE.Raycaster();
                    //raycaster.set(camera.position, vector.sub(camera.position).normalize());

                    // 
                    var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
                    //var raycaster = projector.pickingRay(vector.sub(camera.position).normalize(), camera);

                    //var intersects = raycaster.intersectObjects(objects, true);
                    var intersects = raycaster.intersectObjects(objects);

                    Console.WriteLine("Intersects len " + intersects.Length);

                    if (intersects.Length > 0)
                    {
                        var holder = ((THREE.Mesh)intersects[0].@object);

                        var forthSmallestInnerCilinder = new THREE.Mesh(
                              new THREE.CylinderGeometry(10, 10, 10, 32),
                              new THREE.MeshPhongMaterial(
                                      new
                                      {
                                          specular = new THREE.Color(0xa0a0a0)
                                      })
                          );
                        forthSmallestInnerCilinder.position.y = ((THREE.Raycaster_intersectObject)intersects[0]).point.y;
                        forthSmallestInnerCilinder.position.x = ((THREE.Raycaster_intersectObject)intersects[0]).point.x;
                        forthSmallestInnerCilinder.position.z = ((THREE.Raycaster_intersectObject)intersects[0]).point.z;
                        scene.add(forthSmallestInnerCilinder);

                        // Console.WriteLine(holder.visible);
                        //intersects[0].material.color.setHex(random.NextDouble()*0xffffff);
                        Console.WriteLine("" + ((THREE.Raycaster_intersectObject)intersects[0]).point.x);
                        holder.material.color = new THREE.Color(0xf000ff);
                        foreach (var i in objects)
                        {
                            if (i == holder)
                            {
                                Console.WriteLine("Equals true");
                                i.material.color.setRGB(200, 0, 0);
                            }
                        }
                    }

                });

            var radius = 600;
            double theta = 0;



            Native.window.onframe += (e =>
            {
                if (this.canvas.parentNode == null)
                    return;

                theta += 0.1;

                camera.position.x = radius * Math.Sin(THREE.Math.degToRad(theta));
                camera.position.y = radius * Math.Sin(THREE.Math.degToRad(theta));
                camera.position.z = radius * Math.Cos(THREE.Math.degToRad(theta));
                camera.lookAt(scene.position);

                renderer.render(scene, camera);



            });

            var ze = new ZeProperties();

            ze.Show();
            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            //ze.Add(() => controls);
            ze.Add(() => scene);
            ze.Left = 0;

        }
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // .obj nolonger works?


            // http://forums.newtek.com/showthread.php?139633-how-to-convert-sketchup-files-into-OBJ-without-the-PRO-version

            // http://www.gameartmarket.com/details?id=ag9zfmRhZGEtM2RtYXJrZXRyMgsSBFVzZXIiE3BpZXJ6YWtAcGllcnphay5jb20MCxIKVXNlclVwbG9hZBjc_5ik8ycM
            // http://www.gameartmarket.com/details?id=ag9zfmRhZGEtM2RtYXJrZXRyMgsSBFVzZXIiE3BpZXJ6YWtAcGllcnphay5jb20MCxIKVXNlclVwbG9hZBjXwOHe-icM
            // http://scfreak.0catch.com/dlindex.html
            // https://sites.google.com/a/jsc-solutions.net/backlog/knowledge-base/2013/201311/20131109-gold
            // view-source:file:///X:/opensource/github/three.js/examples/webgl_loader_obj.html

            var oo = new List<THREE.Object3D>();

            #region scene
            var window = Native.window;

            var camera = new THREE.PerspectiveCamera(
                45,
                window.aspect,
                1,
                2000
                );
            camera.position.z = 400;

            // scene

            var scene = new Scene();

            new AmbientLight(0x101030).AttachTo(scene);

            var directionalLight = new THREE.DirectionalLight(0xffeedd);
            directionalLight.position.set(0, 0, 1);
            scene.add(directionalLight);

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize(window.Width, window.Height);

            renderer.domElement.AttachToDocument();
            renderer.domElement.style.SetLocation(0, 0);



            var controls = new THREE.OrbitControls(camera, renderer.domElement);

            var st = Stopwatch.StartNew();

            Native.window.onframe +=
                delegate
                {

                    oo.WithEach(
                        x =>
                            x.rotation.y = st.ElapsedMilliseconds * 0.001
                    );


                    controls.update();
                    camera.position = controls.center.clone();

                    renderer.render(scene, camera);


                };

            Native.window.onresize +=
                delegate
                {
                    camera.aspect = window.aspect;
                    camera.updateProjectionMatrix();

                    renderer.setSize(window.Width, window.Height);

                };
            #endregion








            new THREE_OBJAsset(
                 new HTML.Images.FromAssets.texture_palm(),
                   "assets/WebGLOBJExperiment/palm.obj"
            ).Source.Task.ContinueWithResult(
                palm =>
                {
                    palm.position.y = -80;
                    //scene.add(palm);
                    palm.AttachTo(scene);

                    oo.Add(palm);

                    palm.position.x = -200;
                    palm.scale = new THREE.Vector3(5, 5, 5);
                }
            );

            new THREE_OBJAsset(
                  new HTML.Images.FromAssets.texture_palm(),
                    "assets/WebGLOBJExperiment/palm.obj"
             ).Source.Task.ContinueWithResult(
                 palm2 =>
                 {
                     palm2.position.y = -80;
                     palm2.AttachTo(scene);
                     oo.Add(palm2);

                     palm2.position.x = 200;
                     palm2.scale = new THREE.Vector3(5, 5, 5);
                 }
             );

            new THREE_OBJAsset(
                 new HTML.Images.FromAssets.Fence_texture3(),
                   "assets/WebGLOBJExperiment/fence.obj"
            ).Source.Task.ContinueWithResult(
                fence =>
                {
                    fence.position.y = -80;
                    fence.AttachTo(scene);
                    //scene.add(fence);
                    oo.Add(fence);

                    fence.position.x = -100;
                    fence.scale = new THREE.Vector3(0.2, 0.2, 0.2);
                }
            );

            new sack_of_gold2().Source.Task.ContinueWithResult(
               sack_of_gold2 =>
               {
                   sack_of_gold2.position.y = -80;
                   sack_of_gold2.AttachTo(scene);
                   oo.Add(sack_of_gold2);

                   sack_of_gold2.position.x = 70;
                   sack_of_gold2.position.z = 100;
                   sack_of_gold2.scale = new THREE.Vector3(0.5, 0.5, 0.5);
               }
           );

            new sack_of_gold2().Source.Task.ContinueWithResult(
          o =>
          {
              o.position.y = -80;
              scene.add(o);
              oo.Add(o);

              o.position.x = -70;
              o.position.z = 100;
              o.scale = new THREE.Vector3(0.5, 0.5, 0.5);
          }
      );

            new THREE_OBJAsset(
              new HTML.Images.FromAssets.ash_uvgrid01(),
                   "assets/WebGLOBJExperiment/male02.obj"
            ).Source.Task.ContinueWithResult(
                o =>
                {
                    o.position.y = -80;
                    scene.add(o);
                    oo.Add(o);

                    o.position.x = 50;
                    //o.scale = new THREE.Vector3(5, 5, 5);
                }
            );


            var ze = new ZeProperties
            {
                //() => renderer
            };

            ze.Show();

            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            ze.Add(() => controls);
            ze.Add(() => scene);

            ze.Left = 0;
        }
示例#6
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // X:\jsc.svn\examples\javascript\synergy\webgl\WebGLDraggableCubes\WebGLDraggableCubes\Application.cs
            // X:\jsc.svn\examples\javascript\synergy\webgl\WebGLDraggableCubes\WebGLDraggableCubes\Design\AppCode.js

            var camera = new PerspectiveCamera(70, Native.window.aspect, 1, 10000);

            camera.position.set(0, 300, 500);

            var scene = new Scene();

            var geometry = new BoxGeometry(100, 100, 100);

            var random = new Random();

            objects = new THREE.Mesh[10];
            for (var i = 0; i < 10; i++)
            {
                var rgb = (int)(random.NextDouble() * 0xffffff);
                Console.WriteLine(new { i, rgb });

                var obj = new THREE.Mesh(geometry,
                                         new THREE.MeshBasicMaterial(new { color = new THREE.Color(rgb) })
                                         );


                obj.position.x = random.NextDouble() * 800 - 400;
                obj.position.y = random.NextDouble() * 800 - 400;
                obj.position.z = random.NextDouble() * 800 - 400;

                obj.scale.x = random.NextDouble() * 2 + 1;
                obj.scale.y = random.NextDouble() * 2 + 1;
                obj.scale.z = random.NextDouble() * 2 + 1;

                obj.rotation.x = random.NextDouble() * 2 * Math.PI;
                obj.rotation.y = random.NextDouble() * 2 * Math.PI;
                obj.rotation.z = random.NextDouble() * 2 * Math.PI;

                scene.add(obj);

                objects[i] = obj;
            }


            // THREE.Projector has been moved to /examples/js/renderers/Projector.js.
            var projector = new THREE.Projector();

            // ?
            var renderer = new THREE.WebGLRenderer();

            renderer.setClearColor(new THREE.Color(0xf0f0f0));
            //renderer.setSize(Native.window.Width, Native.window.Height);
            renderer.setSize();

            this.canvas = (IHTMLCanvas)renderer.domElement;
            //renderer.domElement.AttachToDocument();
            this.canvas.AttachToDocument();
            this.canvas.style.SetLocation(0, 0);
            this.canvas.css.style.cursor        = IStyle.CursorEnum.pointer;
            this.canvas.css.active.style.cursor = IStyle.CursorEnum.move;

            canvas.onresize += delegate
            {
                camera.aspect = Native.window.aspect;
                camera.updateProjectionMatrix();

                //renderer.setSize(Native.window.Width, Native.window.Height);
                renderer.setSize();
            };

            canvas.onmousedown += (
                e =>
            {
                e.preventDefault();

                var px = (e.CursorX / (double)Native.window.Width);
                var py = (e.CursorY / (double)Native.window.Height);

                var vx = px * 2 - 1;
                var vy = -py * 2 + 1;

                Console.WriteLine(
                    new { e.CursorX, e.CursorY, px, py, vx, vy }
                    );

                //var vector = new THREE.Vector3(
                //  vx,
                //  vy,
                //  0.5);

                var vector = new THREE.Vector3(
                    (e.CursorX / (double)Native.window.Width) * 2 - 1,
                    vy,
                    0.5);

                //var vector = new THREE.Vector3(e.CursorX , e.CursorY, 1);

                projector.unprojectVector(vector, camera);

                //var raycaster = new THREE.Raycaster();
                //raycaster.set(camera.position, vector.sub(camera.position).normalize());

                //
                var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
                //var raycaster = projector.pickingRay(vector.sub(camera.position).normalize(), camera);

                //var intersects = raycaster.intersectObjects(objects, true);
                var intersects = raycaster.intersectObjects(objects);

                Console.WriteLine("Intersects len " + intersects.Length);

                if (intersects.Length > 0)
                {
                    var holder = ((THREE.Mesh)intersects[0].@object);

                    var forthSmallestInnerCilinder = new THREE.Mesh(
                        new THREE.CylinderGeometry(10, 10, 10, 32),
                        new THREE.MeshPhongMaterial(
                            new
                    {
                        specular = new THREE.Color(0xa0a0a0)
                    })
                        );
                    forthSmallestInnerCilinder.position.y = ((THREE.Raycaster_intersectObject)intersects[0]).point.y;
                    forthSmallestInnerCilinder.position.x = ((THREE.Raycaster_intersectObject)intersects[0]).point.x;
                    forthSmallestInnerCilinder.position.z = ((THREE.Raycaster_intersectObject)intersects[0]).point.z;
                    scene.add(forthSmallestInnerCilinder);

                    // Console.WriteLine(holder.visible);
                    //intersects[0].material.color.setHex(random.NextDouble()*0xffffff);
                    Console.WriteLine("" + ((THREE.Raycaster_intersectObject)intersects[0]).point.x);
                    holder.material.color = new THREE.Color(0xf000ff);
                    foreach (var i in objects)
                    {
                        if (i == holder)
                        {
                            Console.WriteLine("Equals true");
                            i.material.color.setRGB(200, 0, 0);
                        }
                    }
                }
            });

            var    radius = 600;
            double theta  = 0;



            Native.window.onframe += (e =>
            {
                if (this.canvas.parentNode == null)
                {
                    return;
                }

                theta += 0.1;

                camera.position.x = radius * Math.Sin(THREE.Math.degToRad(theta));
                camera.position.y = radius * Math.Sin(THREE.Math.degToRad(theta));
                camera.position.z = radius * Math.Cos(THREE.Math.degToRad(theta));
                camera.lookAt(scene.position);

                renderer.render(scene, camera);
            });

            var ze = new ZeProperties();

            ze.Show();
            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            //ze.Add(() => controls);
            ze.Add(() => scene);
            ze.Left = 0;
        }
示例#7
0
        /// <summary>
        /// This is a javascript application.
        /// </summary>
        /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param>
        public Application(IApp page)
        {
            // this is of little help for now/
            // this one is loading dds?

            var mouseX = 0;
            var mouseY = 0;

            var camera = new THREE.PerspectiveCamera(45, Native.window.aspect, 1, 2000);

            camera.position.z = 100;


            var scene = new THREE.Scene();

            var ambient = new THREE.AmbientLight(0x101030);

            scene.add(ambient);

            var directionalLight = new THREE.DirectionalLight(0xffeedd);

            directionalLight.position.set(0, 0, 1).normalize();
            scene.add(directionalLight);

            // model

            // THREE.ImageUtils.loadCompressedTexture has been removed.Use THREE.DDSLoader instead.

            var loader = new THREE.OBJMTLLoader();


            //            ImageUtils.parseDDS(): Invalid magic number in DDS header view-source:76325
            //256
            //WebGL: drawElements: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'. Or the texture is Float or Half Float type with linear filtering while OES_float_linear or OES_half_float_linear extension is not enabled. 192.168.1.88/:1
            //WebGL: too many errors, no more errors will be reported to the console for this context.


            // Request URL:http://192.168.1.88:30122/assets/WebGLMTLExperiment/01_-_Default1noCulling.dds

            { var ref0 = "assets/WebGLMTLExperiment/01_-_Default1noCulling.dds"; }
            { var ref0 = "assets/WebGLMTLExperiment/male-02-1noCulling.dds"; }
            { var ref0 = "assets/WebGLMTLExperiment/orig_02_-_Defaul1noCulling.dds"; }



            loader.load(
                "assets/WebGLMTLExperiment/male02.obj",
                "assets/WebGLMTLExperiment/male02_dds.mtl",

                new Action <THREE.Object3D>(
                    o =>
            {
                //o.scale = new THREE.Vector3(40, 40, 40);

                o.position.y = -80;
                scene.add(o);
                //oo.Add(o);
            }
                    ),


                new Action <object>(
                    o =>
            {
                Console.WriteLine("progress " + new { o });
            }
                    ),

                new Action <object>(
                    o =>
            {
                Console.WriteLine("error " + new { o });
            }
                    )
                );



            var renderer = new THREE.WebGLRenderer();

            //renderer.setSize();

            // why are we getting offset?
            renderer.setSize(Native.window.Width, Native.window.Height);

            //Native.document.body.Clear();


            renderer.domElement.AttachToDocument();
            //renderer.domElement.AttachTo(Native.document.documentElement);

            //window.addEventListener( 'resize', onWindowResize, false );

            //}

            //function onWindowResize() {

            //    windowHalfX = window.innerWidth / 2;
            //    windowHalfY = window.innerHeight / 2;

            //    camera.aspect = window.innerWidth / window.innerHeight;
            //    camera.updateProjectionMatrix();

            //    renderer.setSize( window.innerWidth, window.innerHeight );

            //}

            var controls = new THREE.OrbitControls(camera, renderer.domElement);


            ////

            //function animate() {

            //    requestAnimationFrame( animate );
            //    render();

            //}

            Native.window.onframe +=
                delegate
            {
                controls.update();
                camera.position = controls.center.clone();

                renderer.render(scene, camera);
            };



            #region ZeProperties
            var ze = new ZeProperties();

            ze.Show();
            ze.treeView1.Nodes.Clear();

            ze.Add(() => renderer);
            ze.Add(() => controls);
            ze.Add(() => scene);
            ze.Left = 0;
            #endregion
        }