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> /// /// </summary> /// <param name="control"></param> public override void Load(Control control) { base.Load(control); camera = new PerspectiveCamera(60, control.Width / (float)control.Height, 0.1f, 1000000.0f); this.camera.Position.Z = 0.2f; controls = new TrackballControls(control, camera); controls.RotateSpeed = 5.0f; controls.ZoomSpeed = 5; controls.PanSpeed = 2; controls.NoZoom = false; controls.NoPan = false; controls.StaticMoving = true; controls.DynamicDampingFactor = 0.3f; scene = new Scene(); scene.Add(camera); // light var dirLight = new DirectionalLight(Color.White); dirLight.Position = new Vector3(200, 200, 1000).Normalize(); camera.Add(dirLight); camera.Add(dirLight.target); var material = new MeshLambertMaterial() { Color = Color.White, Side = ThreeCs.Three.DoubleSide }; // Link in the loader var loader = new VTKLoader(); loader.Loaded += (o, args) => { args.BufferGeometry.ComputeVertexNormals(); var mesh = new Mesh(args.BufferGeometry, material); mesh.Position.Y = -0.09f; scene.Add(mesh); }; loader.Load(@"examples\models/vtk/bunny.vtk"); }
private MeshBasicMaterial CreateMaterial(Renderer renderer, JToken materialJson, string texturePath = null) { dynamic material = new MeshLambertMaterial(renderer); var shadingData = materialJson["shading"]; if (shadingData != null) { var shading = shadingData.Value <string>().ToLower(); if (shading == "phong") { throw new NotImplementedException(); } else if (shading == "basic") { material = new MeshBasicMaterial(renderer); } } material.DiffuseColor = new Color(0xeeeeee); //material.Opacity = 1; material.UseWireframe = false; var blendingData = materialJson["blending"]; if (blendingData != null) { BlendMode mode; switch (blendingData.Value <string>()) { case "NormalBlending": mode = BlendMode.Normal; break; default: throw new NotSupportedException(); } material.Blending = mode; } var transparentData = materialJson["transparent"]; if (transparentData != null) { material.IsTransparent = transparentData.Value <bool>(); } var depthTestData = materialJson["depthTest"]; if (depthTestData != null) { material.ShouldDepthTest = depthTestData.Value <bool>(); } var depthWriteData = materialJson["depthWrite"]; if (depthWriteData != null) { material.ShouldDepthWrite = depthWriteData.Value <bool>(); } var isVisibleData = materialJson["visible"]; if (isVisibleData != null) { material.isVisible = isVisibleData.Value <bool>(); } var isFlipSidedData = materialJson["flipSided"]; if (isFlipSidedData != null) { material.side = SideMode.Back; } var isDoubleSidedData = materialJson["doubleSided"]; if (isFlipSidedData != null) { material.side = SideMode.Double; } var useWireframeData = materialJson["wireframe"]; if (useWireframeData != null) { material.useWireframe = useWireframeData.Value <bool>(); } var vertexColorsData = materialJson["vertexColors"]; if (vertexColorsData != null) { if (vertexColorsData.Value <string>() == "face") { material.VertexColors = VertexColorMode.Face; } else { material.VertexColors = VertexColorMode.Vertex; } } #region colors var colorDiffuseData = materialJson["colorDiffuse"]; if (colorDiffuseData != null) { var rgb = colorDiffuseData.Values <float>().ToArray(); material.DiffuseColor = new Color(rgb[0], rgb[1], rgb[2]); } else { var debugColorData = materialJson["DbgColor"]; if (debugColorData != null) { material.DiffuseColor = new Color(debugColorData.Value <uint>()); } } var colorSpecularData = materialJson["colorSpecular"]; if (material is MeshPhongMaterial && colorSpecularData != null) { var rgb = colorSpecularData.Values <float>().ToArray(); material.Specular = new Color(rgb[0], rgb[1], rgb[2]); } var ambientData = materialJson["colorAmbient"]; if (ambientData != null) { var rgb = ambientData.Values <float>().ToArray(); material.Ambient = new Color(rgb[0], rgb[1], rgb[2]); } var emissiveData = materialJson["colorEmissive"]; if (emissiveData != null) { var rgb = emissiveData.Values <float>().ToArray(); material.Emissive = new Color(rgb[0], rgb[1], rgb[2]); } #endregion #region modifiers // TODO is opactiy needed? //if (transparentData != null) //{ // material.opacity = transparentData.Value<float>(); //} var shininessData = materialJson["shininess"]; if (shininessData != null) { material.shininess = shininessData.Value <float>(); } #endregion #region textures var mapDiffuseData = materialJson["mapDiffuse"]; if (mapDiffuseData != null && texturePath != null) { var d = materialJson["mapDiffuse"].Value <string>(); var r = materialJson["mapDiffuseRepeat"]; var o = materialJson["mapDiffuseOffset"]; var wrapData = materialJson["mapDiffuseWrap"]; WrapMode wrapS; switch (wrapData[0].Value <string>()) { case "repeat": wrapS = WrapMode.Repeat; break; default: throw new NotSupportedException(); } WrapMode wrapT; switch (wrapData[1].Value <string>()) { case "repeat": wrapT = WrapMode.Repeat; break; default: throw new NotSupportedException(); } var a = materialJson["mapDiffuseAnisotropy"]; CreateTexture(texturePath, materialJson, "map", d, null, null, wrapS, wrapT, null); } var mapLightData = materialJson["mapLight"]; if (mapLightData != null && texturePath != null) { var d = materialJson["mapLight"]; var r = materialJson["mapLightRepeat"]; var o = materialJson["mapLightOffset"]; var w = materialJson["mapLightWrap"]; var a = materialJson["mapLightAnisotropy"]; throw new NotImplementedException();//CreateTexture( mpars, "lightMap", d,r, o, w, a); } var mapBumpData = materialJson["mapBump"]; if (mapBumpData != null && texturePath != null) { var d = materialJson["mapBump"]; var r = materialJson["mapBumpRepeat"]; var o = materialJson["mapBumpOffset"]; var w = materialJson["mapBumpWrap"]; var a = materialJson["mapBumpAnisotropy"]; throw new NotImplementedException();//CreateTexture( mpars, "bumpMap", d,r, o, w, a); } var mapNormalData = materialJson["mapNormal"]; if (mapNormalData != null && texturePath != null) { var d = materialJson["mapNormal"]; var r = materialJson["mapNormalRepeat"]; var o = materialJson["mapNormalOffset"]; var w = materialJson["mapNormalWrap"]; var a = materialJson["mapNormalAnisotropy"]; throw new NotImplementedException();//CreateTexture( mpars, "normalMap", d,r, o, w, a); } var mapSpecularData = materialJson["mapSpecular"]; if (mapSpecularData != null && texturePath != null) { var d = materialJson["mapSpecular"]; var r = materialJson["mapSpecularRepeat"]; var o = materialJson["mapSpecularOffset"]; var w = materialJson["mapSpecularWrap"]; var a = materialJson["mapSpecularAnisotropy"]; throw new NotImplementedException();//CreateTexture( mpars, "specularMap", d,r, o, w, a); } var mapAlphaData = materialJson["mapAlpha"]; if (mapAlphaData != null && texturePath != null) { var d = materialJson["mapAlpha"]; var r = materialJson["mapAlphaRepeat"]; var o = materialJson["mapAlphaOffset"]; var w = materialJson["mapAlphaWrap"]; var a = materialJson["mapAlphaAnisotropy"]; throw new NotImplementedException();//CreateTexture( mpars, "alphaMap", d,r, o, w, a); } #endregion var mapBumpScaleData = materialJson["mapBumpScale"]; if (mapBumpScaleData != null) { material.bumpScale = mapBumpScaleData.Value <float>(); } if (mapNormalData != null) { throw new NotImplementedException(); } return(material); }
public MorphAnimMesh(object geometry, MeshLambertMaterial material) { // TODO: Complete member initialization this.material = material; }
/// <summary> /// /// </summary> /// <param name="openTKcontrol"></param> public override void Load(Control openTKcontrol) { base.Load(openTKcontrol); camera = new PerspectiveCamera(70, openTKcontrol.Width / (float)openTKcontrol.Height, 1, 3000); camera.Position = new Vector3(1000, 500, 1000); camera.LookAt(new Vector3(0, 200, 0)); scene = new Scene(); scene.Add(new GridHelper(500, 100)); var light = new DirectionalLight(Color.White, 2); light.Position = new Vector3(1, 1, 1); scene.Add(light); var texture = ImageUtils.LoadTexture(@"examples/textures/crate.gif"); texture.Anisotropy = this.renderer.MaxAnisotropy; var geometry = new BoxGeometry(200, 200, 200); var material = new MeshLambertMaterial(null) { Map = texture }; //var arrowGeometry = new Geometry(); //var cm = new Mesh(new CylinderGeometry(0, 200, 1000, 12, 1, false)); //cm.Position.Y = 100; //cm.UpdateMatrix(); //arrowGeometry.Merge((Geometry)cm.Geometry, cm.Matrix); //var ww = new Mesh(arrowGeometry); //scene.Add(ww); control = new TransformControls(camera, openTKcontrol); control.PropertyChanged += control_PropertyChanged; mesh = new Mesh(geometry, material); scene.Add(mesh); control.Attach(mesh); scene.Add(control); openTKcontrol.KeyDown += (o, args) => { switch (args.KeyValue) { case 81: // Q control.setSpace(control.space == "local" ? "world" : "local"); break; case 87: // W control.SetMode("translate"); break; case 69: // E control.SetMode("rotate"); break; case 82: // R control.SetMode("scale"); break; case 187: case 107: // +,=,num+ control.setSize(control.size + 0.1f); break; case 189: case 10: // -,_,num- control.setSize(Math.Max(control.size - 0.1f, 0.1f)); break; } }; }
/// <summary> /// /// </summary> private Object3D Parse(string text) { // v float float float var vertex_pattern = @"v( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)"; // vn float float float var normal_pattern = @"vn( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)"; // vt float float var uv_pattern = @"vt( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)"; // f vertex vertex vertex ... var face_pattern1 = @"f( +-?\d+)( +-?\d+)( +-?\d+)( +-?\d+)?"; // f vertex/uv vertex/uv vertex/uv ... var face_pattern2 = @"f( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+))?"; // f vertex/uv/normal vertex/uv/normal vertex/uv/normal ... var face_pattern3 = @"f( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))?"; // f vertex//normal vertex//normal vertex//normal ... var face_pattern4 = @"f( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))?"; var lines = text.Split('\n'); for (var i = 0; i < lines.Length; i++) { var line = lines[i]; line = line.Trim(); if (line.Length == 0 || line[0] == '#') { continue; } { var rgx = new Regex(vertex_pattern, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { this._vertices.AddRange(new [] { floatParse(match.Groups[1].Value), floatParse(match.Groups[2].Value), floatParse(match.Groups[3].Value) }); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(normal_pattern, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { this._normals.AddRange(new[] { floatParse(match.Groups[1].Value), floatParse(match.Groups[2].Value), floatParse(match.Groups[3].Value) }); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(uv_pattern, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { this._uvs.AddRange(new[] { floatParse(match.Groups[1].Value), floatParse(match.Groups[2].Value) }); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(face_pattern1, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { addFace( intParse(match.Groups[1].Value), intParse(match.Groups[2].Value), intParse(match.Groups[3].Value), intParse(match.Groups[4].Value), null, null, null, null, null, null, null, null); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(face_pattern2, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { addFace( intParse(match.Groups[2].Value), intParse(match.Groups[5].Value), intParse(match.Groups[8].Value), intParse(match.Groups[11].Value), intParse(match.Groups[3].Value), intParse(match.Groups[6].Value), intParse(match.Groups[9].Value), intParse(match.Groups[12].Value), null, null, null, null); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(face_pattern3, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { addFace( intParse(match.Groups[2].Value), intParse(match.Groups[6].Value), intParse(match.Groups[10].Value), intParse(match.Groups[14].Value), intParse(match.Groups[3].Value), intParse(match.Groups[7].Value), intParse(match.Groups[11].Value), intParse(match.Groups[15].Value), intParse(match.Groups[4].Value), intParse(match.Groups[8].Value), intParse(match.Groups[12].Value), intParse(match.Groups[16].Value)); } if (matches.Count > 0) { continue; } } { var rgx = new Regex(face_pattern4, RegexOptions.IgnoreCase); var matches = rgx.Matches(line); foreach (Match match in matches) { addFace( intParse(match.Groups[2].Value), intParse(match.Groups[5].Value), intParse(match.Groups[8].Value), intParse(match.Groups[11].Value), null, null, null, null, intParse(match.Groups[3].Value), intParse(match.Groups[6].Value), intParse(match.Groups[9].Value), intParse(match.Groups[12].Value)); } if (matches.Count > 0) { continue; } } if (line.Contains("o ")) { this._geometry = new Geometry(); this._material = new Material(); this._object = new Objekt { name = line.Substring(2, line.Length - 2).Trim(), Geometry = this._geometry, Material = this._material }; this._objects.Add(this._object); continue; } if (line.Contains("g ")) { // group continue; } if (line.Contains("usemtl ")) { // material this._material.name = line.Substring(7, line.Length - 7).Trim(); continue; } if (line.Contains("mtllib ")) { // mtl file continue; } if (line.Contains("s ")) { // // smooth shading continue; } Trace.TraceInformation("OBJLoader: Unhandled line " + line); } var container = new Object3D(); for (var i = 0; i < this._objects.Count; i++) { var obj = this._objects[i]; var geom = obj.Geometry; var buffergeometry = new BufferGeometry(); buffergeometry.AddAttribute("position", new BufferAttribute <float>(geom.Vertices.ToArray(), 3)); if (geom.Normals.Count > 0) { buffergeometry.AddAttribute("normal", new BufferAttribute <float>(geom.Normals.ToArray(), 3)); } if (geom.Uvs.Count > 0) { buffergeometry.AddAttribute("uv", new BufferAttribute <float>(geom.Uvs.ToArray(), 2)); } var mat = new MeshLambertMaterial(); mat.Name = obj.Material.name; var mesh = new Mesh(buffergeometry, mat); mesh.Name = obj.name; container.Add(mesh); } return(container); }
/// <summary> /// /// </summary> /// <param name="control"></param> public override void Load(Control control) { base.Load(control); camera = new PerspectiveCamera(45, control.Width / (float)control.Height, 0.1f, 15000); this.camera.Position.Z = 1000; controls = new FlyControls(control, camera); controls.MovementSpeed = 1000.0f; controls.RollSpeed = (float)Math.PI / 10; scene = new Scene(); scene.Fog = new Fog(Color.Black, 1, 15000); scene.AutoUpdate = false; var light1 = new PointLight((Color)colorConvertor.ConvertFromString("#ff2200")); light1.Position = new Vector3(0, 0, 0); scene.Add(light1); var light2 = new DirectionalLight(Color.White); light2.Position = new Vector3(0, 0, 1).Normalize(); scene.Add(light2); var geometry = new List <GeometryEx>(); geometry.Add(new GeometryEx() { distance = 50, geometry = new IcosahedronGeometry(100, 4) }); geometry.Add(new GeometryEx() { distance = 300, geometry = new IcosahedronGeometry(100, 3) }); geometry.Add(new GeometryEx() { distance = 1000, geometry = new IcosahedronGeometry(100, 2) }); geometry.Add(new GeometryEx() { distance = 2000, geometry = new IcosahedronGeometry(100, 1) }); geometry.Add(new GeometryEx() { distance = 8000, geometry = new IcosahedronGeometry(100, 4) }); var material = new MeshLambertMaterial() { Color = Color.White, Wireframe = true }; for (var j = 0; j < 1000; j++) { var lod = new LOD(); for (var i = 0; i < geometry.Count; i++) { var mesh = new Mesh(geometry[i].geometry, material); mesh.Scale = new Vector3(1.5f, 1.5f, 1.5f); mesh.UpdateMatrix(); mesh.MatrixAutoUpdate = false; lod.AddLevel(mesh, geometry[i].distance); } lod.Position.X = 10000 * (0.5f - Mat.Random()); lod.Position.Y = 7500 * (0.5f - Mat.Random()); lod.Position.Z = 10000 * (0.5f - Mat.Random()); lod.UpdateMatrix(); lod.MatrixAutoUpdate = false; scene.Add(lod); } renderer.SortObjects = false; }
public MorphAnimMesh(object geometry, MeshLambertMaterial material) { // TODO: Complete member initialization this.material = material; }