audio-improve-offer
Harald Christian Joachim Wolff 2017-05-04 23:57:00 +02:00
parent 6c988beaad
commit 0fe2fb1aeb
26 changed files with 798 additions and 72 deletions

1
ImageSharp 160000

@ -0,0 +1 @@
Subproject commit 8524b7e0a75bdb7398e8b60885c442a46c57ab91

View File

@ -10,8 +10,10 @@ using OpenTK.Audio.OpenAL;
using OpenTK.Audio; using OpenTK.Audio;
using ImageSharp; using ImageSharp;
using ImageSharp.Processing;
using org.niclasundharald.engine.graphics; using org.niclasundharald.engine.graphics;
using org.niclasundharald.engine;
namespace nhengine namespace nhengine
{ {
@ -58,16 +60,27 @@ namespace nhengine
public void bootMap(){ public void bootMap(){
ImageSharp.Image i = ImageSharp.Image.Load( new FileStream("M3-wip.png",FileMode.Open)); ImageSharp.Image i = ImageSharp.Image.Load( new FileStream("M3-wip.png",FileMode.Open));
i.Flip(ImageSharp.Processing.FlipType.Vertical); i.Flip(ImageSharp.Processing.FlipType.Vertical);
i.Resize(500,500);
map = new SquaredMap(i); map = new SquaredMap(i);
glWindow.Scene.RootObject.addChild( map ); glWindow.Scene.RootObject.addChild( map );
ModelManager.instance.addSearchPath("./models");
DumpObject dobj = new DumpObject();
dobj.Model3D = ModelManager.instance.loadModel("alfa147",0.0254f);
Vector3 v3 = map.ground(new Vector2(40,40));
v3.Z *= 2;
dobj.Position = v3;
glWindow.Scene.RootObject.addChild( dobj );
} }
public void run(){ public void run(){
glWindow.MakeCurrent(); glWindow.MakeCurrent();
glWindow.Run(30,30); glWindow.Run(25,25);
} }

View File

@ -54,12 +54,12 @@ namespace nhengine
GL.Enable(EnableCap.Blend); GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha,BlendingFactorDest.OneMinusSrcAlpha); GL.BlendFunc(BlendingFactorSrc.SrcAlpha,BlendingFactorDest.OneMinusSrcAlpha);
cube = new Cube(new Vector3(0,0,512), 128.0f); cube = new Cube(new Vector3(0,0,150), 16.0f);
c1 = new Cube(new Vector3(512,0,512), 128.0f); c1 = new Cube(new Vector3(16,0,150), 8.0f);
c2 = new Cube(new Vector3(0,512,512), 128.0f); c2 = new Cube(new Vector3(0,150,150), 8.0f);
c3 = new Cube(new Vector3(512,512,512), 128.0f); c3 = new Cube(new Vector3(175,175,150), 8.0f);
lookAt = new Vector3(0,0,0); lookAt = new Vector3(0,0,128.0f);
lookDistance = 2048; lookDistance = 2048;
arcUpDown = MathHelper.PiOver6; arcUpDown = MathHelper.PiOver6;
arcLeftRight = MathHelper.PiOver4; arcLeftRight = MathHelper.PiOver4;
@ -94,6 +94,22 @@ namespace nhengine
scene.draw(); scene.draw();
SwapBuffers(); SwapBuffers();
Title = string.Format("{0:F}/s {1:F}/s [{2:F}s]", RenderFrequency,UpdateFrequency,UpdatePeriod);
}
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
Matrix4 m4 = Matrix4.CreateRotationZ(MathHelper.Pi / 90.0f);
cube.Rotation = m4 * cube.Rotation;
c1.Position = (m4.Inverted() * new Vector4(c1.Position)).Xyz;
c2.Rotation = (m4 * c2.Rotation);
c3.Position = (m4 * new Vector4(c3.Position)).Xyz;
Actor.updateAll( (float)UpdatePeriod );
} }
private void captureMouse(){ private void captureMouse(){
@ -164,15 +180,36 @@ namespace nhengine
rotateLeftRight(-MathHelper.Pi / 90.0f); rotateLeftRight(-MathHelper.Pi / 90.0f);
break; break;
case OpenTK.Input.Key.W: case OpenTK.Input.Key.W:
walk(250.0f); walk(e.Shift ? 50.0f : 5.0f);
break; break;
case OpenTK.Input.Key.S: case OpenTK.Input.Key.S:
walk(-250.0f); walk(e.Shift ? -50.0f : -5.0f);
break;
case OpenTK.Input.Key.A:
strafe(e.Shift ? -50.0f : -5.0f);
break;
case OpenTK.Input.Key.D:
strafe(e.Shift ? 50.0f : 5.0f);
break;
case OpenTK.Input.Key.Space:
fireBallistic();
break; break;
} }
} }
private void fireBallistic(){
Console.WriteLine("Fire Ballistic...");
BallisticActor ba = new BallisticActor(0);
ba.Position = BootStrap.instance().SquaredMap.ground(new Vector2(10,10));
ba.Velocity = new Vector3(1,1,1);// + (Matrix4.CreateRotationZ(arcLeftRight) * Vector4.UnitY).Xyz;
ba.Velocity.Normalize();
ba.Velocity *= 50;
}
public void rotateUpDown(float arc) public void rotateUpDown(float arc)
{ {
arcUpDown += arc; arcUpDown += arc;
@ -191,6 +228,11 @@ namespace nhengine
setupCamera(); setupCamera();
} }
public void strafe(float distance){
lookAt += Vector3.Cross(new Vector3(sceneCamera.View.Xy),Vector3.UnitZ).Normalized() * distance;
setupCamera();
}
protected override void OnKeyUp(OpenTK.Input.KeyboardKeyEventArgs e) protected override void OnKeyUp(OpenTK.Input.KeyboardKeyEventArgs e)
{ {
} }

