initial commit
						commit
						47a98f8fc5
					
				|  | @ -0,0 +1,351 @@ | |||
| ## Ignore Visual Studio temporary files, build results, and | ||||
| ## files generated by popular Visual Studio add-ons. | ||||
| ## | ||||
| ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore | ||||
| 
 | ||||
| # User-specific files | ||||
| *.rsuser | ||||
| *.suo | ||||
| *.user | ||||
| *.userosscache | ||||
| *.sln.docstates | ||||
| 
 | ||||
| # User-specific files (MonoDevelop/Xamarin Studio) | ||||
| *.userprefs | ||||
| 
 | ||||
| # Mono auto generated files | ||||
| mono_crash.* | ||||
| 
 | ||||
| # Build results | ||||
| [Dd]ebug/ | ||||
| [Dd]ebugPublic/ | ||||
| [Rr]elease/ | ||||
| [Rr]eleases/ | ||||
| [Aa][Rr][Mm]/ | ||||
| [Aa][Rr][Mm]64/ | ||||
| bld/ | ||||
| [Bb]in/ | ||||
| [Oo]bj/ | ||||
| [Ll]og/ | ||||
| [Ll]ogs/ | ||||
| 
 | ||||
| # Visual Studio 2015/2017 cache/options directory | ||||
| .vs/ | ||||
| # Uncomment if you have tasks that create the project's static files in wwwroot | ||||
| #wwwroot/ | ||||
| 
 | ||||
| # Visual Studio 2017 auto generated files | ||||
| Generated\ Files/ | ||||
| 
 | ||||
| # MSTest test Results | ||||
| [Tt]est[Rr]esult*/ | ||||
| [Bb]uild[Ll]og.* | ||||
| 
 | ||||
| # NUnit | ||||
| *.VisualState.xml | ||||
| TestResult.xml | ||||
| nunit-*.xml | ||||
| 
 | ||||
| # Build Results of an ATL Project | ||||
| [Dd]ebugPS/ | ||||
| [Rr]eleasePS/ | ||||
| dlldata.c | ||||
| 
 | ||||
| # Benchmark Results | ||||
| BenchmarkDotNet.Artifacts/ | ||||
| 
 | ||||
| # .NET Core | ||||
| project.lock.json | ||||
| project.fragment.lock.json | ||||
| artifacts/ | ||||
| 
 | ||||
| # StyleCop | ||||
| StyleCopReport.xml | ||||
| 
 | ||||
| # Files built by Visual Studio | ||||
| *_i.c | ||||
| *_p.c | ||||
| *_h.h | ||||
| *.ilk | ||||
| *.meta | ||||
| *.obj | ||||
| *.iobj | ||||
| *.pch | ||||
| *.pdb | ||||
| *.ipdb | ||||
| *.pgc | ||||
| *.pgd | ||||
| *.rsp | ||||
| *.sbr | ||||
| *.tlb | ||||
| *.tli | ||||
| *.tlh | ||||
| *.tmp | ||||
| *.tmp_proj | ||||
| *_wpftmp.csproj | ||||
| *.log | ||||
| *.vspscc | ||||
| *.vssscc | ||||
| .builds | ||||
| *.pidb | ||||
| *.svclog | ||||
| *.scc | ||||
| 
 | ||||
| # Chutzpah Test files | ||||
| _Chutzpah* | ||||
| 
 | ||||
| # Visual C++ cache files | ||||
| ipch/ | ||||
| *.aps | ||||
| *.ncb | ||||
| *.opendb | ||||
| *.opensdf | ||||
| *.sdf | ||||
| *.cachefile | ||||
| *.VC.db | ||||
| *.VC.VC.opendb | ||||
| 
 | ||||
| # Visual Studio profiler | ||||
| *.psess | ||||
| *.vsp | ||||
| *.vspx | ||||
| *.sap | ||||
| 
 | ||||
| # Visual Studio Trace Files | ||||
| *.e2e | ||||
| 
 | ||||
| # TFS 2012 Local Workspace | ||||
| $tf/ | ||||
| 
 | ||||
| # Guidance Automation Toolkit | ||||
| *.gpState | ||||
| 
 | ||||
| # ReSharper is a .NET coding add-in | ||||
| _ReSharper*/ | ||||
| *.[Rr]e[Ss]harper | ||||
| *.DotSettings.user | ||||
| 
 | ||||
| # TeamCity is a build add-in | ||||
| _TeamCity* | ||||
| 
 | ||||
| # DotCover is a Code Coverage Tool | ||||
| *.dotCover | ||||
| 
 | ||||
