private void AddSponzaAtriumObjects() { ObjParser parser = new ObjParser(); using (FileStream objStream = File.OpenRead(AssetHelper.GetPath("Models/SponzaAtrium/sponza.obj"))) { ObjFile atriumFile = parser.Parse(objStream); MtlFile atriumMtls; using (FileStream mtlStream = File.OpenRead(AssetHelper.GetPath("Models/SponzaAtrium/sponza.mtl"))) { atriumMtls = new MtlParser().Parse(mtlStream); } foreach (ObjFile.MeshGroup group in atriumFile.MeshGroups) { Vector3 scale = new Vector3(0.1f); ConstructedMeshInfo mesh = atriumFile.GetMesh(group); MaterialDefinition materialDef = atriumMtls.Definitions[mesh.MaterialName]; ImageSharpTexture overrideTextureData = null; ImageSharpTexture alphaTexture = null; MaterialPropsAndBuffer materialProps = CommonMaterials.Brick; if (materialDef.DiffuseTexture != null) { string texturePath = AssetHelper.GetPath("Models/SponzaAtrium/" + materialDef.DiffuseTexture); overrideTextureData = LoadTexture(texturePath, true); } if (materialDef.AlphaMap != null) { string texturePath = AssetHelper.GetPath("Models/SponzaAtrium/" + materialDef.AlphaMap); alphaTexture = LoadTexture(texturePath, false); } if (materialDef.Name.Contains("vase")) { materialProps = CommonMaterials.Vase; } if (group.Name == "sponza_117") { MirrorMesh.Plane = Plane.CreateFromVertices( atriumFile.Positions[group.Faces[0].Vertex0.PositionIndex] * scale.X, atriumFile.Positions[group.Faces[0].Vertex1.PositionIndex] * scale.Y, atriumFile.Positions[group.Faces[0].Vertex2.PositionIndex] * scale.Z); materialProps = CommonMaterials.Reflective; } AddTexturedMesh( mesh, overrideTextureData, alphaTexture, materialProps, Vector3.Zero, Quaternion.Identity, scale, group.Name); } } }
private static ConstructedMeshInfo LoadTeapotMesh() { if (_teapotMesh == null) { string path = Path.Combine(AppContext.BaseDirectory, "Assets", "Models", "Teapot.obj"); using (var fs = File.OpenRead(path)) { _teapotMesh = new ObjParser().Parse(fs).GetFirstMesh(); } } return(_teapotMesh); }
public PreviewScene(RenderContext rc, ConstructedMeshInfo previewItem) { _rc = rc; ResourceFactory factory = rc.ResourceFactory; _fb = factory.CreateFramebuffer(Width, Height); _projection = factory.CreateConstantBuffer(ShaderConstantType.Matrix4x4); UpdateProjectionData(); _view = factory.CreateConstantBuffer(ShaderConstantType.Matrix4x4); _view.SetData(Matrix4x4.CreateLookAt(Vector3.UnitZ * 7f + Vector3.UnitY * 1.5f, Vector3.Zero, Vector3.UnitY)); _lightProjection = factory.CreateConstantBuffer(ShaderConstantType.Matrix4x4); _lightProjection.SetData(Matrix4x4.CreateOrthographicOffCenter(-18, 18, -18, 18, -10, 60f)); _lightView = factory.CreateConstantBuffer(ShaderConstantType.Matrix4x4); _lightView.SetData(Matrix4x4.CreateLookAt(-_lightDirection * 20f, Vector3.Zero, Vector3.UnitY)); _lightInfo = factory.CreateConstantBuffer(ShaderConstantType.Float4); _lightInfo.SetData(new Vector4(_lightDirection, 1)); _standardPipelineStage = new StandardPipelineStage(rc, "Standard", _fb); _shadowMapStage = new ShadowMapStage(rc, "ShadowMap_Preview"); _stages = new PipelineStage[] { _shadowMapStage, _standardPipelineStage, }; SceneBuffers.Add("ProjectionMatrix", _projection); SceneBuffers.Add("ViewMatrix", _view); SceneBuffers.Add("LightProjMatrix", _lightProjection); SceneBuffers.Add("LightViewMatrix", _lightView); SceneBuffers.Add("LightInfo", _lightInfo); _floor = CreatePreviewModel(PlaneModel.Vertices, PlaneModel.Indices); _floor.WorldMatrix.Data = Matrix4x4.CreateScale(10f, 1f, 10f); _previewItem = CreatePreviewModel(previewItem.Vertices, previewItem.Indices); _previewItem.WorldMatrix.Data = Matrix4x4.CreateTranslation(0, 1.5f, 0); _visiblityManager = new FlatListVisibilityManager(); _visiblityManager.AddRenderItem(_floor); _visiblityManager.AddRenderItem(_previewItem); }
private void AddSponzaAtriumObjects(CommandList cl) { ObjParser parser = new ObjParser(); using (FileStream objStream = File.OpenRead(AssetHelper.GetPath("Models/SponzaAtrium/sponza.obj"))) { ObjFile atriumFile = parser.Parse(objStream); MtlFile atriumMtls; using (FileStream mtlStream = File.OpenRead(AssetHelper.GetPath("Models/SponzaAtrium/sponza.mtl"))) { atriumMtls = new MtlParser().Parse(mtlStream); } foreach (ObjFile.MeshGroup group in atriumFile.MeshGroups) { ConstructedMeshInfo mesh = atriumFile.GetMesh(group); MaterialDefinition materialDef = atriumMtls.Definitions[mesh.MaterialName]; ImageSharpTexture overrideTextureData = null; ImageSharpTexture alphaTexture = null; MaterialPropsAndBuffer materialProps = CommonMaterials.Brick; if (materialDef.DiffuseTexture != null) { string texturePath = AssetHelper.GetPath("Models/SponzaAtrium/" + materialDef.DiffuseTexture); overrideTextureData = LoadTexture(texturePath, true); } if (materialDef.AlphaMap != null) { string texturePath = AssetHelper.GetPath("Models/SponzaAtrium/" + materialDef.AlphaMap); alphaTexture = LoadTexture(texturePath, false); } if (materialDef.Name.Contains("vase")) { materialProps = CommonMaterials.Vase; } AddTexturedMesh(cl, mesh, overrideTextureData, alphaTexture, materialProps, Vector3.Zero, Quaternion.Identity, new Vector3(0.1f)); } } }