View File

@ -0,0 +1,10 @@
# Blender MTL File: 'ballistisch.blend'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

View File

@ -0,0 +1,240 @@
# Blender v2.78 (sub 0) OBJ File: 'ballistisch.blend'
# www.blender.org
mtllib ballistisch.mtl
o Cylinder
v 0.000000 -1.000000 -0.250000
v 0.000000 1.000000 -0.250000
v 0.048773 -1.000000 -0.245196
v 0.048773 1.000000 -0.245196
v 0.095671 -1.000000 -0.230970
v 0.095671 1.000000 -0.230970
v 0.138893 -1.000000 -0.207867
v 0.138893 1.000000 -0.207867
v 0.176777 -1.000000 -0.176777
v 0.176777 1.000000 -0.176777
v 0.207867 -1.000000 -0.138893
v 0.207867 1.000000 -0.138893
v 0.230970 -1.000000 -0.095671
v 0.230970 1.000000 -0.095671
v 0.245196 -1.000000 -0.048773
v 0.245196 1.000000 -0.048773
v 0.250000 -1.000000 -0.000000
v 0.250000 1.000000 -0.000000
v 0.245196 -1.000000 0.048773
v 0.245196 1.000000 0.048773
v 0.230970 -1.000000 0.095671
v 0.230970 1.000000 0.095671
v 0.207867 -1.000000 0.138893
v 0.207867 1.000000 0.138893
v 0.176777 -1.000000 0.176777
v 0.176777 1.000000 0.176777
v 0.138893 -1.000000 0.207867
v 0.138893 1.000000 0.207867
v 0.095671 -1.000000 0.230970
v 0.095671 1.000000 0.230970
v 0.048773 -1.000000 0.245196
v 0.048773 1.000000 0.245196
v -0.000000 -1.000000 0.250000
v -0.000000 1.000000 0.250000
v -0.048773 -1.000000 0.245196
v -0.048773 1.000000 0.245196
v -0.095671 -1.000000 0.230970
v -0.095671 1.000000 0.230970
v -0.138893 -1.000000 0.207867
v -0.138893 1.000000 0.207867
v -0.176777 -1.000000 0.176777
v -0.176777 1.000000 0.176777
v -0.207868 -1.000000 0.138892
v -0.207868 1.000000 0.138892
v -0.230970 -1.000000 0.095671
v -0.230970 1.000000 0.095671
v -0.245196 -1.000000 0.048772
v -0.245196 1.000000 0.048772
v -0.250000 -1.000000 -0.000000
v -0.250000 1.000000 -0.000000
v -0.245196 -1.000000 -0.048773
v -0.245196 1.000000 -0.048773
v -0.230970 -1.000000 -0.095671
v -0.230970 1.000000 -0.095671
v -0.207867 -1.000000 -0.138893
v -0.207867 1.000000 -0.138893
v -0.176776 -1.000000 -0.176777
v -0.176776 1.000000 -0.176777
v -0.138892 -1.000000 -0.207868
v -0.138892 1.000000 -0.207868
v -0.095671 -1.000000 -0.230970
v -0.095671 1.000000 -0.230970
v -0.048772 -1.000000 -0.245196
v -0.048772 1.000000 -0.245196
vn 0.0980 0.0000 -0.9952
vn 0.2903 0.0000 -0.9569
vn 0.4714 0.0000 -0.8819
vn 0.6344 0.0000 -0.7730
vn 0.7730 0.0000 -0.6344
vn 0.8819 0.0000 -0.4714
vn 0.9569 0.0000 -0.2903
vn 0.9952 0.0000 -0.0980
vn 0.9952 0.0000 0.0980
vn 0.9569 0.0000 0.2903
vn 0.8819 0.0000 0.4714
vn 0.7730 0.0000 0.6344
vn 0.6344 0.0000 0.7730
vn 0.4714 0.0000 0.8819
vn 0.2903 0.0000 0.9569
vn 0.0980 0.0000 0.9952
vn -0.0980 0.0000 0.9952
vn -0.2903 0.0000 0.9569
vn -0.4714 0.0000 0.8819
vn -0.6344 0.0000 0.7730
vn -0.7730 0.0000 0.6344
vn -0.8819 0.0000 0.4714
vn -0.9569 0.0000 0.2903
vn -0.9952 0.0000 0.0980
vn -0.9952 0.0000 -0.0980
vn -0.9569 0.0000 -0.2903
vn -0.8819 0.0000 -0.4714
vn -0.7730 0.0000 -0.6344
vn -0.6344 0.0000 -0.7730
vn -0.4714 0.0000 -0.8819
vn 0.0000 1.0000 0.0000
vn -0.2903 0.0000 -0.9569
vn -0.0980 0.0000 -0.9952
vn 0.0000 -1.0000 -0.0000
usemtl None
s off
f 1//1 2//1 4//1 3//1
f 3//2 4//2 6//2 5//2
f 5//3 6//3 8//3 7//3
f 7//4 8//4 10//4 9//4
f 9//5 10//5 12//5 11//5
f 11//6 12//6 14//6 13//6
f 13//7 14//7 16//7 15//7
f 15//8 16//8 18//8 17//8
f 17//9 18//9 20//9 19//9
f 19//10 20//10 22//10 21//10
f 21//11 22//11 24//11 23//11
f 23//12 24//12 26//12 25//12
f 25//13 26//13 28//13 27//13
f 27//14 28//14 30//14 29//14
f 29//15 30//15 32//15 31//15
f 31//16 32//16 34//16 33//16
f 33//17 34//17 36//17 35//17
f 35//18 36//18 38//18 37//18
f 37//19 38//19 40//19 39//19
f 39//20 40//20 42//20 41//20
f 41//21 42//21 44//21 43//21
f 43//22 44//22 46//22 45//22
f 45//23 46//23 48//23 47//23
f 47//24 48//24 50//24 49//24
f 49//25 50//25 52//25 51//25
f 51//26 52//26 54//26 53//26
f 53//27 54//27 56//27 55//27
f 55//28 56//28 58//28 57//28
f 57//29 58//29 60//29 59//29
f 59//30 60//30 62//30 61//30
f 4//31 2//31 64//31 62//31 60//31 58//31 56//31 54//31 52//31 50//31 48//31 46//31 44//31 42//31 40//31 38//31 36//31 34//31 32//31 30//31 28//31 26//31 24//31 22//31 20//31 18//31 16//31 14//31 12//31 10//31 8//31 6//31
f 61//32 62//32 64//32 63//32
f 63//33 64//33 2//33 1//33
f 1//34 3//34 5//34 7//34 9//34 11//34 13//34 15//34 17//34 19//34 21//34 23//34 25//34 27//34 29//34 31//34 33//34 35//34 37//34 39//34 41//34 43//34 45//34 47//34 49//34 51//34 53//34 55//34 57//34 59//34 61//34 63//34
o Cone
v -0.000000 0.939394 -0.250000
v 0.048773 0.939394 -0.245196
v 0.095671 0.939394 -0.230970
v 0.138893 0.939394 -0.207867
v 0.176777 0.939394 -0.176777
v 0.207867 0.939394 -0.138892
v 0.230970 0.939394 -0.095671
v 0.245196 0.939394 -0.048773
v 0.250000 0.939394 0.000000
v -0.000000 2.939394 0.000000
v 0.245196 0.939394 0.048773
v 0.230970 0.939394 0.095671
v 0.207867 0.939394 0.138893
v 0.176777 0.939394 0.176777
v 0.138893 0.939394 0.207867
v 0.095671 0.939394 0.230970
v 0.048772 0.939394 0.245196
v -0.000000 0.939394 0.250000
v -0.048773 0.939394 0.245196
v -0.095671 0.939394 0.230970
v -0.138893 0.939394 0.207867
v -0.176777 0.939394 0.176777
v -0.207868 0.939394 0.138892
v -0.230970 0.939394 0.095671
v -0.245196 0.939394 0.048772
v -0.250000 0.939394 -0.000000
v -0.245196 0.939394 -0.048773
v -0.230970 0.939394 -0.095671
v -0.207867 0.939394 -0.138893
v -0.176776 0.939394 -0.176777
v -0.138892 0.939394 -0.207868
v -0.095671 0.939394 -0.230970
v -0.048772 0.939394 -0.245196
vn 0.0973 0.1234 -0.9876
vn 0.2881 0.1234 -0.9496
vn 0.4678 0.1234 -0.8752
vn 0.6295 0.1234 -0.7671
vn 0.7671 0.1234 -0.6295
vn 0.8752 0.1234 -0.4678
vn 0.9496 0.1234 -0.2881
vn 0.9876 0.1234 -0.0973
vn 0.9876 0.1234 0.0973
vn 0.9496 0.1234 0.2881
vn 0.8752 0.1234 0.4678
vn 0.7671 0.1234 0.6295
vn 0.6295 0.1234 0.7671
vn 0.4678 0.1234 0.8752
vn 0.2881 0.1234 0.9496
vn 0.0973 0.1234 0.9876
vn -0.0973 0.1234 0.9876
vn -0.2881 0.1234 0.9496
vn -0.4678 0.1234 0.8752
vn -0.6295 0.1234 0.7671
vn -0.7671 0.1234 0.6295
vn -0.8752 0.1234 0.4678
vn -0.9496 0.1234 0.2881
vn -0.9876 0.1234 0.0973
vn -0.9876 0.1234 -0.0973
vn -0.9496 0.1234 -0.2881
vn -0.8752 0.1234 -0.4678
vn -0.7671 0.1234 -0.6295
vn -0.6295 0.1234 -0.7671
vn -0.4678 0.1234 -0.8752
vn -0.2881 0.1234 -0.9496
vn -0.0973 0.1234 -0.9876
vn 0.0000 -1.0000 0.0000
usemtl None
s off
f 65//35 74//35 66//35
f 66//36 74//36 67//36
f 67//37 74//37 68//37
f 68//38 74//38 69//38
f 69//39 74//39 70//39
f 70//40 74//40 71//40
f 71//41 74//41 72//41
f 72//42 74//42 73//42
f 73//43 74//43 75//43
f 75//44 74//44 76//44
f 76//45 74//45 77//45
f 77//46 74//46 78//46
f 78//47 74//47 79//47
f 79//48 74//48 80//48
f 80//49 74//49 81//49
f 81//50 74//50 82//50
f 82//51 74//51 83//51
f 83//52 74//52 84//52
f 84//53 74//53 85//53
f 85//54 74//54 86//54
f 86//55 74//55 87//55
f 87//56 74//56 88//56
f 88//57 74//57 89//57
f 89//58 74//58 90//58
f 90//59 74//59 91//59
f 91//60 74//60 92//60
f 92//61 74//61 93//61
f 93//62 74//62 94//62
f 94//63 74//63 95//63
f 95//64 74//64 96//64
f 96//65 74//65 97//65
f 97//66 74//66 65//66
f 65//67 66//67 67//67 68//67 69//67 70//67 71//67 72//67 73//67 75//67 76//67 77//67 78//67 79//67 80//67 81//67 82//67 83//67 84//67 85//67 86//67 87//67 88//67 89//67 90//67 91//67 92//67 93//67 94//67 95//67 96//67 97//67