| # AxoCover is a Code Coverage Tool | ||||
| .axoCover/* | ||||
| !.axoCover/settings.json | ||||
| 
 | ||||
| # Coverlet is a free, cross platform Code Coverage Tool | ||||
| coverage*[.json, .xml, .info] | ||||
| 
 | ||||
| # Visual Studio code coverage results | ||||
| *.coverage | ||||
| *.coveragexml | ||||
| 
 | ||||
| # NCrunch | ||||
| _NCrunch_* | ||||
| .*crunch*.local.xml | ||||
| nCrunchTemp_* | ||||
| 
 | ||||
| # MightyMoose | ||||
| *.mm.* | ||||
| AutoTest.Net/ | ||||
| 
 | ||||
| # Web workbench (sass) | ||||
| .sass-cache/ | ||||
| 
 | ||||
| # Installshield output folder | ||||
| [Ee]xpress/ | ||||
| 
 | ||||
| # DocProject is a documentation generator add-in | ||||
| DocProject/buildhelp/ | ||||
| DocProject/Help/*.HxT | ||||
| DocProject/Help/*.HxC | ||||
| DocProject/Help/*.hhc | ||||
| DocProject/Help/*.hhk | ||||
| DocProject/Help/*.hhp | ||||
| DocProject/Help/Html2 | ||||
| DocProject/Help/html | ||||
| 
 | ||||
| # Click-Once directory | ||||
| publish/ | ||||
| 
 | ||||
| # Publish Web Output | ||||
| *.[Pp]ublish.xml | ||||
| *.azurePubxml | ||||
| # Note: Comment the next line if you want to checkin your web deploy settings, | ||||
| # but database connection strings (with potential passwords) will be unencrypted | ||||
| *.pubxml | ||||
| *.publishproj | ||||
| 
 | ||||
| # Microsoft Azure Web App publish settings. Comment the next line if you want to | ||||
| # checkin your Azure Web App publish settings, but sensitive information contained | ||||
| # in these scripts will be unencrypted | ||||
| PublishScripts/ | ||||
| 
 | ||||
| # NuGet Packages | ||||
| *.nupkg | ||||
| # NuGet Symbol Packages | ||||
| *.snupkg | ||||
| # The packages folder can be ignored because of Package Restore | ||||
| **/[Pp]ackages/* | ||||
| # except build/, which is used as an MSBuild target. | ||||
| !**/[Pp]ackages/build/ | ||||
| # Uncomment if necessary however generally it will be regenerated when needed | ||||
| #!**/[Pp]ackages/repositories.config | ||||
| # NuGet v3's project.json files produces more ignorable files | ||||
| *.nuget.props | ||||
| *.nuget.targets | ||||
| 
 | ||||
| # Microsoft Azure Build Output | ||||
| csx/ | ||||
| *.build.csdef | ||||
| 
 | ||||
| # Microsoft Azure Emulator | ||||
| ecf/ | ||||
| rcf/ | ||||
| 
 | ||||
| # Windows Store app package directories and files | ||||
| AppPackages/ | ||||
| BundleArtifacts/ | ||||
| Package.StoreAssociation.xml | ||||
| _pkginfo.txt | ||||
| *.appx | ||||
| *.appxbundle | ||||
| *.appxupload | ||||
| 
 | ||||
| # Visual Studio cache files | ||||
| # files ending in .cache can be ignored | ||||
| *.[Cc]ache | ||||
| # but keep track of directories ending in .cache | ||||
| !?*.[Cc]ache/ | ||||
| 
 | ||||
| # Others | ||||
| ClientBin/ | ||||
| ~$* | ||||
| *~ | ||||
| *.dbmdl | ||||
| *.dbproj.schemaview | ||||
| *.jfm | ||||
| *.pfx | ||||
| *.publishsettings | ||||
| orleans.codegen.cs | ||||
| 
 | ||||
| # Including strong name files can present a security risk | ||||
| # (https://github.com/github/gitignore/pull/2483#issue-259490424) | ||||
| #*.snk | ||||
| 
 | ||||
| # Since there are multiple workflows, uncomment next line to ignore bower_components | ||||
| # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | ||||
| #bower_components/ | ||||
| 
 | ||||
| # RIA/Silverlight projects | ||||
| Generated_Code/ | ||||
| 
 | ||||
