public List <Triangle> ParseObject(string inputPath) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream(inputPath, FileMode.Open); var result = objLoader.Load(fileStream); List <Triangle> faces = new List <Triangle>(); for (int i = 0; i < result.Groups.Count; i++) { for (int j = 0; j < result.Groups[i].Faces.Count; j++) { Vector3 a = new Vector3(result.Vertices[result.Groups[i].Faces[j][0].VertexIndex - 1].X, result.Vertices[result.Groups[i].Faces[j][0].VertexIndex - 1].Y, result.Vertices[result.Groups[i].Faces[j][0].VertexIndex - 1].Z); Vector3 b = new Vector3(result.Vertices[result.Groups[i].Faces[j][1].VertexIndex - 1].X, result.Vertices[result.Groups[i].Faces[j][1].VertexIndex - 1].Y, result.Vertices[result.Groups[i].Faces[j][1].VertexIndex - 1].Z); Vector3 c = new Vector3(result.Vertices[result.Groups[i].Faces[j][2].VertexIndex - 1].X, result.Vertices[result.Groups[i].Faces[j][2].VertexIndex - 1].Y, result.Vertices[result.Groups[i].Faces[j][2].VertexIndex - 1].Z); faces.Add(new Triangle(a, b, c)); } } return(faces); }
public static string Convert(Stream stream) { var factory = new ObjLoaderFactory(); var loader = factory.Create(); var result = loader.Load(stream); var jsonVertices = new JArray(); var json = new JObject(new JProperty("vertices", jsonVertices)); foreach (var group in result.Groups) { foreach (var face in group.Faces) { for (int i = 0; i < face.Count; i++) { var vert = result.Vertices[face[i].VertexIndex - 1]; jsonVertices.Add(vert.X); jsonVertices.Add(vert.Y); jsonVertices.Add(vert.Z); } } } return(json.ToString()); }
public static Mesh LoadTriangleMesh(BufferPool pool, string name, Vector3 scale) { var triangles = new List <Triangle>(); var result = new ObjLoaderFactory().Create(new MaterialStubLoader()).Load(GetFileStream(name)); for (int i = 0; i < result.Groups.Count; ++i) { var group = result.Groups[i]; for (int j = 0; j < group.Faces.Count; ++j) { var face = group.Faces[j]; var a = result.Vertices[face[0].VertexIndex - 1]; for (int k = 1; k < face.Count - 1; ++k) { var b = result.Vertices[face[k].VertexIndex - 1]; var c = result.Vertices[face[k + 1].VertexIndex - 1]; triangles.Add(new Triangle { A = new Vector3(a.X, a.Y, a.Z), B = new Vector3(b.X, b.Y, b.Z), C = new Vector3(c.X, c.Y, c.Z) }); } } } pool.Take <Triangle>(triangles.Count, out var meshTriangles); for (int i = 0; i < triangles.Count; ++i) { meshTriangles[i] = triangles[i]; } Mesh mesh = new Mesh(meshTriangles, scale, pool); return(mesh); }
public static (Mesh mesh, Vector3[] positions, Vector3[] normals) LoadObj(string path) { ObjLoaderFactory factory = new ObjLoaderFactory(); var objLoader = factory.Create(); using (var fStream = new FileStream(path, FileMode.Open)) { var result = objLoader.Load(fStream); Dictionary <FaceVertex, VertexObjData> vertexData = new Dictionary <FaceVertex, VertexObjData>(); var verts = result.Vertices; var norms = result.Normals; var tex = result.Textures; var faces = result.Groups[0].Faces; uint[] indices = new uint[faces.Count * 3]; for (int i = 0; i < faces.Count; i++) { for (int j = 0; j < 3; j++) { var vert = faces[i][j]; if (vertexData.ContainsKey(vert) == false) { var v = ConvertVert(verts[vert.VertexIndex - 1]); var n = ConvertNorm(norms[vert.NormalIndex - 1]); var t = ConvertTexCoord(tex[vert.TextureIndex - 1]); vertexData.Add(vert, new VertexObjData(v, n, t, vertexData.Count)); } } } List <VertexObjData> sortedVertexData = vertexData.Values.ToList(); //sortedVertexData.Sort((a, b) => a.index.CompareTo(b.index)); for (int i = 0; i < faces.Count; i++) { for (int j = 0; j < 3; j++) { indices[i * 3 + j] = (uint)vertexData[faces[i][j]].index; } } var positions = new Vector3[sortedVertexData.Count]; var normals = new Vector3[sortedVertexData.Count]; float[] vertices = new float[sortedVertexData.Count * VertexLayout.Stride(VertexLayout.Type.PositionNormal)]; for (int i = 0; i < sortedVertexData.Count; i++) { var vert = sortedVertexData[i]; positions[vert.index] = vert.position; normals[vert.index] = vert.normal; VBOUtility.SetVertex(vertices, vert.position, vert.normal, vert.index); } var mesh = new Mesh(VertexLayout.Type.PositionNormal); mesh.SetBufferData(vertices, indices, OpenTK.Graphics.OpenGL.BufferUsageHint.StaticDraw); return(mesh, positions, normals); } }
private void LoadObj() { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream("G:\\универ\\4 курс\\компьютерная графика\\Kompyuteraya_grafika\\Компьютерая графика\\obj файлы\\Hammer.obj", FileMode.Open); var loadedObj = objLoader.Load(fileStream); foreach (var g in loadedObj.Groups) { foreach (var f in g.Faces) { values.Add(f.Count); for (var i = 0; i < f.Count; i++) { vectors.Add(new Vector3D( loadedObj.Vertices[f[i].VertexIndex - 1].X, loadedObj.Vertices[f[i].VertexIndex - 1].Y, loadedObj.Vertices[f[i].VertexIndex - 1].Z )); } } } fileStream.Close(); }
public unsafe static MeshContent Build(Stream dataStream) { var result = new ObjLoaderFactory().Create(new MaterialStubLoader()).Load(dataStream); var triangles = new List <TriangleContent>(); for (int i = 0; i < result.Groups.Count; ++i) { var group = result.Groups[i]; for (int j = 0; j < group.Faces.Count; ++j) { var face = group.Faces[j]; var a = result.Vertices[face[0].VertexIndex - 1]; for (int k = 1; k < face.Count - 1; ++k) { var b = result.Vertices[face[k].VertexIndex - 1]; var c = result.Vertices[face[k + 1].VertexIndex - 1]; triangles.Add(new TriangleContent { A = new Vector3(a.X, a.Y, a.Z), B = new Vector3(b.X, b.Y, b.Z), C = new Vector3(c.X, c.Y, c.Z) }); } } } return(new MeshContent(triangles.ToArray())); }
public Form1() { InitializeComponent(); OpenGlControl.InitializeContexts(); int height = OpenGlControl.Height; int width = OpenGlControl.Width; Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); float[] light_pos = new float[4] { 1, 0.5F, 1, 0 }; Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, light_pos); Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glDepthFunc(Gl.GL_LEQUAL); Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST); Gl.glClearColor(0, 0, 0, 1); Gl.glViewport(0, 0, width, height); Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Glu.gluPerspective(45.0f, (double)width / (double)height, 0.01f, 5000.0f); Gl.glMatrixMode(Gl.GL_MODELVIEW); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream("bardak.obj", FileMode.Open, FileAccess.Read); result = objLoader.Load(fileStream); }
protected void Load3dCube() { // This is coming from our resources //StreamResourceInfo stri =Application.GetResourceStream (new Uri ( // @"Autodesk.ADN.Toolkit.Wpf.Viewer;3dCube\3dCube.zip", // UriKind.Relative //)) ; //LoadModel (stri.Stream) ; Assembly assembly = Assembly.GetCallingAssembly(); string resourceName = assembly.GetName().Name + ".g"; ResourceManager rm = new ResourceManager(resourceName, assembly); using (ResourceSet set = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true)) { UnmanagedMemoryStream s = (UnmanagedMemoryStream)set.GetObject(@"3dCube/3dCube.zip", true); StreamResourceInfo stri = new StreamResourceInfo(s, ""); using (ZipArchive zip = new ZipArchive(stri.Stream)) { ZipArchiveEntry mesh = zip.GetEntry("mesh.obj"); ZipArchiveEntry mtl = zip.GetEntry("mesh.mtl"); ZipArchiveEntry texture = zip.GetEntry("tex_0.jpg"); using (new CursorSwitcher(null)) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(new ObjMaterialStreamProvider(mtl)); var result = objLoader.Load(mesh.Open()); _3dCubeMesh = ObjTriangleMeshAdapater.BuildVisualModel(result, texture); _3dCubeMeshMatGroup = (_3dCubeMesh.Content as GeometryModel3D).Material; // Reset the model & transform(s) this.cubeModel.Children.Clear(); this.cubeModel.Children.Add(_3dCubeMesh); } } } }
static void Main(string[] args) { var fact = new ObjLoaderFactory(); var loader = fact.Create(); using (var fs = File.OpenRead(args[0])) { var res = loader.Load(fs); List <Vector3> verts = new List <Vector3>(); List <ushort> indices = new List <ushort>(); foreach (var vert in res.Vertices) { verts.Add(new Vector3(vert.X, vert.Y, vert.Z)); } foreach (var idx in res.Groups[0].Faces) { indices.Add((ushort)(idx[0].VertexIndex - 1)); indices.Add((ushort)(idx[1].VertexIndex - 1)); indices.Add((ushort)(idx[2].VertexIndex - 1)); } HKX2.Builders.hknpCollisionMeshBuilder colBuilder = new HKX2.Builders.hknpCollisionMeshBuilder(); colBuilder.AddMesh(verts, indices); var root = colBuilder.CookCollision(); using (FileStream s2 = File.Create(args[0] + ".hkx")) { BinaryWriterEx bw = new BinaryWriterEx(false, s2); var s = new HKX2.PackFileSerializer(); s.Serialize(root, bw); } } }
/// <summary>Creates a new <see><c>Entity</c></see> from 3D model in file.</summary> /// <para> /// Uses the package CjClutter.ObjLoader to handle the parsing. Then it performs /// additional checks to ensure Sharpen constraints: /// - only 1 group is allowed in the model definition. /// </para> /// <param name="modelPath">Name of Wavefront-OBJ format file containing the 3D model.</param> /// <param name="texturePath">Path and file name of the graphical file to use for the texture</param> /// <returns>An <see><c>Entity</c></see> instance.</returns> /// <seealso>Entity</seealso> public Entity LoadEntity(string modelPath, string texturePath) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var modelStream = new FileStream(modelPath, FileMode.Open); var modelObj = objLoader.Load(modelStream); if (!ValidateModel(modelObj)) { string msg = $"[{modelPath}]: Model was loaded successfully but failed LoadEntity validation."; l.Error(msg); throw new Exception(msg); } var numberOfPositionCoordinates = modelObj.Vertices.Count * 3; var numberOfTextureCoordinates = modelObj.Vertices.Count * 2; var numberOfIndices = modelObj.Groups[0].Faces.Count * 3; float[] vertices = new float[numberOfPositionCoordinates]; float[] uvCoordinates = new float[numberOfTextureCoordinates]; int[] indices = new int[numberOfIndices]; GetModelRawData(modelObj, vertices, uvCoordinates, indices); return(LoadEntity(vertices, indices, uvCoordinates, texturePath)); }
public static Mesh Load(Stream stream) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var loadResult = objLoader.Load(stream); return(loadResult.ToMesh()); }
private LoadResult Load(string fileString) { var objectStream = CreateMemoryStreamFromString(fileString); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(new MaterialNullStreamProvider()); var _loadResult = objLoader.Load(objectStream); return(_loadResult); }
public static LoadResult LoadObjSolid(string fileName) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream(fileName, FileMode.OpenOrCreate); LoadResult solid = objLoader.Load(fileStream); fileStream.Close(); return(solid); }
public LoadResult LoadObj(string path) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); FileStream fileStream = new FileStream(path, FileMode.Open); var result = objLoader.Load(fileStream); return(result); }
private LoadResult GetResult(string file) { IObjLoaderFactory factory = new ObjLoaderFactory(); IObjLoader objLoader = factory.Create(); using (var stream = new FileStream(file, FileMode.Open)) { return(objLoader.Load(stream)); } }
public ObjectModel ParseObject(string pathToFile) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = File.OpenRead(pathToFile); var object3D = objLoader.Load(fileStream); return(LoadResultToObjectModel.ToObjectModel(object3D)); }
private LoadResult LoadObj(string objFile) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var text = (TextAsset)Resources.Load(objFile); var ms = new MemoryStream(Encoding.UTF8.GetBytes(text.text)); var result = objLoader.Load(ms); return(result); }
public Mesh Parse(string source) { var objLoader = ObjLoaderFactory.Create(); var bytes = IoWorker.Read(source); using (var stream = new MemoryStream(bytes)) { var result = objLoader.Load(stream); return(ModelToObjectConverter.Convert(result)); } }
public static LoadResult LoadOBJ(string filename) { if (objLoader != null) { var objloaderFactory = new ObjLoaderFactory(); objLoader = objloaderFactory.Create(); } FileStream fileStream = new FileStream(filename, FileMode.Open); return(objLoader.Load(fileStream)); }
public ObjectModel ParseObject(string pathToFile) { var sceneData = _sceneIO.Read(pathToFile); var obj = sceneData.SceneObjects[0]; var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = File.OpenRead(obj.MeshedObject.Reference); var object3D = objLoader.Load(fileStream); return(LoadResultToObjectModel.ToObjectModel(object3D)); }
private static void Main(string[] args) { Console.WriteLine("Hello World!"); // parsing section var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream("Resources/Dodec.obj", FileMode.Open, FileAccess.Read); var result = objLoader.Load(fileStream); Console.WriteLine(result.Vertices.Count); // parser call var ourMesh = new Mesh(); // Convert the vertices into the superior format foreach (var vert in result.Vertices) { ourMesh.Vertices.Add(new Vector(vert.X, vert.Y, vert.Z)); } var ind = result.Groups[0]?.Faces; if (ind != null) { foreach (var face in ind) { for (var j = 0; j < face.Count; j++) { ourMesh.Triangles.Add(face[j].VertexIndex); } } } else { return; } Console.WriteLine(ourMesh.Triangles.Count); Console.WriteLine(ourMesh.Vertices.Count); var decomped = Decompose(ourMesh); Console.WriteLine(decomped); }
private LoadResult LoadObjSolid( string fileName, float scale) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream(fileName, FileMode.OpenOrCreate); LoadResult solid = objLoader.Load(fileStream); fileStream.Close(); OpenGLUtilities.UnitizeObject(ref solid); OpenGLUtilities.ScaleObject(ref solid, scale); return(solid); }
public static List <Polygon> Load(string path) { var polygons = new List <Polygon>(); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream(path, FileMode.Open); var loadedObj = objLoader.Load(fileStream); var colors = new[] { Color.FromArgb(255, 0, 128, 255), Color.FromArgb(255, 255, 215, 0), Color.FromArgb(255, 5, 128, 0), Color.FromArgb(255, 255, 0, 64), Color.FromArgb(255, 200, 0, 160), Color.FromArgb(255, 60, 0, 64), Color.FromArgb(255, 100, 100, 100), Color.Crimson }; var k = -1; foreach (var g in loadedObj.Groups) { k = (k + 1) % colors.Length; var color = colors[k++]; foreach (var f in g.Faces) { var p = new Polygon(color); for (var i = 0; i < f.Count; i++) { p.AddPoint( loadedObj.Vertices[f[i].VertexIndex - 1].X, loadedObj.Vertices[f[i].VertexIndex - 1].Y, loadedObj.Vertices[f[i].VertexIndex - 1].Z ); } polygons.Add(p); } } fileStream.Close(); return(polygons); }
static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Start(); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(new MaterialStreamProvider()); var fileStream = new FileStream(args[0], FileMode.Open, FileAccess.Read); var result = objLoader.Load(fileStream); stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); PrintResult(result); }
/// <summary> /// Loads geometry from an OBJ file into native Dynamo geometry. /// </summary> /// <param name="filePath">The filepath of the .OBJ file.</param> /// <returns>List of OBJ Groups as Dynamo PolySurfaces.</returns> public static List <PolySurface> LoadObj(string filePath) { var loaderFactory = new ObjLoaderFactory(); var loader = loaderFactory.Create(); var fs = new FileStream(filePath, FileMode.Open); var result = loader.Load(fs); fs.Close(); List <PolySurface> polySurfaces = new List <PolySurface>(); foreach (var group in result.Groups) { polySurfaces.Add(GetObjGroupMesh(group, result)); } return(polySurfaces); }
public Bitmap Run() { var screen = new Bitmap(640, 480, PixelFormat.Format32bppArgb); var texture = new Bitmap("Data/box.png"); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(new IgnoreMaterial()); var box = objLoader.Load(File.OpenRead("Data/box.obj")); (var idata, var vdata) = CreateVertexArray(box); var lookAt = Matrix4x4.CreateLookAt(new Vector3(3.0f, 2.0f, 5.0f), new Vector3(0.0f), new Vector3(0.0f, 1.0f, 0.0f)); var fieldOfView = (float)(60.0 * Math.PI / 180.0); var aspect = 4.0f / 3.0f; var perspective = Matrix4x4.CreatePerspectiveFieldOfView(fieldOfView, aspect, 0.1f, 10.0f); var r = new Rasterizer(); var v = new VertexProcessor(r); r.SetRasterMode(RasterMode.Span); r.SetScissorRect(0, 0, 640, 480); v.SetViewport(0, 0, 640, 480); v.SetCullMode(CullMode.CW); var pixelShader = new PixelShader(); pixelShader.Screen = screen; pixelShader.Texture = texture; r.SetPixelShader(pixelShader); var vertexShader = new VertexShader(); vertexShader.Data = vdata; vertexShader.ModelViewProjectionMatrix = lookAt * perspective; v.SetVertexShader(vertexShader); v.DrawElements(DrawMode.Triangle, idata.Count, idata); return(screen); }
protected void LoadModel(Stream str) { using (ZipArchive zip = new ZipArchive(str)) { ZipArchiveEntry mesh = zip.GetEntry("mesh.obj"); ZipArchiveEntry mtl = zip.GetEntry("mesh.mtl"); ZipArchiveEntry texture = zip.GetEntry("tex_0.jpg"); using (new CursorSwitcher(null)) { var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(new ObjMaterialStreamProvider(mtl)); var result = objLoader.Load(mesh.Open()); _currentWireframe = null; _currentMesh = ObjTriangleMeshAdapater.BuildVisualModel(result, texture); _currentMeshMatGroup = (_currentMesh.Content as GeometryModel3D).Material; // Reset the model & transform(s) this.model.Children.Clear(); _currentDisplayMode = DisplayMode.Textured; this.model.Children.Add(_currentMesh); } } Home_Click(null, null); }
public override void Init() { objLoaderFactory = new ObjLoaderFactory(); materialStreamProvider = new CustomMaterialStreamProvider(); }
public static (List <IHitable>, Camera) CornellScene(string objPath, ImSoRandom rnd, int nx, int ny) { var world = new List <IHitable>(); var grad = new Lambertian(new ColourTexture()); var blue = new Lambertian(new ConstantTexture(0.05f, 0.05f, 0.65f)); var red = new Lambertian(new ConstantTexture(0.65f, 0.05f, 0.05f)); var white = new Lambertian(new ConstantTexture(0.73f, 0.73f, 0.73f)); var green = new Lambertian(new ConstantTexture(0.12f, 0.45f, 0.15f)); var light = new DiffuseLight(new ConstantTexture(15f, 15f, 15f)); var glass = new Dialectric(1.5f); world.Add(new RectXZ(213, 343, 227, 332, 554, light)); world.Add(new FlipNormals(new RectYZ(0, 555, 0, 555, 555, green))); world.Add(new RectYZ(0, 555, 0, 555, 0, red)); world.Add(new FlipNormals(new RectXZ(0, 555, 0, 555, 555, white))); world.Add(new RectXZ(0, 555, 0, 555, 0, white)); world.Add(new FlipNormals(new RectXY(0, 555, 0, 555, 555, white))); //world.Add( new Translate( new Box(Vector3.Zero, new Vector3(165, 165, 165), white), new Vector3(130, 0, 65))); //world.Add( new Translate( new Box(Vector3.Zero, new Vector3(165, 330, 165), white), new Vector3(265, 0, 295))); //world.Add(new Sphere(new Vector3(0, 0, 0), 3000.0f, new DiffuseLight(new ConstantTexture(new Vector3(1, 1, 1))))); /* * for (int i = 0; i < 50; i++) * { * var a = rnd.RandomVector(); * var b = rnd.RandomVector(); * var c = rnd.RandomVector(); * * //world.Add(new Translate(new Triangle(new Vector3(rnd.NextFloat() * 555f, rnd.NextFloat() * 555f, rnd.NextFloat() * 555f), new Vector3(rnd.NextFloat() * 555f, rnd.NextFloat() * 555f, rnd.NextFloat() * 555f), new Vector3(rnd.NextFloat() * 555f, rnd.NextFloat() * 555f, rnd.NextFloat() * 555f), red),new Vector3(10 + rnd.NextFloat() * 100f, 10 + rnd.NextFloat() * 100f, 10 + rnd.NextFloat() * 100f))); * world.Add(new Triangle(a, b, c, blue)); * } * */ //world.Add(new Triangle( new Vector3(340, 90, 62),new Vector3(100, 320, 190), new Vector3(262, 331, 400), grad)); var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); var fileStream = new FileStream(objPath, FileMode.Open); var obj = objLoader.Load(fileStream); var objBox = obj.GetBoundingBox(); var centerOffset = objBox.Center(); var height = objBox.Max.Y - objBox.Min.Y; var scaleFactor = new Vector3(50, 50, 50); // scale obj to wold space var displacement = new Vector3(555f / 2, height / 2f * scaleFactor.Y, 555f / 3 * 2); var glossScaleFactor = new Vector3(0.5f, 0.5f, 0.5f); // scale the unit vector normal foreach (var g in obj.Groups) { foreach (var f in g.Faces) { // Verticies have their origin set to the center of the bounding box var v0 = obj.Vertices[f[0].VertexIndex - 1].ToVector3() - centerOffset; var v1 = obj.Vertices[f[1].VertexIndex - 1].ToVector3() - centerOffset; var v2 = obj.Vertices[f[2].VertexIndex - 1].ToVector3() - centerOffset; var t = new Triangle(v0 * scaleFactor, v1 * scaleFactor, v2 * scaleFactor, glass); // add Dialectric world.Add(new Translate(t, displacement)); // add Lambertian. translated toward obj center by glossScaleFactor of a unit vector world.Add(new Translate(new Triangle(v0 * scaleFactor, v1 * scaleFactor, v2 * scaleFactor, white), displacement - Vector3.Normalize(t.Normal))); } } var lookFrom = new Vector3(278, 278, -800); var lookAt = new Vector3(278, 278, 0); var distToFocus = (lookFrom - lookAt).Length() - scaleFactor.Length() / 2; var aperture = 0.1f; var vFov = 40; var cam = new Camera(lookFrom, lookAt, new Vector3(0, 1, 0), vFov, (float)nx / (float)ny, aperture, distToFocus, 0.0f, 1.0f); return(world, cam); }
public static LoadResult loadObject(string fileName) { return(ObjLoaderFactory.Create().Load(File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))); }