View File

@ -19,6 +19,7 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause> <ConsolePause>false</ConsolePause>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>anycpu</PlatformTarget>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize> <Optimize>true</Optimize>
@ -33,12 +34,10 @@
<Reference Include="OpenTK"> <Reference Include="OpenTK">
<HintPath>..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll</HintPath> <HintPath>..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Buffers"> <Reference Include="System.Buffers">
<HintPath>..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll</HintPath> <HintPath>..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Numerics.Vectors"> <Reference Include="System.Numerics.Vectors">
<HintPath>..\packages\System.Numerics.Vectors.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Numerics.Vectors.dll</HintPath> <HintPath>..\packages\System.Numerics.Vectors.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Numerics.Vectors.dll</HintPath>
@ -54,15 +53,15 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="ImageSharp"> <Reference Include="ImageSharp">
<HintPath>..\packages\ImageSharp.1.0.0-alpha7-00006\lib\netstandard1.1\ImageSharp.dll</HintPath> <HintPath>..\org.niclasundharald.engine\contrib\ImageSharp.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Drawing" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="BootStrap.cs" /> <Compile Include="BootStrap.cs" />
<Compile Include="Graphics.cs" /> <Compile Include="Graphics.cs" />
<Compile Include="OpenGLWindow.cs" /> <Compile Include="OpenGLWindow.cs" />
<Compile Include="SquaredMap.cs" />
<Compile Include="TextureManager.cs" /> <Compile Include="TextureManager.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -76,8 +75,13 @@
<None Include="M3-wip.png"> <None Include="M3-wip.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Include="models\alfa147.obj" /> <None Include="models\alfa147.obj">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Notes.txt" /> <None Include="Notes.txt" />
<None Include="models\ballistisch.obj">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\org.niclasundharald.engine\org.niclasundharald.engine.csproj"> <ProjectReference Include="..\org.niclasundharald.engine\org.niclasundharald.engine.csproj">

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="ImageSharp" version="1.0.0-alpha7-00006" targetFramework="net45" />
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net45" /> <package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net45" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net45" /> <package id="NETStandard.Library" version="1.6.1" targetFramework="net45" />
<package id="OpenTK" version="2.0.0" targetFramework="net45" /> <package id="OpenTK" version="2.0.0" targetFramework="net45" />