| # Backup & report files from converting an old project file | ||||
| # to a newer Visual Studio version. Backup files are not needed, | ||||
| # because we have git ;-) | ||||
| _UpgradeReport_Files/ | ||||
| Backup*/ | ||||
| UpgradeLog*.XML | ||||
| UpgradeLog*.htm | ||||
| ServiceFabricBackup/ | ||||
| *.rptproj.bak | ||||
| 
 | ||||
| # SQL Server files | ||||
| *.mdf | ||||
| *.ldf | ||||
| *.ndf | ||||
| 
 | ||||
| # Business Intelligence projects | ||||
| *.rdl.data | ||||
| *.bim.layout | ||||
| *.bim_*.settings | ||||
| *.rptproj.rsuser | ||||
| *- [Bb]ackup.rdl | ||||
| *- [Bb]ackup ([0-9]).rdl | ||||
| *- [Bb]ackup ([0-9][0-9]).rdl | ||||
| 
 | ||||
| # Microsoft Fakes | ||||
| FakesAssemblies/ | ||||
| 
 | ||||
| # GhostDoc plugin setting file | ||||
| *.GhostDoc.xml | ||||
| 
 | ||||
| # Node.js Tools for Visual Studio | ||||
| .ntvs_analysis.dat | ||||
| node_modules/ | ||||
| 
 | ||||
| # Visual Studio 6 build log | ||||
| *.plg | ||||
| 
 | ||||
| # Visual Studio 6 workspace options file | ||||
| *.opt | ||||
| 
 | ||||
| # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | ||||
| *.vbw | ||||
| 
 | ||||
