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); }
/// <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; }
/// <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) { // 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 }