View File

@ -5,6 +5,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nhengine", "NHEngine\nhengi
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "org.niclasundharald.engine", "org.niclasundharald.engine\org.niclasundharald.engine.csproj", "{3E812F66-D5F3-4599-8360-97F355B6CC1B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "org.niclasundharald.engine", "org.niclasundharald.engine\org.niclasundharald.engine.csproj", "{3E812F66-D5F3-4599-8360-97F355B6CC1B}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "contrib", "contrib", "{9BA2E63F-E39C-465C-AC48-45B30B532A0C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageSharp", "ImageSharp\ImageSharp.csproj", "{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -19,5 +23,12 @@ Global
{3E812F66-D5F3-4599-8360-97F355B6CC1B}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E812F66-D5F3-4599-8360-97F355B6CC1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E812F66-D5F3-4599-8360-97F355B6CC1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E812F66-D5F3-4599-8360-97F355B6CC1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E812F66-D5F3-4599-8360-97F355B6CC1B}.Release|Any CPU.Build.0 = Release|Any CPU {3E812F66-D5F3-4599-8360-97F355B6CC1B}.Release|Any CPU.Build.0 = Release|Any CPU
{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4D1A7C04-2C4E-4C74-AD81-FE0DCA9C6DF0} = {9BA2E63F-E39C-465C-AC48-45B30B532A0C}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using OpenTK;
using org.niclasundharald.engine.graphics;
namespace org.niclasundharald.engine
{
public class Actor : WorldObject
{
public static List<Actor> activeActors = new List<Actor>();
public static List<Actor> finishedActors = new List<Actor>();
public static void updateAll(float timespan){
foreach (Actor a in activeActors){
a.update(timespan);
}
foreach (Actor a in finishedActors){
activeActors.Remove(a);
}
finishedActors.Clear();
}
private int id;
public Actor(int id)
{
Console.WriteLine("New Actor: {0} / {1}",id,this);
this.id = id;
activeActors.Add(this);
}
public void destroy(){
finishedActors.Add(this);
}
public Vector3 Heading { get; set; }
public Vector3 Velocity { get; set; }
public float Weight { get; set; }
public virtual void update(float timespan){
}
public void setHeading(Vector3 heading,Vector3 top){
Vector3 x,y,z;
z = heading.Normalized();
x = Vector3.Cross( top.Normalized(), z ).Normalized();
y = Vector3.Cross( x, z );
Matrix4 mRotation = new Matrix4(
new Vector4(x,0),
new Vector4(y,0),
new Vector4(z,0),
new Vector4(0,0,0,1)
);
Rotation = Matrix4.CreateRotationX(MathHelper.PiOver2) * mRotation;
}
public Model3D Model3D { get; set; }
public override Model3D getModel3D()
{
return Model3D;
}
}
}

View File

@ -0,0 +1,14 @@
using System;
namespace org.niclasundharald.engine
{
/**
* @class ActorAction
* @brief Base Class to manage orders, jobs, other things to do and/or changes over time for Actors
*/
public class ActorAction
{
public ActorAction(Actor actor)
{
}
}
}

View File

@ -0,0 +1,43 @@
using System;
using org.niclasundharald.engine.graphics.primitives;
using org.niclasundharald.engine.graphics;
using OpenTK;
namespace org.niclasundharald.engine
{
public class BallisticActor : Actor
{
public BallisticActor(int id)
:base(id)
{
this.Model3D = ModelManager.instance.findModel("ballistisch");
}
public override void update(float timespan)
{
base.update(timespan);
Velocity += (Physics.Gravitation * timespan);
Position += Velocity * timespan;
Scale = Matrix4.CreateScale(3.0f);
setHeading( Velocity, Physics.Gravitation);
Console.WriteLine("BallisticActor update: {0} / {1}",Position,Velocity);
try{
Vector3 ground = SquaredMap.activeMap.ground(Position.Xy);
if (Position.Z <= ground.Z){
destroy();
}
} catch (OutOfWorldException e){
destroy();
}
}
}
}

View File

@ -8,8 +8,10 @@ namespace org.niclasundharald.engine
public static string findFile(string filename,string[] searchPaths){ public static string findFile(string filename,string[] searchPaths){
foreach (string searchPath in searchPaths){ foreach (string searchPath in searchPaths){
string fullname = String.Format("{0}{1}{2}",searchPath,Path.PathSeparator,filename); string fullname = String.Format("{0}{1}{2}",searchPath,Path.DirectorySeparatorChar,filename);
Console.WriteLine("lookupFile: {0}",fullname);
if (File.Exists(fullname)){ if (File.Exists(fullname)){
Console.WriteLine("foundFile: {0}",fullname);
return fullname; return fullname;
} }
} }

View File

@ -0,0 +1,13 @@
using System;
using OpenTK;
namespace org.niclasundharald.engine
{
public abstract class Physics
{
public static Vector3 Gravitation { get; set; } = new Vector3(0,0,-9.81f);
}
}

View File

@ -9,13 +9,10 @@ namespace org.niclasundharald.engine
{ {
public abstract class WorldObject public abstract class WorldObject
{ {
private Matrix4 transformation;
private List<WorldObject> children; private List<WorldObject> children;
public WorldObject() public WorldObject()
{ {
transformation = Matrix4.Identity;
children = new List<WorldObject>(); children = new List<WorldObject>();
} }
@ -23,15 +20,13 @@ namespace org.niclasundharald.engine
return null; return null;
} }
public Vector3 Position{ get; set; } = new Vector3();
public Matrix4 Rotation { get; set; } = Matrix4.Identity;
public Matrix4 Scale { get; set; } = Matrix4.Identity;
public Vector3 Position{
get { return this.transformation.ExtractTranslation(); }
set { this.transformation += Matrix4.CreateTranslation(value - this.transformation.ExtractTranslation()); }
}
public Matrix4 Transformation { public Matrix4 Transformation {
get { return this.transformation; } get { return (Scale * Rotation) * Matrix4.CreateTranslation( Position ) ; }
set { this.transformation = value; }
} }
public void addChild(WorldObject wo){ public void addChild(WorldObject wo){
@ -55,4 +50,21 @@ namespace org.niclasundharald.engine
public class ObjectGroup : WorldObject { public class ObjectGroup : WorldObject {
} }
public class DumpObject : WorldObject {
Model3D model3d;
public Model3D Model3D {
get { return this.model3d; }
set { this.model3d = value; }
}
public override Model3D getModel3D()
{
return model3d;
}
}
} }

View File

@ -0,0 +1,10 @@
using System;
namespace org.niclasundharald.engine
{
public class OutOfWorldException : Exception
{
public OutOfWorldException()
{
}
}
}

View File

@ -45,7 +45,7 @@ namespace org.niclasundharald.engine.graphics
_mProjection = Matrix4.CreatePerspectiveFieldOfView( _mProjection = Matrix4.CreatePerspectiveFieldOfView(
fov, fov,
width / height, width / height,
50.0f, 1.0f,
100000.0f 100000.0f
); );
} }

View File

@ -39,10 +39,17 @@ namespace org.niclasundharald.engine.graphics
if (root != null){ if (root != null){
draw( objectMatrix, root ); draw( objectMatrix, root );
} }
foreach (WorldObject child in Actor.activeActors){
draw( objectMatrix, child );
}
} }
public void draw(Matrix4 baseMatrix,WorldObject wo){ public void draw(Matrix4 baseMatrix,WorldObject wo){
Matrix4 objectMatrix = baseMatrix * wo.Transformation; Matrix4 objectMatrix = wo.Transformation * baseMatrix;
//Console.WriteLine("draw(,{0}",wo);
//Console.WriteLine("draw(): o={0}\noM=\n{1}",wo,objectMatrix); //Console.WriteLine("draw(): o={0}\noM=\n{1}",wo,objectMatrix);
shader.setup(objectMatrix, sceneOrientation); shader.setup(objectMatrix, sceneOrientation);

View File

@ -0,0 +1,142 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
using OpenTK;
namespace org.niclasundharald.engine.graphics
{
public class LoadedModel : Model3D
{
string sourceName;
public LoadedModel(string filename)
{
sourceName = filename;
load(new StreamReader(filename));
}
public LoadedModel(string filename,float scale)
{
sourceName = filename;
load(new StreamReader(filename),scale);
}
private void load(TextReader reader){
load(reader,1);
}
private void load(TextReader reader,float scale){
List<Vector3> vertexes,normals;
List<Vector4> colors;
List<triangle> triangles;
string line;
float[] min = new float[3];
float[] max = new float[3];
vertexes = new List<Vector3>();
normals = new List<Vector3>();
colors = new List<Vector4>();
triangles = new List<triangle>();
vertexes.Add(new Vector3());
normals.Add(new Vector3());
while ( (line = reader.ReadLine()) != null){
string[] fields = line.Split(new string[0],StringSplitOptions.RemoveEmptyEntries);
if (fields.Length > 0)
switch (fields[0]){
case "v":
float x,y,z;
x = (float)Double.Parse(fields[1],CultureInfo.InvariantCulture);
y = (float)Double.Parse(fields[2],CultureInfo.InvariantCulture);
z = (float)Double.Parse(fields[3],CultureInfo.InvariantCulture);
x *= scale;
y *= scale;
z *= scale;
vertexes.Add( new Vector3(x,y,z) );
min[0] = min[0] > x ? x : min[0];
min[1] = min[1] > y ? y : min[1];
min[2] = min[2] > z ? z : min[2];
max[0] = max[0] < x ? x : max[0];
max[1] = max[1] < y ? y : max[1];
max[2] = max[2] < z ? z : max[2];
break;
case "vn":
normals.Add( -(new Vector3(
float.Parse(fields[1],CultureInfo.InvariantCulture),
float.Parse(fields[2],CultureInfo.InvariantCulture),
float.Parse(fields[3],CultureInfo.InvariantCulture)
)
));
break;
case "f":
surfaceindeces si0,si1,si2;
si0 = new surfaceindeces(fields[1]);
si1 = new surfaceindeces(fields[2]);
si2 = new surfaceindeces(fields[3]);
triangles.Add(new triangle(
vertexes[si0.vertex],
vertexes[si1.vertex],
vertexes[si2.vertex],
normals[si0.normal],
normals[si1.normal],
normals[si2.normal]));
break;
}
}
Console.WriteLine("Loaded {0}: {1} vertexes {2} normals",sourceName,vertexes.Count,normals.Count);
Console.WriteLine("Dimensions: {0}/{1}/{2} - {3}/{4}/{5}",min[0],min[1],min[2],max[0],max[1],max[2]);
vertexes.Clear();
normals.Clear();
foreach (triangle t in triangles){
vertexes.Add( t.a );
vertexes.Add( t.b );
vertexes.Add( t.c );
normals.Add( t.na );
normals.Add( t.nb );
normals.Add( t.nc );
}
// bind(vertexes.ToArray(),null,normals.ToArray());
bind(vertexes.ToArray(),null,normals.ToArray());
}
struct triangle{
public Vector3 a,b,c;
public Vector3 na,nb,nc;
public triangle(Vector3 a,Vector3 b,Vector3 c,Vector3 na,Vector3 nb,Vector3 nc){
this.a = a;
this.b = b;
this.c = c;
this.na = na;
this.nb = nb;
this.nc = nc;
}
}
struct surfaceindeces {
public int vertex,texture,normal;
public surfaceindeces(string token){
string[] l = token.Split('/');
vertex = l[0].Length == 0 ? 0 : int.Parse(l[0]);
texture = l[1].Length == 0 ? 0 : int.Parse(l[1]);
normal = l[2].Length == 0 ? 0 : int.Parse(l[2]);
}
}
}
}

View File

@ -14,6 +14,11 @@ namespace org.niclasundharald.engine.graphics {
protected int nTriangles; protected int nTriangles;
Vector3[] vertexes;
Vector4[] colors;
Vector3[] normals;
protected Model3D(){ protected Model3D(){
vao = GL.GenVertexArray(); vao = GL.GenVertexArray();
nTriangles = 0; nTriangles = 0;
@ -55,6 +60,10 @@ namespace org.niclasundharald.engine.graphics {
GL.BindVertexArray(0); GL.BindVertexArray(0);
} }
protected void rebind(){
}
protected void bind(Vector3[] vertexes){ protected void bind(Vector3[] vertexes){
bind( vertexes, null, null, null ); bind( vertexes, null, null, null );
} }
@ -68,58 +77,46 @@ namespace org.niclasundharald.engine.graphics {
} }
protected void bind(Vector3[] vertexes,Vector4[] colors,Vector3[] normals,Vector2[] uvs){ protected void bind(Vector3[] vertexes,Vector4[] colors,Vector3[] normals,Vector2[] uvs){
float[] fv = new float[vertexes.Length * 3]; /* float[] fv = new float[vertexes.Length * 3];
for (int n=0;n<vertexes.Length;n++){ for (int n=0;n<vertexes.Length;n++){
fv[(n * 3) ] = vertexes[n].X; fv[(n * 3) ] = vertexes[n].X;
fv[(n * 3) + 1] = vertexes[n].Y; fv[(n * 3) + 1] = vertexes[n].Y;
fv[(n * 3) + 2] = vertexes[n].Z; fv[(n * 3) + 2] = vertexes[n].Z;
} }
*/
GL.BindVertexArray(vao); GL.BindVertexArray(vao);
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo); GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
GL.BufferData(BufferTarget.ArrayBuffer, 4 * fv.Length, fv, BufferUsageHint.StaticDraw); // GL.BufferData(BufferTarget.ArrayBuffer, 4 * fv.Length, fv, BufferUsageHint.StaticDraw);
GL.BufferData(BufferTarget.ArrayBuffer, 12 * vertexes.Length, vertexes, BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(0); GL.EnableVertexAttribArray(0);
nTriangles = vertexes.Length / 3; nTriangles = vertexes.Length / 3;
if (colors != null){ if (colors == null){
float[] fc = new float[ colors.Length * 4 ]; colors = new Vector4[ vertexes.Length ];
for (int n=0;n < colors.Length; n++){ for (int n=0;n<colors.Length;n++){
fc[ (4*n) ] = colors[n].X; colors[n] = new Vector4(0.5f,0.9f,0.9f,1.0f);
fc[ (4*n) + 1 ] = colors[n].Y;
fc[ (4*n) + 2 ] = colors[n].Z;
fc[ (4*n) + 3 ] = colors[n].W;
} }
GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
GL.BufferData(BufferTarget.ArrayBuffer, 4 * fc.Length, fc, BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(1);
} else {
float[] fc = new float[ vertexes.Length * 4 ];
for (int n=0;n<fc.Length;n++){
fc[n] = n % 4 == 3 ? 1.0f : 0.5f;
}
GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
GL.BufferData(BufferTarget.ArrayBuffer, 4 * fc.Length, fc, BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(1);
} }
GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
GL.BufferData(BufferTarget.ArrayBuffer, 16 * colors.Length, colors, BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(1);
if (normals == null){ if (normals == null){
normals = computeNormals(vertexes); normals = computeNormals(vertexes);
} }
/*
float[] fn = v3aToArray(normals); float[] fn = v3aToArray(normals);
*/
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo); GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
GL.BufferData(BufferTarget.ArrayBuffer, 4 * fn.Length, fn, BufferUsageHint.StaticDraw); GL.BufferData(BufferTarget.ArrayBuffer, 12 * normals.Length, normals, BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(2); GL.EnableVertexAttribArray(2);
} }
@ -141,7 +138,7 @@ namespace org.niclasundharald.engine.graphics {
public static Vector3[] computeNormals(Vector3[] vertexes){ public static Vector3[] computeNormals(Vector3[] vertexes){
Vector3[] normals = new Vector3[ vertexes.Length ]; Vector3[] normals = new Vector3[ vertexes.Length ];
for (int n=0;n<vertexes.Length;n+=3){ for (int n=0;n<vertexes.Length-2;n+=3){
Vector3 normal = Vector3.Cross( vertexes[n+1] - vertexes[n], vertexes[n+2] - vertexes[n] ); Vector3 normal = Vector3.Cross( vertexes[n+1] - vertexes[n], vertexes[n+2] - vertexes[n] );
normal.Normalize(); normal.Normalize();
/* /*
@ -173,5 +170,10 @@ namespace org.niclasundharald.engine.graphics {
return a; return a;
} }
public static Model3D loadObjFile(string filename,float scale){
return new LoadedModel(filename,scale);
}
} }
} }

View File

@ -5,10 +5,12 @@ namespace org.niclasundharald.engine.graphics
{ {
public class ModelManager public class ModelManager
{ {
public static readonly ModelManager instance = new ModelManager();
Dictionary<string, Model3D> knownModels; Dictionary<string, Model3D> knownModels;
List<string> searchPaths; List<string> searchPaths;
public ModelManager() protected ModelManager()
{ {
knownModels = new Dictionary<string, Model3D>(); knownModels = new Dictionary<string, Model3D>();
searchPaths = new List<string>(); searchPaths = new List<string>();
@ -23,17 +25,18 @@ namespace org.niclasundharald.engine.graphics
} }
public Model3D loadModel(String mName){ public Model3D loadModel(String mName,float scale){
string fullName = FileHelper.findFile(String.Format("{0}.obj",mName),searchPaths.ToArray()); string fullName = FileHelper.findFile(String.Format("{0}.obj",mName),searchPaths.ToArray());
if (fullName != null){ if (fullName != null){
Console.WriteLine("Model found: {0}",fullName);
return Model3D.loadObjFile(fullName,scale);
} }
return null; return null;
} }
public Model3D findModel(String mName){ public Model3D findModel(String mName){
if (!knownModels.ContainsKey(mName)){ if (!knownModels.ContainsKey(mName)){
return loadModel(mName); return loadModel(mName,1);
} else { } else {
return knownModels[mName]; return knownModels[mName];
} }

View File

@ -10,13 +10,15 @@ using OpenTK.Graphics.OpenGL4;
using OpenTK; using OpenTK;
using org.niclasundharald.engine; using org.niclasundharald.engine;
using org.niclasundharald.engine.graphics;
namespace nhengine namespace org.niclasundharald.engine.graphics
{ {
public class SquaredMap : WorldObject public class SquaredMap : WorldObject
{ {
private static float edge = 64; public static SquaredMap activeMap;
private static float edge = 5;
private static float maxHeight = 128.0f;
private int width, private int width,
height; height;
@ -27,6 +29,8 @@ namespace nhengine
public SquaredMap(int width,int height) public SquaredMap(int width,int height)
{ {
activeMap = this;
this.width = width; this.width = width;
this.height = height; this.height = height;
@ -44,6 +48,8 @@ namespace nhengine
public SquaredMap(Image heightMap) public SquaredMap(Image heightMap)
{ {
activeMap = this;
this.width = heightMap.Width-1; this.width = heightMap.Width-1;
this.height = heightMap.Height-1; this.height = heightMap.Height-1;
@ -63,7 +69,7 @@ namespace nhengine
for (int x = 0; x <= width; x++) for (int x = 0; x <= width; x++)
{ {
float h = (float)rand.NextDouble(); float h = (float)rand.NextDouble();
heightMap[x + (y * width)] = (float)(256 * (h * h)); heightMap[x + (y * width)] = (float)(maxHeight * (h * h));
} }
} }
} }
@ -77,7 +83,7 @@ namespace nhengine
for (int x = 0; x <= width; x++) for (int x = 0; x <= width; x++)
{ {
Rgba32 pixel = pixels[ x + (y * (width + 1))]; Rgba32 pixel = pixels[ x + (y * (width + 1))];
float h = (pixel.R + pixel.G + pixel.B) / 3; float h = (pixel.R + pixel.G + pixel.B) * maxHeight / 768;
heightMap[x + (y * (width + 1))] = (float)(h); heightMap[x + (y * (width + 1))] = (float)(h);
} }
} }
@ -151,13 +157,38 @@ namespace nhengine
} }
this.model = new MapModel3D( vertexes ); this.model = new MapModel3D( vertexes );
this.Position = new Vector3(-(width)*edge,-(height)*edge,0);
} }
private int indHeightMap(int x,int y){
return x + ((width + 1) * y);
}
public Vector3 ground(Vector2 _xy){
Vector2 xy = _xy / edge;
int i1 = indHeightMap((int)xy.X,(int)xy.Y);
int i2 = indHeightMap((int)xy.X,(int)xy.Y+1);
if ((xy.X < 0)||(xy.Y<0)||(xy.X>=width)||(xy.Y>=height)){
throw new OutOfWorldException();
}
float h = heightMap[i1] +
heightMap[i1 + 1] +
heightMap[i2] +
heightMap[i2 + 1];
h /= 4;
Vector3 v3 = new Vector3(_xy.X,_xy.Y,h);
Console.WriteLine("Grounding: {0}",v3);
return v3;
}
} }
class MapModel3D : Model3D { class MapModel3D : Model3D {
int nDraw; int nDraw;

View File

@ -0,0 +1,30 @@
using System;
using System.IO;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using ImageSharp;
namespace org.niclasundharald.engine
{
public class Texture
{
int tid;
public Texture(string filename)
{
init();
load(filename);
}
private void init(){
this.tid = GL.GenTexture();
}
private void load(string filename){
}
}
}

View File

@ -8,7 +8,8 @@ namespace org.niclasundharald.engine.graphics.primitives
{ {
public Cube(Vector3 position, float width) public Cube(Vector3 position, float width)
{ {
Transformation = Matrix4.CreateScale(width) * Matrix4.CreateTranslation( position ); Scale = Matrix4.CreateScale(width);
Position = position;
} }
public override Model3D getModel3D() public override Model3D getModel3D()
@ -63,8 +64,8 @@ namespace org.niclasundharald.engine.graphics.primitives
Model3D.setTriangle(vertexes, 4, e, a, d); Model3D.setTriangle(vertexes, 4, e, a, d);
Model3D.setTriangle(vertexes, 5, d, h, e); Model3D.setTriangle(vertexes, 5, d, h, e);
Model3D.setTriangle(vertexes, 6, g, f, b); Model3D.setTriangle(vertexes, 6, b, f, g);
Model3D.setTriangle(vertexes, 7, b, c, g); Model3D.setTriangle(vertexes, 7, g, c, b);
Model3D.setTriangle(vertexes, 8, a, e, f); Model3D.setTriangle(vertexes, 8, a, e, f);
Model3D.setTriangle(vertexes, 9, f, b, a); Model3D.setTriangle(vertexes, 9, f, b, a);

View File

@ -34,6 +34,15 @@
<Reference Include="OpenTK.GLControl"> <Reference Include="OpenTK.GLControl">
<HintPath>..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll</HintPath> <HintPath>..\packages\OpenTK.GLControl.1.1.2349.61993\lib\NET40\OpenTK.GLControl.dll</HintPath>
</Reference> </Reference>
<Reference Include="ImageSharp">
<HintPath>contrib\ImageSharp.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Buffers">
<HintPath>..\packages\System.Buffers.4.3.0\lib\netstandard1.1\System.Buffers.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@ -51,6 +60,14 @@
<Compile Include="graphics\Model3D.cs" /> <Compile Include="graphics\Model3D.cs" />
<Compile Include="graphics\ModelManager.cs" /> <Compile Include="graphics\ModelManager.cs" />
<Compile Include="FileHelper.cs" /> <Compile Include="FileHelper.cs" />
<Compile Include="graphics\Texture.cs" />
<Compile Include="graphics\LoadedModel.cs" />
<Compile Include="Actor.cs" />
<Compile Include="ActorAction.cs" />
<Compile Include="BallisticActor.cs" />
<Compile Include="Physics.cs" />
<Compile Include="graphics\SquaredMap.cs" />
<Compile Include="exceptions\OutOfWorldException.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="OpenTK.dll.config" /> <None Include="OpenTK.dll.config" />
@ -60,6 +77,10 @@
<ItemGroup> <ItemGroup>
<Folder Include="graphics\" /> <Folder Include="graphics\" />
<Folder Include="graphics\primitives\" /> <Folder Include="graphics\primitives\" />
<Folder Include="contrib\" />
<Folder Include="contrib\ImageSharp.dll">
</Folder>
<Folder Include="exceptions\" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View File

@ -2,4 +2,7 @@
<packages> <packages>
<package id="OpenTK" version="2.0.0" targetFramework="net45" /> <package id="OpenTK" version="2.0.0" targetFramework="net45" />
<package id="OpenTK.GLControl" version="1.1.2349.61993" targetFramework="net45" /> <package id="OpenTK.GLControl" version="1.1.2349.61993" targetFramework="net45" />
<package id="System.Buffers" version="4.3.0" targetFramework="net45" />
<package id="System.IO" version="4.3.0" targetFramework="net45" />
<package id="System.Runtime" version="4.3.0" targetFramework="net45" />
</packages> </packages>