| # Visual Studio LightSwitch build output | ||||
| **/*.HTMLClient/GeneratedArtifacts | ||||
| **/*.DesktopClient/GeneratedArtifacts | ||||
| **/*.DesktopClient/ModelManifest.xml | ||||
| **/*.Server/GeneratedArtifacts | ||||
| **/*.Server/ModelManifest.xml | ||||
| _Pvt_Extensions | ||||
| 
 | ||||
| # Paket dependency manager | ||||
| .paket/paket.exe | ||||
| paket-files/ | ||||
| 
 | ||||
| # FAKE - F# Make | ||||
| .fake/ | ||||
| 
 | ||||
| # CodeRush personal settings | ||||
| .cr/personal | ||||
| 
 | ||||
| # Python Tools for Visual Studio (PTVS) | ||||
| __pycache__/ | ||||
| *.pyc | ||||
| 
 | ||||
| # Cake - Uncomment if you are using it | ||||
| # tools/** | ||||
| # !tools/packages.config | ||||
| 
 | ||||
| # Tabs Studio | ||||
| *.tss | ||||
| 
 | ||||
| # Telerik's JustMock configuration file | ||||
| *.jmconfig | ||||
| 
 | ||||
| # BizTalk build output | ||||
| *.btp.cs | ||||
| *.btm.cs | ||||
| *.odx.cs | ||||
| *.xsd.cs | ||||
| 
 | ||||
| # OpenCover UI analysis results | ||||
| OpenCover/ | ||||
| 
 | ||||
| # Azure Stream Analytics local run output | ||||
| ASALocalRun/ | ||||
| 
 | ||||
| # MSBuild Binary and Structured Log | ||||
| *.binlog | ||||
| 
 | ||||
| # NVidia Nsight GPU debugger configuration file | ||||
| *.nvuser | ||||
| 
 | ||||
| # MFractors (Xamarin productivity tool) working folder | ||||
| .mfractor/ | ||||
| 
 | ||||
| # Local History for Visual Studio | ||||
| .localhistory/ | ||||
| 
 | ||||
| # BeatPulse healthcheck temp database | ||||
| healthchecksdb | ||||
| 
 | ||||
| # Backup folder for Package Reference Convert tool in Visual Studio 2017 | ||||
| MigrationBackup/ | ||||
| 
 | ||||
| # Ionide (cross platform F# VS Code tools) working folder | ||||
| .ionide/ | ||||
|  | @ -0,0 +1,102 @@ | |||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Numerics; | ||||
| using Microsoft.Xna.Framework.Graphics; | ||||
| 
 | ||||
| namespace Smuggler | ||||
| { | ||||
|     public static class Importer | ||||
|     { | ||||
|         public static Model ImportGLTF(GraphicsDevice graphicsDevice, Stream stream) | ||||
|         { | ||||
|             var sharpModel = SharpGLTF.Schema2.ModelRoot.ReadGLB(stream); | ||||
| 
 | ||||
|             var meshes = new List<Mesh>(); | ||||
| 
 | ||||
|             foreach (var mesh in sharpModel.LogicalMeshes) | ||||
|             { | ||||
|                 var meshParts = new List<MeshPart>(); | ||||
| 
 | ||||
|                 foreach (var primitive in mesh.Primitives) | ||||
|                 { | ||||
|                     var positionAccessor = primitive.GetVertexAccessor("POSITION").AsVector3Array(); | ||||
|                     var normalAccessor = primitive.GetVertexAccessor("NORMAL").AsVector3Array(); | ||||
|                     var texcoordAccessor = primitive.GetVertexAccessor("TEXCOORD_0").AsVector2Array(); | ||||
|                     var indexAccessor = primitive.GetIndexAccessor().AsIndicesArray(); | ||||
| 
 | ||||
|                     var positions = new Vector3[positionAccessor.Count]; | ||||
|                     var normals = new Vector3[normalAccessor.Count]; | ||||
|                     var texcoords = new Vector2[texcoordAccessor.Count]; | ||||
|                     var triangles = new List<Triangle>(); | ||||
| 
 | ||||
|                     for (int i = 0; i < positions.Length; i++) | ||||
|                     { | ||||
|                         var position = positionAccessor[i]; | ||||
|                         positions[i] = new Vector3(-position.X, -position.Z, position.Y); | ||||
|                     } | ||||
| 
 | ||||
|                     for (int i = 0; i < normals.Length; i++) | ||||
|                     { | ||||
|                         var normal = normalAccessor[i]; | ||||
|                         normals[i] = -new Vector3(normal.X, normal.Z, normal.Y); | ||||
|                     } | ||||
|                      | ||||
|                     foreach (var (a, b, c) in primitive.GetTriangleIndices()) | ||||
|                     { | ||||
|                         triangles.Add(new Triangle(a, b, c)); | ||||
|                     } | ||||
| 
 | ||||
|                     var vertexBuffer = new VertexBuffer( | ||||
|                         graphicsDevice, | ||||
|                         typeof(VertexPositionNormalTexture), | ||||
|                         positions.Length, | ||||
|                         BufferUsage.WriteOnly | ||||
|                     ); | ||||
| 
 | ||||
|                     var indexBuffer = new IndexBuffer( | ||||
|                         graphicsDevice, | ||||
|                         IndexElementSize.ThirtyTwoBits, | ||||
|                         indexAccessor.Count, | ||||
|                         BufferUsage.WriteOnly | ||||
|                     ); | ||||
| 
 | ||||
|                     var vertices = new VertexPositionNormalTexture[primitive.IndexAccessor.Count]; | ||||
|                     var indices = new uint[primitive.IndexAccessor.Count]; | ||||
|                     var indexCounter = 0; | ||||
| 
 | ||||
|                     foreach (var index in primitive.GetIndices()) | ||||
|                     { | ||||
|                         var position = positions[index]; | ||||
|                         var normal = normals[index]; | ||||
|                         var texcoord = texcoords[index]; | ||||
| 
 | ||||
|                         indices[indexCounter] = index; | ||||
|                         vertices[index] = new VertexPositionNormalTexture( | ||||
|                             new Microsoft.Xna.Framework.Vector3(position.X, position.Y, position.Z),  | ||||
|                             new Microsoft.Xna.Framework.Vector3(normal.X, normal.Y, normal.Z), | ||||
|                             new Microsoft.Xna.Framework.Vector2(texcoord.X, texcoord.Y) | ||||
|                         ); | ||||
| 
 | ||||
|                         indexCounter++; | ||||
|                     } | ||||
| 
 | ||||
|                     indexBuffer.SetData(indices); | ||||
|                     vertexBuffer.SetData(vertices); | ||||
| 
 | ||||
|                     meshParts.Add( | ||||
|                         new MeshPart( | ||||
|                             vertexBuffer,  | ||||
|                             indexBuffer, | ||||
|                             triangles.ToArray(), | ||||
|                             new BasicEffect(graphicsDevice) | ||||
|                         ) | ||||
|                     ); | ||||
|                 } | ||||
| 
 | ||||
|                 meshes.Add(new Mesh(meshParts.ToArray())); | ||||
|             } | ||||
| 
 | ||||
|             return new Model(meshes.ToArray()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,23 @@ | |||
| using Microsoft.Xna.Framework; | ||||
| using Microsoft.Xna.Framework.Graphics; | ||||
| 
 | ||||
| namespace Smuggler | ||||
| { | ||||
|     public class Mesh | ||||
|     { | ||||
|         public MeshPart[] MeshParts { get; } | ||||
| 
 | ||||
|         public Mesh(MeshPart[] meshParts) | ||||
|         { | ||||
|             MeshParts = meshParts; | ||||
|         } | ||||
| 
 | ||||
|         public void Draw(GraphicsDevice graphicsDevice, Matrix world, Matrix view, Matrix projection) | ||||
|         { | ||||
|             foreach (var meshPart in MeshParts) | ||||
|             { | ||||
|                 meshPart.Draw(graphicsDevice, world, view, projection); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,45 @@ | |||
| using Microsoft.Xna.Framework; | ||||
| using Microsoft.Xna.Framework.Graphics; | ||||
| 
 | ||||
| namespace Smuggler | ||||
| { | ||||
|     public class MeshPart | ||||
|     { | ||||
|         public IndexBuffer IndexBuffer { get; } | ||||
|         public VertexBuffer VertexBuffer { get; } | ||||
|         public Triangle[] Triangles { get; } | ||||
|         public BasicEffect Effect { get; } | ||||
| 
 | ||||
|         public MeshPart(VertexBuffer vertexBuffer, IndexBuffer indexBuffer, Triangle[] triangles, BasicEffect effect) | ||||
|         { | ||||
|             VertexBuffer = vertexBuffer; | ||||
|             IndexBuffer = indexBuffer; | ||||
|             Triangles = triangles; | ||||
|             Effect = effect; | ||||
|         } | ||||
| 
 | ||||
|         public void Draw(GraphicsDevice graphicsDevice, Matrix world, Matrix view, Matrix projection) | ||||
|         { | ||||
|             graphicsDevice.SetVertexBuffer(VertexBuffer); | ||||
|             graphicsDevice.Indices = IndexBuffer; | ||||
| 
 | ||||
|             Effect.World = world; | ||||
|             Effect.View = view; | ||||
|             Effect.Projection = projection; | ||||
| 
 | ||||
|             foreach (var pass in Effect.CurrentTechnique.Passes) | ||||
|             { | ||||
|                 pass.Apply(); | ||||
|                  | ||||
|                 graphicsDevice.DrawIndexedPrimitives( | ||||
|                     PrimitiveType.TriangleList, | ||||
|                     0, | ||||
|                     0, | ||||
|                     VertexBuffer.VertexCount, | ||||
|                     0, | ||||
|                     Triangles.Length | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,23 @@ | |||
| using Microsoft.Xna.Framework; | ||||
| using Microsoft.Xna.Framework.Graphics; | ||||
| 
 | ||||
| namespace Smuggler | ||||
| { | ||||
|     public class Model | ||||
|     { | ||||
|         public Mesh[] Meshes { get; } | ||||
| 
 | ||||
|         public Model(Mesh[] meshes) | ||||
|         { | ||||
|             Meshes = meshes; | ||||
|         } | ||||
| 
 | ||||
|         public void Draw(GraphicsDevice graphicsDevice, Matrix world, Matrix view, Matrix projection) | ||||
|         { | ||||
|             foreach (var mesh in Meshes) | ||||
|             { | ||||
|                 mesh.Draw(graphicsDevice, world, view, projection); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,3 @@ | |||
| # Smuggler | ||||
| 
 | ||||
| A 3D model library for sneaking around the XNA content pipeline. | ||||
|  | @ -0,0 +1,21 @@ | |||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>netstandard2.0</TargetFramework> | ||||
|     <RootNamespace>Smuggler</RootNamespace> | ||||
|     <Version>0.1.0</Version> | ||||
|     <Authors>Cassandra Lugo; Evan Hemsley</Authors> | ||||
|     <Copyright>Cassandra Lugo and Evan Hemsley 2020</Copyright> | ||||
|     <GeneratePackageOnBuild>true</GeneratePackageOnBuild> | ||||
|     <AssemblyName>Smuggler</AssemblyName> | ||||
|   </PropertyGroup> | ||||
| 
 | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="SharpGLTF.Core" Version="1.0.0-alpha0018" /> | ||||
|   </ItemGroup> | ||||
| 
 | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\FNA\FNA.Core.csproj"/> | ||||
|   </ItemGroup> | ||||
|    | ||||
| </Project> | ||||
|  | @ -0,0 +1,16 @@ | |||
| namespace Smuggler | ||||
| { | ||||
|     public struct Triangle | ||||
|     { | ||||
|         public int A { get; } | ||||
|         public int B { get; } | ||||
|         public int C { get; } | ||||
| 
 | ||||
|         public Triangle(int a, int b, int c) | ||||
|         { | ||||
|             A = a; | ||||
|             B = b; | ||||
|             C = c; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue