WIP
parent
52da9e584b
commit
fa784a83f3
86
GLCamera.cs
86
GLCamera.cs
|
@ -1,86 +0,0 @@
|
|||
using System;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK.Graphics;
|
||||
using OpenTK;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
public class GLCamera
|
||||
{
|
||||
Matrix4 position,
|
||||
projection,
|
||||
rotation,
|
||||
lookat;
|
||||
|
||||
Matrix4 result;
|
||||
|
||||
float arc_z,
|
||||
arc_x;
|
||||
float distance;
|
||||
|
||||
public GLCamera()
|
||||
{
|
||||
lookat = Matrix4.CreateTranslation(1600, 1600, 0);
|
||||
|
||||
distance = 2500.0f;
|
||||
|
||||
projection = Matrix4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.PiOver4,
|
||||
1.6f,
|
||||
0.5f,
|
||||
100000.0f
|
||||
);
|
||||
rotation = Matrix4.CreateScale(1.0f);
|
||||
|
||||
setup();
|
||||
}
|
||||
|
||||
public void setViewport(int width,int height){
|
||||
projection = Matrix4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.PiOver4,
|
||||
width / (float)height,
|
||||
0.5f,
|
||||
100000.0f
|
||||
);
|
||||
}
|
||||
|
||||
public Matrix4 Rotation {
|
||||
get { return this.rotation; }
|
||||
}
|
||||
|
||||
public float ArcZ
|
||||
{
|
||||
get { return this.arc_z; }
|
||||
set { this.arc_z = value; }
|
||||
}
|
||||
|
||||
public float ArcX
|
||||
{
|
||||
get { return this.arc_x; }
|
||||
set { this.arc_x = value; }
|
||||
}
|
||||
|
||||
public float Distance {
|
||||
get { return this.distance; }
|
||||
set { this.distance = value; }
|
||||
}
|
||||
|
||||
public void setup(){
|
||||
rotation = Matrix4.CreateRotationZ(this.arc_z) * Matrix4.CreateRotationX(this.arc_x);
|
||||
position = Matrix4.CreateTranslation(0, 0, distance);
|
||||
|
||||
result = Matrix4.Identity;
|
||||
result *= lookat.Inverted();
|
||||
result *= rotation;
|
||||
// result *= Matrix4.CreateRotationZ(this.arc_z);
|
||||
// result *= Matrix4.CreateRotationX(this.arc_x);
|
||||
result *= position.Inverted();
|
||||
result *= projection;
|
||||
}
|
||||
|
||||
public Matrix4 Matrix {
|
||||
get { return this.result; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,11 @@
|
|||
using OpenTK.Graphics.OpenGL4;
|
||||
using OpenTK;
|
||||
|
||||
using OpenTK.Audio.OpenAL;
|
||||
using OpenTK.Audio;
|
||||
|
||||
using org.nhengine.graphics;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
public class BootStrap
|
||||
|
@ -14,15 +19,13 @@ namespace nhengine
|
|||
}
|
||||
|
||||
OpenGLWindow glWindow;
|
||||
Graphics graphics;
|
||||
|
||||
SquaredMap map;
|
||||
|
||||
public static void Main(string[] args){
|
||||
_instance = new BootStrap();
|
||||
|
||||
_instance.run();
|
||||
_instance = new BootStrap();
|
||||
|
||||
_instance.run();
|
||||
}
|
||||
|
||||
public BootStrap()
|
||||
|
@ -37,7 +40,14 @@ namespace nhengine
|
|||
|
||||
public void bootGraphics(){
|
||||
glWindow = new OpenGLWindow();
|
||||
graphics = new Graphics();
|
||||
|
||||
GlobalDefaults.instance();
|
||||
|
||||
//graphics = new Graphics();
|
||||
}
|
||||
|
||||
public void bootAudio(){
|
||||
AL.Enable(ALCapability.Invalid);
|
||||
}
|
||||
|
||||
public void bootMap(){
|
|
@ -5,6 +5,9 @@ using OpenTK.Graphics;
|
|||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK;
|
||||
|
||||
using org.nhengine.graphics;
|
||||
using org.nhengine.graphics.primitives;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
|
||||
|
@ -17,6 +20,16 @@ namespace nhengine
|
|||
private Point mouseCapturePosition;
|
||||
private bool mouseCaptured;
|
||||
|
||||
private float arcUpDown,
|
||||
arcLeftRight;
|
||||
|
||||
private Cube cube,
|
||||
c1, c2, c3;
|
||||
|
||||
GraphicsMode gmode = new GraphicsMode();
|
||||
|
||||
|
||||
|
||||
public OpenGLWindow()
|
||||
:base(800, 600,
|
||||
GraphicsMode.Default,
|
||||
|
@ -27,8 +40,9 @@ namespace nhengine
|
|||
GraphicsContextFlags.ForwardCompatible)
|
||||
{
|
||||
VSync = VSyncMode.On;
|
||||
camera = new GLCamera();
|
||||
camera.ArcX = -MathHelper.PiOver3;
|
||||
camera = GlobalDefaults.instance().ActiveCamera;
|
||||
camera.Distance = 1000;
|
||||
camera.Position = new Vector3(1600, 1600, 1000);
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
|
@ -36,6 +50,13 @@ namespace nhengine
|
|||
base.OnLoad(e);
|
||||
GL.ClearColor(0.1f, 0.2f, 0.5f, 0.0f);
|
||||
GL.Enable(EnableCap.DepthTest);
|
||||
GL.Enable(EnableCap.Normalize);
|
||||
|
||||
cube = new Cube(new Vector3(0,0,512), 128.0f);
|
||||
c1 = new Cube(new Vector3(512,0,512), 128.0f);
|
||||
c2 = new Cube(new Vector3(0,512,512), 128.0f);
|
||||
c3 = new Cube(new Vector3(512,512,512), 128.0f);
|
||||
|
||||
}
|
||||
|
||||
protected override void OnResize(EventArgs e)
|
||||
|
@ -54,9 +75,14 @@ namespace nhengine
|
|||
|
||||
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
|
||||
|
||||
camera.setup();
|
||||
cube.paint(camera);
|
||||
c1.paint(camera);
|
||||
c2.paint(camera);
|
||||
c3.paint(camera);
|
||||
|
||||
|
||||
boot.SquaredMap.paint(camera);
|
||||
//triangle.paint(camera);
|
||||
|
||||
SwapBuffers();
|
||||
}
|
||||
|
@ -82,19 +108,8 @@ namespace nhengine
|
|||
}
|
||||
|
||||
protected virtual void onMouseCapturedMove(Point delta){
|
||||
camera.ArcZ += ((float)delta.X) / 100.0f;
|
||||
camera.ArcX += ((float)delta.Y) / 100.0f;
|
||||
|
||||
if (camera.ArcX > 0.0f){
|
||||
camera.ArcX = 0.0f;
|
||||
}
|
||||
|
||||
if (camera.ArcX < -MathHelper.PiOver2){
|
||||
camera.ArcX = -MathHelper.PiOver2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
rotateLeftRight(((float)delta.X) / 10.0f);
|
||||
rotateUpDown(((float)delta.Y) / 10.0f);
|
||||
}
|
||||
|
||||
protected override void OnMouseDown(OpenTK.Input.MouseButtonEventArgs e)
|
||||
|
@ -116,6 +131,54 @@ namespace nhengine
|
|||
protected override void OnMouseWheel(OpenTK.Input.MouseWheelEventArgs e)
|
||||
{
|
||||
camera.Distance += e.DeltaPrecise * 16.0f;
|
||||
if (camera.Distance < 0)
|
||||
camera.Distance = 0;
|
||||
|
||||
applyRotation();
|
||||
}
|
||||
|
||||
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
|
||||
{
|
||||
switch (e.Key){
|
||||
case OpenTK.Input.Key.Up:
|
||||
rotateUpDown(MathHelper.Pi / 90.0f);
|
||||
break;
|
||||
case OpenTK.Input.Key.Down:
|
||||
rotateUpDown(-MathHelper.Pi / 90.0f);
|
||||
break;
|
||||
case OpenTK.Input.Key.Left:
|
||||
rotateLeftRight(MathHelper.Pi / 90.0f);
|
||||
break;
|
||||
case OpenTK.Input.Key.Right:
|
||||
rotateLeftRight(-MathHelper.Pi / 90.0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void rotateUpDown(float arc)
|
||||
{
|
||||
arcUpDown += arc;
|
||||
applyRotation();
|
||||
}
|
||||
public void rotateLeftRight(float arc)
|
||||
{
|
||||
arcLeftRight += arc;
|
||||
applyRotation();
|
||||
}
|
||||
|
||||
private void applyRotation(){
|
||||
Console.WriteLine("Rotation: {0} {1}", arcLeftRight, arcUpDown);
|
||||
camera.MRotation = Matrix4.CreateRotationZ(arcLeftRight) * Matrix4.CreateRotationX(arcUpDown);
|
||||
|
||||
}
|
||||
|
||||
protected override void OnKeyUp(OpenTK.Input.KeyboardKeyEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
// Information about this assembly is defined by the following attributes.
|
||||
// Change them to the values specific to your project.
|
||||
|
||||
[assembly: AssemblyTitle("nhengine")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("")]
|
||||
[assembly: AssemblyCopyright("${AuthorCopyright}")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
|
||||
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
|
||||
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
|
||||
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
|
||||
// The following attributes are used to specify the signing key for the assembly,
|
||||
// if desired. See the Mono documentation for more information about signing.
|
||||
|
||||
//[assembly: AssemblyDelaySign(false)]
|
||||
//[assembly: AssemblyKeyFile("")]
|
|
@ -0,0 +1,127 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
using OpenTK;
|
||||
|
||||
using org.nhengine.graphics;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
public class SquaredMap : GLObject
|
||||
{
|
||||
private int width,
|
||||
height;
|
||||
|
||||
private float[] heightMap;
|
||||
|
||||
public SquaredMap(int width,int height)
|
||||
:base( 12 * width * height )
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
|
||||
this.heightMap = new float[ (width + 1) * (height + 1) ];
|
||||
|
||||
normalsEnabled = true;
|
||||
|
||||
generateHeightMap();
|
||||
|
||||
computeGL();
|
||||
updateGL();
|
||||
}
|
||||
|
||||
public void generateHeightMap(){
|
||||
Random rand = new Random();
|
||||
|
||||
for (int y = 0; y <= height; y++)
|
||||
{
|
||||
for (int x = 0; x <= width; x++)
|
||||
{
|
||||
float h = (float)rand.NextDouble();
|
||||
heightMap[x + (y * width)] = (float)(256 * (h * h));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void computeGL(){
|
||||
float left,
|
||||
right,
|
||||
bottom,
|
||||
top,
|
||||
vcenter,
|
||||
hcenter;
|
||||
|
||||
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
int i = x + ((width + 1) * y);
|
||||
int j = x + ((width + 1) * (y + 1));
|
||||
|
||||
float[] h = new float[4];
|
||||
h[0] = heightMap[i];
|
||||
h[1] = heightMap[i+1];
|
||||
h[2] = heightMap[j];
|
||||
h[3] = heightMap[j+1];
|
||||
|
||||
float ah = (h[0] + h[1] + h[2] + h[3]) / 4.0f;
|
||||
|
||||
left = 128 * x;
|
||||
right = 128 * (x + 1);
|
||||
bottom = 128 * y;
|
||||
top = 128 * (y + 1);
|
||||
vcenter = (top + bottom) / 2.0f;
|
||||
hcenter = (left + right) / 2.0f;
|
||||
|
||||
int b = 4 * (x + (width * y));
|
||||
|
||||
setTriangle(
|
||||
b,
|
||||
new Vector3(left, top, h[2]),
|
||||
new Vector3(right, top, h[3]),
|
||||
new Vector3(hcenter,vcenter,ah)
|
||||
);
|
||||
setTriangle(
|
||||
b + 1,
|
||||
new Vector3(right, top, h[3]),
|
||||
new Vector3(right, bottom, h[1]),
|
||||
new Vector3(hcenter, vcenter, ah)
|
||||
);
|
||||
setTriangle(
|
||||
b + 2,
|
||||
new Vector3(right, bottom, h[1]),
|
||||
new Vector3(left, bottom, h[0]),
|
||||
new Vector3(hcenter, vcenter, ah)
|
||||
);
|
||||
setTriangle(
|
||||
b + 3,
|
||||
new Vector3(left, bottom, h[0]),
|
||||
new Vector3(left, top, h[2]),
|
||||
new Vector3(hcenter, vcenter, ah)
|
||||
);
|
||||
|
||||
setColor(new Vector4(1.0f, 1.0f, 0.5f, 1.0f));
|
||||
|
||||
for (int n = 0; n < vertices.Length / 3;n++){
|
||||
float _h = vertices[(3 * n) + 2] / 256.0f;
|
||||
setColor(
|
||||
n,
|
||||
new Vector4(
|
||||
0.3f + (0.7f * _h),
|
||||
0.2f + (0.8f * _h),
|
||||
0.4f + (0.6f * _h),
|
||||
1.0f
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -2,14 +2,14 @@
|
|||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{48BC2215-027E-435F-B8DB-336BD9F678FC}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>nhengine</RootNamespace>
|
||||
<AssemblyName>nhengine</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
|
@ -17,51 +17,43 @@
|
|||
<DefineConstants>DEBUG;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(RunConfiguration)' == 'Default' ">
|
||||
<StartAction>Project</StartAction>
|
||||
<StartWorkingDirectory>bin\Debug</StartWorkingDirectory>
|
||||
<ExternalConsole>false</ExternalConsole>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BootStrap.cs" />
|
||||
<Compile Include="SquaredMap.cs" />
|
||||
<Compile Include="TextureManager.cs" />
|
||||
<Compile Include="Graphics.cs" />
|
||||
<Compile Include="OpenGLWindow.cs" />
|
||||
<Compile Include="Shader.cs" />
|
||||
<Compile Include="ShaderProgram.cs" />
|
||||
<Compile Include="GLCamera.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="shader\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="shader\simple_vertex.shader">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="shader\simple_fragment.shader">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="OpenTK.dll.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<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 Include="System.Drawing" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="BootStrap.cs" />
|
||||
<Compile Include="Graphics.cs" />
|
||||
<Compile Include="OpenGLWindow.cs" />
|
||||
<Compile Include="SquaredMap.cs" />
|
||||
<Compile Include="TextureManager.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="OpenTK.dll.config" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="shader\simple_fragment.shader" />
|
||||
<None Include="shader\simple_vertex.shader" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\org.nhengine\org.nhengine.csproj">
|
||||
<Project>{3E812F66-D5F3-4599-8360-97F355B6CC1B}</Project>
|
||||
<Name>org.nhengine</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nhengine", "nhengine.csproj", "{48BC2215-027E-435F-B8DB-336BD9F678FC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pencil.Gaming", "..\Pencil.Gaming\Pencil.Gaming\Pencil.Gaming.csproj", "{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
Compatibility-GLFW2|Any CPU = Compatibility-GLFW2|Any CPU
|
||||
Core-GLFW2|Any CPU = Core-GLFW2|Any CPU
|
||||
Compatibility-GLFW3|Any CPU = Compatibility-GLFW3|Any CPU
|
||||
Core-GLFW3|Any CPU = Core-GLFW3|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Debug|x86.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Release|x86.ActiveCfg = Release|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Release|x86.Build.0 = Release|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW2|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW2|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW2|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW2|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW3|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW3|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW3|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW3|Any CPU.Build.0 = Debug|x86
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW2|Any CPU.ActiveCfg = Compatibility-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW2|Any CPU.Build.0 = Compatibility-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW2|Any CPU.ActiveCfg = Core-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW2|Any CPU.Build.0 = Core-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW3|Any CPU.ActiveCfg = Compatibility-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW3|Any CPU.Build.0 = Compatibility-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW3|Any CPU.ActiveCfg = Core-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW3|Any CPU.Build.0 = Core-GLFW3|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="OpenTK" version="2.0.0" targetFramework="net45" />
|
||||
</packages>
|
103
ShaderManager.cs
103
ShaderManager.cs
|
@ -1,103 +0,0 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace nhengine {
|
||||
|
||||
public class ShaderManager {
|
||||
private static ShaderManager _instance;
|
||||
|
||||
private List<Shader> shaders;
|
||||
|
||||
public ShaderManager(){
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = this;
|
||||
}
|
||||
|
||||
this.shaders = new List<Shader>();
|
||||
}
|
||||
|
||||
void registerShader(Shader shader){
|
||||
this.shaders.Add(shader);
|
||||
}
|
||||
|
||||
public class Shader
|
||||
{
|
||||
|
||||
private int id;
|
||||
private ShaderType shaderType;
|
||||
private String source;
|
||||
|
||||
public Shader(ShaderType shaderType, String source)
|
||||
{
|
||||
this.id = GL.CreateShader(shaderType);
|
||||
|
||||
this.shaderType = shaderType;
|
||||
this.source = source;
|
||||
|
||||
_instance.registerShader(this);
|
||||
|
||||
compile();
|
||||
}
|
||||
|
||||
public int ID {
|
||||
get { return this.id; }
|
||||
}
|
||||
|
||||
public Shader(ShaderType shaderType,FileStream file){
|
||||
this.id = GL.CreateShader(shaderType);
|
||||
this.shaderType = shaderType;
|
||||
|
||||
StreamReader sr = new StreamReader(file);
|
||||
this.source = sr.ReadToEnd();
|
||||
|
||||
_instance.registerShader(this);
|
||||
|
||||
compile();
|
||||
}
|
||||
|
||||
private void compile(){
|
||||
GL.ShaderSource(this.id, source);
|
||||
GL.CompileShader(this.id);
|
||||
|
||||
string msg = GL.GetShaderInfoLog((int)this.id);
|
||||
|
||||
Console.WriteLine("Supported Shader Version: {0}", GL.GetString(StringName.ShadingLanguageVersion));
|
||||
Console.WriteLine("Shader Compiled: {0}", msg);
|
||||
|
||||
}
|
||||
|
||||
public ShaderType ShaderType {
|
||||
get { return this.shaderType; }
|
||||
}
|
||||
}
|
||||
|
||||
public class ShaderProgram {
|
||||
|
||||
Shader vertexShader;
|
||||
Shader fragmentShader;
|
||||
|
||||
int id;
|
||||
|
||||
public ShaderProgram(Shader vertexShader, Shader fragmentShader){
|
||||
|
||||
this.vertexShader = vertexShader;
|
||||
this.fragmentShader = fragmentShader;
|
||||
|
||||
this.id = GL.CreateProgram();
|
||||
|
||||
GL.AttachShader(this.id, vertexShader.ID);
|
||||
GL.AttachShader(this.id, fragmentShader.ID);
|
||||
GL.LinkProgram(this.id);
|
||||
Console.WriteLine("Shader Program Result:D {0}", GL.GetProgramInfoLog(this.id));
|
||||
}
|
||||
|
||||
public int ID {
|
||||
get { return this.id; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
public class ShaderProgram
|
||||
{
|
||||
|
||||
Shader vertexShader;
|
||||
Shader fragmentShader;
|
||||
|
||||
int id;
|
||||
|
||||
public ShaderProgram(Shader vertexShader, Shader fragmentShader)
|
||||
{
|
||||
init(vertexShader, fragmentShader);
|
||||
}
|
||||
|
||||
public ShaderProgram(String vertexShader, String fragmentShader)
|
||||
{
|
||||
init(
|
||||
new Shader(ShaderType.VertexShader, vertexShader),
|
||||
new Shader(ShaderType.FragmentShader, fragmentShader)
|
||||
);
|
||||
}
|
||||
|
||||
public ShaderProgram(Stream vertexShader, Stream fragmentShader)
|
||||
{
|
||||
init(
|
||||
new Shader(ShaderType.VertexShader, new StreamReader(vertexShader).ReadToEnd()),
|
||||
new Shader(ShaderType.FragmentShader, new StreamReader(fragmentShader).ReadToEnd())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private void init(Shader vertexShader, Shader fragmentShader){
|
||||
this.vertexShader = vertexShader;
|
||||
this.fragmentShader = fragmentShader;
|
||||
|
||||
this.id = GL.CreateProgram();
|
||||
|
||||
GL.AttachShader(this.id, vertexShader.ID);
|
||||
GL.AttachShader(this.id, fragmentShader.ID);
|
||||
|
||||
GL.BindAttribLocation(this.id, 0, "position");
|
||||
GL.BindAttribLocation(this.id, 1, "v_color");
|
||||
|
||||
|
||||
GL.LinkProgram(this.id);
|
||||
Console.WriteLine("Shader Program Result: {0}", GL.GetProgramInfoLog(this.id));
|
||||
}
|
||||
|
||||
public int ID
|
||||
{
|
||||
get { return this.id; }
|
||||
}
|
||||
}
|
||||
}
|
205
SquaredMap.cs
205
SquaredMap.cs
|
@ -1,205 +0,0 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
using OpenTK;
|
||||
|
||||
namespace nhengine
|
||||
{
|
||||
public class SquaredMap
|
||||
{
|
||||
private int width,
|
||||
height;
|
||||
|
||||
private double[] heightMap;
|
||||
private int[] tileTypes;
|
||||
|
||||
/* GL shared resources */
|
||||
private int vao, cao, nao, ebo;
|
||||
|
||||
private int bufVertices;
|
||||
private float[]
|
||||
vertices;
|
||||
private float[]
|
||||
colors,
|
||||
normals;
|
||||
|
||||
private int[] elements;
|
||||
|
||||
private ShaderProgram
|
||||
shaderProgram;
|
||||
|
||||
public SquaredMap(int width,int height)
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
|
||||
this.heightMap = new double[getVertexIndex(width,height) + 1];
|
||||
this.tileTypes = new int[getTileIndex(width,height) + 1];
|
||||
|
||||
shaderProgram = new ShaderProgram(
|
||||
new FileStream("shader/simple_vertex.shader",FileMode.Open),
|
||||
new FileStream("shader/simple_fragment.shader",FileMode.Open)
|
||||
);
|
||||
|
||||
prepareGL();
|
||||
computeGL();
|
||||
|
||||
dumpGL();
|
||||
}
|
||||
|
||||
private void prepareGL(){
|
||||
vao = GL.GenVertexArray();
|
||||
cao = GL.GenBuffer();
|
||||
nao = GL.GenBuffer();
|
||||
ebo = GL.GenBuffer();
|
||||
bufVertices = GL.GenBuffer();
|
||||
}
|
||||
|
||||
public void computeGL(){
|
||||
int b;
|
||||
|
||||
if (vertices == null){
|
||||
vertices = new float[heightMap.Length * 3];
|
||||
}
|
||||
|
||||
if (elements == null){
|
||||
elements = new int[width * height * 6];
|
||||
}
|
||||
|
||||
if (colors == null){
|
||||
colors = new float[heightMap.Length * 3];
|
||||
normals = new float[colors.Length];
|
||||
}
|
||||
|
||||
Random rand = new Random();
|
||||
|
||||
for (int x = 0; x <= width;x++)
|
||||
{
|
||||
for (int y = 0; y <= height;y++){
|
||||
b = 3 * getVertexIndex(x, y);
|
||||
|
||||
vertices[b + 0] = 128 * x;
|
||||
vertices[b + 1] = 128 * y;
|
||||
|
||||
float h = (float)rand.NextDouble();
|
||||
vertices[b + 2] = (float)(256 * (h * h));
|
||||
|
||||
colors[b + 0] = 0.3f + 0.7f * (float)vertices[b + 2] / 256.0f;
|
||||
colors[b + 1] = 0.2f + 0.8f * (float)vertices[b + 2] / 256.0f;
|
||||
colors[b + 2] = 0.4f + 0.6f * (float)vertices[b + 2] / 256.0f;
|
||||
}
|
||||
}
|
||||
|
||||
for (int x = 0; x < width;x++)
|
||||
{
|
||||
for (int y = 0; y < height;y++){
|
||||
b = 6 * getTileIndex(x, y);
|
||||
|
||||
elements[b + 0] = x + (y * (width + 1));
|
||||
elements[b + 1] = x + (y * (width + 1)) + 1;
|
||||
elements[b + 2] = x + ((y + 1) * (width + 1));
|
||||
|
||||
elements[b + 3] = x + ((y + 1) * (width + 1));
|
||||
elements[b + 4] = x + (y * (width + 1)) + 1;
|
||||
elements[b + 5] = x + ((y + 1) * (width + 1)) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
GL.BindVertexArray(vao);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, bufVertices);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 4 * vertices.Length, vertices, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.VertexAttribPointer(0,
|
||||
3,
|
||||
VertexAttribPointerType.Float,
|
||||
false,
|
||||
0,
|
||||
0);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, cao);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 4 * colors.Length, colors, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.VertexAttribPointer(1,
|
||||
3,
|
||||
VertexAttribPointerType.Float,
|
||||
false,
|
||||
0,
|
||||
0);
|
||||
|
||||
GL.EnableVertexAttribArray(0);
|
||||
GL.EnableVertexAttribArray(1);
|
||||
|
||||
|
||||
GL.BindBuffer(BufferTarget.ElementArrayBuffer,ebo);
|
||||
GL.BufferData(BufferTarget.ElementArrayBuffer, 4 * elements.Length, elements, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.BindVertexArray(0);
|
||||
}
|
||||
|
||||
void dumpGL(){
|
||||
Console.WriteLine("Vertices:");
|
||||
for (int x = 0; x < 8;x++){
|
||||
Console.WriteLine("{0}", vertices[x]);
|
||||
}
|
||||
}
|
||||
|
||||
private int getTileIndex(int x, int y)
|
||||
{
|
||||
return x + (y * this.width);
|
||||
}
|
||||
private int getVertexIndex(int x,int y){
|
||||
return x + (y * (this.width + 1));
|
||||
}
|
||||
|
||||
private int getTileType(int x, int y)
|
||||
{
|
||||
int ind = getTileIndex(x, y);
|
||||
if ((ind < 0) || (ind > tileTypes.Length))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return this.tileTypes[ind];
|
||||
}
|
||||
|
||||
private int getTileType(int ind)
|
||||
{
|
||||
if ((ind < 0) || (ind > tileTypes.Length))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return this.tileTypes[ind];
|
||||
}
|
||||
|
||||
private double getHeight(int ind)
|
||||
{
|
||||
if ((ind < 0) || (ind > heightMap.Length))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return this.heightMap[ind];
|
||||
}
|
||||
|
||||
public void paint(GLCamera camera){
|
||||
|
||||
|
||||
Matrix4 pmat = camera.Matrix;
|
||||
|
||||
GL.UseProgram(shaderProgram.ID);
|
||||
|
||||
int pm = GL.GetUniformLocation(shaderProgram.ID, "proj_matrix");
|
||||
GL.UniformMatrix4(pm, false, ref pmat);
|
||||
|
||||
GL.BindVertexArray(vao);
|
||||
|
||||
GL.DrawElements(BeginMode.Triangles, elements.Length, DrawElementsType.UnsignedInt, 0);
|
||||
|
||||
GL.BindVertexArray(0);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
44
nhengine.sln
44
nhengine.sln
|
@ -1,43 +1,23 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nhengine", "nhengine.csproj", "{48BC2215-027E-435F-B8DB-336BD9F678FC}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nhengine", "NHEngine\nhengine.csproj", "{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pencil.Gaming", "..\Pencil.Gaming\Pencil.Gaming\Pencil.Gaming.csproj", "{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "org.nhengine", "org.nhengine\org.nhengine.csproj", "{3E812F66-D5F3-4599-8360-97F355B6CC1B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
Compatibility-GLFW2|Any CPU = Compatibility-GLFW2|Any CPU
|
||||
Core-GLFW2|Any CPU = Core-GLFW2|Any CPU
|
||||
Compatibility-GLFW3|Any CPU = Compatibility-GLFW3|Any CPU
|
||||
Core-GLFW3|Any CPU = Core-GLFW3|Any CPU
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Debug|x86.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Release|x86.ActiveCfg = Release|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Release|x86.Build.0 = Release|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW2|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW2|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW2|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW2|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW3|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Compatibility-GLFW3|Any CPU.Build.0 = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW3|Any CPU.ActiveCfg = Debug|x86
|
||||
{48BC2215-027E-435F-B8DB-336BD9F678FC}.Core-GLFW3|Any CPU.Build.0 = Debug|x86
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW2|Any CPU.ActiveCfg = Compatibility-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW2|Any CPU.Build.0 = Compatibility-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW2|Any CPU.ActiveCfg = Core-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW2|Any CPU.Build.0 = Core-GLFW2|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW3|Any CPU.ActiveCfg = Compatibility-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Compatibility-GLFW3|Any CPU.Build.0 = Compatibility-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW3|Any CPU.ActiveCfg = Core-GLFW3|Any CPU
|
||||
{DDB6DB6D-E5DE-4BDB-8AC8-26DF800E9FF0}.Core-GLFW3|Any CPU.Build.0 = Core-GLFW3|Any CPU
|
||||
{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{42BCFEF7-3F24-469A-BD46-E0C9C2C20D21}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3E812F66-D5F3-4599-8360-97F355B6CC1B}.Debug|Any CPU.ActiveCfg = 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.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<configuration>
|
||||
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
||||
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
||||
<dllmap os="linux" dll="openal32.dll" target="libopenal.so.1"/>
|
||||
<dllmap os="linux" dll="alut.dll" target="libalut.so.0"/>
|
||||
<dllmap os="linux" dll="opencl.dll" target="libOpenCL.so"/>
|
||||
<dllmap os="linux" dll="libX11" target="libX11.so.6"/>
|
||||
<dllmap os="linux" dll="libXi" target="libXi.so.6"/>
|
||||
<dllmap os="linux" dll="SDL2.dll" target="libSDL2-2.0.so.0"/>
|
||||
<dllmap os="osx" dll="opengl32.dll" target="/System/Library/Frameworks/OpenGL.framework/OpenGL"/>
|
||||
<dllmap os="osx" dll="openal32.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
|
||||
<dllmap os="osx" dll="alut.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
|
||||
<dllmap os="osx" dll="libGLES.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||
<dllmap os="osx" dll="libGLESv1_CM.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||
<dllmap os="osx" dll="libGLESv2.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||
<dllmap os="osx" dll="opencl.dll" target="/System/Library/Frameworks/OpenCL.framework/OpenCL"/>
|
||||
<dllmap os="osx" dll="SDL2.dll" target="libSDL2.dylib"/>
|
||||
<!-- XQuartz compatibility (X11 on Mac) -->
|
||||
<dllmap os="osx" dll="libGL.so.1" target="/usr/X11/lib/libGL.dylib"/>
|
||||
<dllmap os="osx" dll="libX11" target="/usr/X11/lib/libX11.dylib"/>
|
||||
<dllmap os="osx" dll="libXcursor.so.1" target="/usr/X11/lib/libXcursor.dylib"/>
|
||||
<dllmap os="osx" dll="libXi" target="/usr/X11/lib/libXi.dylib"/>
|
||||
<dllmap os="osx" dll="libXinerama" target="/usr/X11/lib/libXinerama.dylib"/>
|
||||
<dllmap os="osx" dll="libXrandr.so.2" target="/usr/X11/lib/libXrandr.dylib"/>
|
||||
</configuration>
|
|
@ -0,0 +1,26 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
// Information about this assembly is defined by the following attributes.
|
||||
// Change them to the values specific to your project.
|
||||
|
||||
[assembly: AssemblyTitle("org.nhengine")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("")]
|
||||
[assembly: AssemblyCopyright("${AuthorCopyright}")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
|
||||
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
|
||||
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
|
||||
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
|
||||
// The following attributes are used to specify the signing key for the assembly,
|
||||
// if desired. See the Mono documentation for more information about signing.
|
||||
|
||||
//[assembly: AssemblyDelaySign(false)]
|
||||
//[assembly: AssemblyKeyFile("")]
|
|
@ -0,0 +1,129 @@
|
|||
using System;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK.Graphics;
|
||||
using OpenTK;
|
||||
|
||||
namespace org.nhengine.graphics
|
||||
{
|
||||
public class GLCamera
|
||||
{
|
||||
Vector3 vPosition; // Position der Kamera
|
||||
Vector3 vDirection; // Blickrichtung der Kamera
|
||||
|
||||
float fDistance; // Zusätzliche Distanz der Kamera entgegen der Blickrichtung
|
||||
|
||||
Matrix4 mTranslation; // Matrix für Translation
|
||||
Matrix4 mRotation; // Matrix für Rotation
|
||||
Matrix4 mDistance; // Matrix für Rückzug entgegen der Blickrichtung
|
||||
Matrix4 mProjection; // Projektionsmatrix
|
||||
|
||||
public GLCamera()
|
||||
{
|
||||
vPosition = new Vector3(0,0,0);
|
||||
vDirection = Vector3.UnitZ;
|
||||
fDistance = 0.0f;
|
||||
|
||||
mProjection = Matrix4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.PiOver4,
|
||||
1.0f,
|
||||
0.1f,
|
||||
100000.0f
|
||||
);
|
||||
|
||||
mRotation = Matrix4.Identity;
|
||||
|
||||
glPrepare();
|
||||
}
|
||||
|
||||
public void setViewport(int width, int height)
|
||||
{
|
||||
mProjection = Matrix4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.PiOver4,
|
||||
width / (float)height,
|
||||
1.0f,
|
||||
1000000.0f
|
||||
);
|
||||
}
|
||||
|
||||
private void glPrepare(){
|
||||
this.mTranslation = Matrix4.CreateTranslation(vPosition * -1.0f);
|
||||
this.mDistance = mRotation * Matrix4.CreateTranslation(0, 0, -fDistance);
|
||||
|
||||
// Console.WriteLine("View Direction: {0}", vDirection);
|
||||
// Console.WriteLine("Rotation Matrix: {0}", mRotation);
|
||||
|
||||
}
|
||||
|
||||
private void glUpdate(){
|
||||
|
||||
}
|
||||
|
||||
public void use(ShaderProgram sp){
|
||||
glUpdate();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Matrix4 MTranslation
|
||||
{
|
||||
get
|
||||
{
|
||||
return mTranslation;
|
||||
}
|
||||
}
|
||||
|
||||
public Matrix4 MRotation
|
||||
{
|
||||
get
|
||||
{
|
||||
return mRotation;
|
||||
}
|
||||
set {
|
||||
this.mRotation = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Matrix4 MDistance
|
||||
{
|
||||
get
|
||||
{
|
||||
return mDistance;
|
||||
}
|
||||
}
|
||||
|
||||
public Matrix4 MProjection
|
||||
{
|
||||
get
|
||||
{
|
||||
return mProjection;
|
||||
}
|
||||
}
|
||||
|
||||
public float Distance
|
||||
{
|
||||
get
|
||||
{
|
||||
return fDistance;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
fDistance = value;
|
||||
glPrepare();
|
||||
}
|
||||
}
|
||||
/*
|
||||
public Vector3 Direction {
|
||||
get { return this.vDirection; }
|
||||
set { this.vDirection = value; glPrepare(); }
|
||||
}
|
||||
*/
|
||||
public Vector3 Position {
|
||||
get { return this.vPosition; }
|
||||
set { this.vPosition = value; glPrepare(); }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,218 @@
|
|||
using System;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK.Graphics;
|
||||
using OpenTK;
|
||||
|
||||
|
||||
namespace org.nhengine.graphics
|
||||
{
|
||||
public class GLObject
|
||||
{
|
||||
ShaderProgram shaderProgram;
|
||||
|
||||
protected float[] vertices,
|
||||
colors,
|
||||
normals;
|
||||
|
||||
protected int[] elements;
|
||||
|
||||
int vao, // Vertex Array Object
|
||||
ebo, // Element Buffer
|
||||
vbo, // Vertex Buffer
|
||||
cbo, // Color Buffer
|
||||
nbo; // Normals Buffer
|
||||
|
||||
Vector3 position;
|
||||
|
||||
protected bool colorEnabled,
|
||||
normalsEnabled,
|
||||
uvEnabled;
|
||||
|
||||
public GLObject(int vertexes)
|
||||
{
|
||||
shaderProgram = GlobalDefaults.instance().DefaultShaderProgram;
|
||||
|
||||
this.vertices = new float[3 * vertexes];
|
||||
this.colors = new float[4 * vertexes];
|
||||
this.normals = new float[3 * vertexes];
|
||||
this.elements = null; // Element Arrays können im Moment nicht verwendet werden
|
||||
|
||||
colorEnabled = true;
|
||||
normalsEnabled = false;
|
||||
uvEnabled = false;
|
||||
|
||||
prepareGL();
|
||||
}
|
||||
|
||||
protected void prepareGL()
|
||||
{
|
||||
vao = GL.GenVertexArray();
|
||||
ebo = GL.GenBuffer();
|
||||
vbo = GL.GenBuffer();
|
||||
cbo = GL.GenBuffer();
|
||||
nbo = GL.GenBuffer();
|
||||
|
||||
GL.BindVertexArray(vao);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
|
||||
GL.VertexAttribPointer(0,
|
||||
3,
|
||||
VertexAttribPointerType.Float,
|
||||
false,
|
||||
0,
|
||||
0);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
|
||||
GL.VertexAttribPointer(1,
|
||||
4,
|
||||
VertexAttribPointerType.Float,
|
||||
false,
|
||||
0,
|
||||
0);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
|
||||
GL.VertexAttribPointer(2,
|
||||
3,
|
||||
VertexAttribPointerType.Float,
|
||||
false,
|
||||
0,
|
||||
0);
|
||||
|
||||
GL.BindVertexArray(0);
|
||||
}
|
||||
|
||||
protected void updateGL()
|
||||
{
|
||||
GL.BindVertexArray(vao);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 4 * this.vertices.Length, this.vertices, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(0);
|
||||
|
||||
if (colorEnabled)
|
||||
{
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 4 * this.colors.Length, this.colors, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.DisableVertexAttribArray(1);
|
||||
}
|
||||
|
||||
if (normalsEnabled)
|
||||
{
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 4 * this.normals.Length, this.normals, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.DisableVertexAttribArray(2);
|
||||
}
|
||||
|
||||
if (uvEnabled)
|
||||
{
|
||||
GL.EnableVertexAttribArray(3);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.DisableVertexAttribArray(3);
|
||||
}
|
||||
|
||||
GL.BindVertexArray(0);
|
||||
}
|
||||
|
||||
protected void setVertex(int n, Vector3 p)
|
||||
{
|
||||
vertices[(3 * n)] = p.X;
|
||||
vertices[(3 * n) + 1] = p.Y;
|
||||
vertices[(3 * n) + 2] = p.Z;
|
||||
}
|
||||
|
||||
protected void setNormal(int n, Vector3 norm){
|
||||
normals[(3 * n)] = norm.X;
|
||||
normals[(3 * n)+1] = norm.Y;
|
||||
normals[(3 * n)+2] = norm.Z;
|
||||
}
|
||||
|
||||
protected void setColor(int n, Vector4 p)
|
||||
{
|
||||
colors[(4 * n)] = p.X;
|
||||
colors[(4 * n) + 1] = p.Y;
|
||||
colors[(4 * n) + 2] = p.Z;
|
||||
colors[(4 * n) + 3] = p.W;
|
||||
}
|
||||
|
||||
protected void setTriangle(int n, Vector3 a, Vector3 b, Vector3 c)
|
||||
{
|
||||
setVertex((3 * n), a);
|
||||
setVertex((3 * n) + 1, b);
|
||||
setVertex((3 * n) + 2, c);
|
||||
|
||||
Vector3 normal = Vector3.Cross((b - a),(c - a));
|
||||
normal.Normalize();
|
||||
|
||||
setNormal((3 * n), normal);
|
||||
setNormal((3 * n) + 1, normal);
|
||||
setNormal((3 * n) + 2, normal);
|
||||
|
||||
Console.WriteLine("setTriangle(): ");
|
||||
Console.WriteLine("a: {0}", a);
|
||||
Console.WriteLine("b: {0}", b);
|
||||
Console.WriteLine("c: {0}", c);
|
||||
Console.WriteLine("n: {0}", normal);
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected void setColor(Vector4 c)
|
||||
{
|
||||
for (int n = 0; n < colors.Length / 4; n++)
|
||||
{
|
||||
setColor(n, c);
|
||||
}
|
||||
}
|
||||
|
||||
protected Vector4 getColor(int n){
|
||||
return new Vector4(
|
||||
colors[(4 * n)],
|
||||
colors[(4 * n) + 1],
|
||||
colors[(4 * n) + 2],
|
||||
colors[(4 * n) + 3]);
|
||||
}
|
||||
|
||||
public void paint()
|
||||
{
|
||||
paint(GlobalDefaults.instance().ActiveCamera);
|
||||
}
|
||||
|
||||
public void paint(GLCamera camera)
|
||||
{
|
||||
shaderProgram.use(camera);
|
||||
|
||||
GL.BindVertexArray(this.vao);
|
||||
|
||||
GL.DrawArrays(PrimitiveType.Triangles, 0, vertices.Length);
|
||||
|
||||
GL.BindVertexArray(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ShaderProgram ShaderProgram
|
||||
{
|
||||
get { return this.shaderProgram; }
|
||||
set { this.shaderProgram = value; }
|
||||
}
|
||||
|
||||
public Vector3 Position{
|
||||
get { return this.position; }
|
||||
set { this.position = value; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
namespace org.nhengine
|
||||
{
|
||||
public class GLSceneOrientation
|
||||
{
|
||||
|
||||
|
||||
|
||||
public GLSceneOrientation()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
using System;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
namespace org.nhengine.graphics
|
||||
{
|
||||
public class GlobalDefaults
|
||||
{
|
||||
private static GlobalDefaults _instance = new GlobalDefaults();
|
||||
public static GlobalDefaults instance(){
|
||||
return _instance;
|
||||
}
|
||||
|
||||
private Shader defVertexShader,
|
||||
defFragmentShader;
|
||||
private ShaderProgram
|
||||
defShaderProgram;
|
||||
|
||||
private GLCamera activeCamera;
|
||||
|
||||
private GlobalDefaults(){
|
||||
|
||||
Console.WriteLine("GlobalDefaults: Shader Version: {0}", GL.GetString(StringName.ShadingLanguageVersion));
|
||||
|
||||
defVertexShader = new Shader(OpenTK.Graphics.OpenGL.ShaderType.VertexShader, defVertexShaderSource);
|
||||
defFragmentShader = new Shader(OpenTK.Graphics.OpenGL.ShaderType.FragmentShader, defFragmentShaderSource);
|
||||
|
||||
defShaderProgram = new ShaderProgram(defVertexShader, defFragmentShader);
|
||||
|
||||
|
||||
activeCamera = new GLCamera();
|
||||
}
|
||||
|
||||
public ShaderProgram DefaultShaderProgram {
|
||||
get { return this.defShaderProgram;}
|
||||
}
|
||||
|
||||
public Shader DefaultVertexShader
|
||||
{
|
||||
get { return defVertexShader; }
|
||||
}
|
||||
|
||||
public Shader DefaultFragmentShader
|
||||
{
|
||||
get { return defFragmentShader; }
|
||||
}
|
||||
|
||||
public GLCamera ActiveCamera {
|
||||
get { return this.activeCamera; }
|
||||
set { this.activeCamera = value; }
|
||||
}
|
||||
|
||||
|
||||
private string defVertexShaderSource = @"#version 330
|
||||
|
||||
in vec3 iv_position;
|
||||
in vec4 iv_color;
|
||||
in vec3 iv_normal;
|
||||
in vec2 iv_uv;
|
||||
|
||||
uniform mat4 mTranslation;
|
||||
uniform mat4 mRotation;
|
||||
uniform mat4 mWorld;
|
||||
uniform mat4 mDistance;
|
||||
uniform mat4 mCamera;
|
||||
uniform mat4 mProjection;
|
||||
uniform mat4 mComplete;
|
||||
|
||||
out vec4 color;
|
||||
out vec3 norm;
|
||||
out vec2 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = mComplete * vec4( iv_position, 1 );
|
||||
|
||||
norm = normalize( ( mRotation * vec4( iv_normal, 1 ) ).xyz );
|
||||
vec3 camray = normalize( -gl_Position.xyz );
|
||||
|
||||
float cosTheta = dot( norm , camray );
|
||||
|
||||
float visibility = 1.0;
|
||||
if (cosTheta < 0){
|
||||
visibility = 1.0;
|
||||
}
|
||||
color = vec4( iv_color.xyz * (0.5 + (0.5 * cosTheta * cosTheta)), 0.5f );
|
||||
}
|
||||
|
||||
";
|
||||
|
||||
private string defFragmentShaderSource = @"#version 330
|
||||
|
||||
in vec4 color;
|
||||
in vec3 norm;
|
||||
in vec2 uv;
|
||||
|
||||
out vec4 _color;
|
||||
|
||||
void main()
|
||||
{
|
||||
_color = color;
|
||||
gl_FragDepth = gl_FragCoord.z;
|
||||
}
|
||||
|
||||
";
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -3,7 +3,7 @@ using System.IO;
|
|||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
|
||||
namespace nhengine
|
||||
namespace org.nhengine.graphics
|
||||
{
|
||||
public class Shader
|
||||
{
|
||||
|
@ -41,13 +41,18 @@ namespace nhengine
|
|||
|
||||
private void compile()
|
||||
{
|
||||
int result;
|
||||
|
||||
GL.ShaderSource(this.id, source);
|
||||
GL.CompileShader(this.id);
|
||||
|
||||
string msg = GL.GetShaderInfoLog((int)this.id);
|
||||
GL.GetShader(this.id, ShaderParameter.CompileStatus, out result);
|
||||
|
||||
Console.WriteLine("Supported Shader Version: {0}", GL.GetString(StringName.ShadingLanguageVersion));
|
||||
Console.WriteLine("Shader Compiled: {0}", msg);
|
||||
if (result != 1){
|
||||
Console.WriteLine("Shader compile failed: {0}", msg);
|
||||
throw new Exception(String.Format("OpenGL: Shader did not compile. ({0})",msg));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
using OpenTK.Graphics.OpenGL;
|
||||
using OpenTK;
|
||||
|
||||
/**
|
||||
* ShaderProgram Class
|
||||
*
|
||||
* Defines a shading program to use for drawing operations
|
||||
*
|
||||
* The coordinate space used to describe the world is called "WorldSpace"
|
||||
*
|
||||
* Each object to be drawn/used in the "World" is based on its individual coordinate space "ObjectSpace"
|
||||
* Each object provides a Transformation Matrix "mObject" which translates ObjectSpace to WorldSpace.
|
||||
*
|
||||
* WorldSpace = mObject * ObjectSpace
|
||||
*
|
||||
* To render the scene another coordinate space is used, which is called "CameraSpace"
|
||||
* The transformation matrix used to translate from WorldSpace to CameraSpace is called "mCamera"
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* As convention the following data will be given to shaders:
|
||||
*
|
||||
* Uniform:
|
||||
*
|
||||
* mTranslation World Coordinate Translation
|
||||
* mRotation Rotation to camera view direction
|
||||
* mWorld Transformation Matrix to world coordinate system
|
||||
*
|
||||
* mDistance Camera Distance translation (Z)
|
||||
* mCamera Transformation to camera space
|
||||
* mProjection Projection Matrix
|
||||
*
|
||||
* mComplete Result of all Matrices
|
||||
*
|
||||
* Stream Data:
|
||||
*
|
||||
* iv_position Vertex coordinate
|
||||
* iv_color Vertex Color
|
||||
* iv_normal Vertex normal
|
||||
* iv_uv Vertex texture coordinate
|
||||
*
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
namespace org.nhengine.graphics
|
||||
{
|
||||
public class ShaderProgram
|
||||
{
|
||||
|
||||
Shader vertexShader;
|
||||
Shader fragmentShader;
|
||||
|
||||
int id;
|
||||
|
||||
int nm_Translation,
|
||||
nm_Rotation,
|
||||
nm_World,
|
||||
nm_Distance,
|
||||
nm_Camera,
|
||||
nm_Projection,
|
||||
nm_Complete;
|
||||
|
||||
public ShaderProgram(Shader vertexShader, Shader fragmentShader)
|
||||
{
|
||||
init(vertexShader, fragmentShader);
|
||||
}
|
||||
|
||||
public ShaderProgram(String vertexShader, String fragmentShader)
|
||||
{
|
||||
init(
|
||||
new Shader(ShaderType.VertexShader, vertexShader),
|
||||
new Shader(ShaderType.FragmentShader, fragmentShader)
|
||||
);
|
||||
}
|
||||
|
||||
public ShaderProgram(Stream vertexShader, Stream fragmentShader)
|
||||
{
|
||||
init(
|
||||
new Shader(ShaderType.VertexShader, new StreamReader(vertexShader).ReadToEnd()),
|
||||
new Shader(ShaderType.FragmentShader, new StreamReader(fragmentShader).ReadToEnd())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private void init(Shader vertexShader, Shader fragmentShader){
|
||||
this.vertexShader = vertexShader;
|
||||
this.fragmentShader = fragmentShader;
|
||||
|
||||
this.id = GL.CreateProgram();
|
||||
|
||||
GL.AttachShader(this.id, this.vertexShader.ID);
|
||||
GL.AttachShader(this.id, this.fragmentShader.ID);
|
||||
|
||||
GL.BindAttribLocation(this.id, 0, "iv_position");
|
||||
GL.BindAttribLocation(this.id, 1, "iv_color");
|
||||
GL.BindAttribLocation(this.id, 2, "iv_normal");
|
||||
GL.BindAttribLocation(this.id, 3, "iv_uv");
|
||||
|
||||
GL.LinkProgram(this.id);
|
||||
Console.WriteLine("Shader Program Result: {0}", GL.GetProgramInfoLog(this.id));
|
||||
|
||||
nm_Translation = GL.GetUniformLocation(this.ID, "mTranslation");
|
||||
nm_Rotation = GL.GetUniformLocation(this.ID, "mRotation");
|
||||
nm_World = GL.GetUniformLocation(this.ID, "mWorld");
|
||||
nm_Distance = GL.GetUniformLocation(this.ID, "mDistance");
|
||||
nm_Camera = GL.GetUniformLocation(this.ID, "mCamera");
|
||||
nm_Projection = GL.GetUniformLocation(this.ID, "mProjection");
|
||||
nm_Complete = GL.GetUniformLocation(this.ID, "mComplete");
|
||||
}
|
||||
|
||||
public int ID
|
||||
{
|
||||
get { return this.id; }
|
||||
}
|
||||
|
||||
public int nmTranslation
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_Translation;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmRotation
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_Rotation;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmWorld
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_World;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmDistance
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_Distance;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmCamera
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_Camera;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmProjection
|
||||
{
|
||||
get
|
||||
{
|
||||
return nm_Projection;
|
||||
}
|
||||
}
|
||||
|
||||
public int nmComplete
|
||||
{
|
||||
get { return this.nm_Complete; }
|
||||
}
|
||||
|
||||
public void use(GLCamera camera){
|
||||
GL.UseProgram(this.id);
|
||||
|
||||
Matrix4
|
||||
mTranslate,
|
||||
mRotation,
|
||||
mWorld,
|
||||
mDistance,
|
||||
mCamera,
|
||||
mProjection,
|
||||
mComplete;
|
||||
|
||||
mTranslate = camera.MTranslation;
|
||||
mRotation = camera.MRotation;
|
||||
mWorld = mTranslate * mRotation;
|
||||
mDistance = camera.MDistance;
|
||||
mCamera = mWorld * mDistance;
|
||||
mProjection = camera.MProjection;
|
||||
mComplete = mCamera * mProjection;
|
||||
|
||||
GL.UniformMatrix4(nm_Translation, false, ref mTranslate);
|
||||
GL.UniformMatrix4(nm_Rotation, false, ref mRotation);
|
||||
GL.UniformMatrix4(nm_World, false, ref mWorld);
|
||||
GL.UniformMatrix4(nm_Distance, false, ref mDistance);
|
||||
GL.UniformMatrix4(nm_Camera, false, ref mCamera);
|
||||
GL.UniformMatrix4(nm_Projection, false, ref mProjection);
|
||||
GL.UniformMatrix4(nm_Complete, false, ref mComplete);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
using System;
|
||||
|
||||
using OpenTK;
|
||||
|
||||
namespace org.nhengine.graphics.primitives
|
||||
{
|
||||
public class Cube : GLObject
|
||||
{
|
||||
public Cube(Vector3 position, float width)
|
||||
:base(36)
|
||||
{
|
||||
Vector3 dx, dy, dz;
|
||||
Vector3 a, b, c, d, e, f, g, h;
|
||||
|
||||
dx = (Vector3.UnitX * width / 2);
|
||||
dy = (Vector3.UnitY * width / 2);
|
||||
dz = (Vector3.UnitZ * width / 2);
|
||||
|
||||
a = position - dx - dy - dz;
|
||||
b = position + dx - dy - dz;
|
||||
c = position + dx + dy - dz;
|
||||
d = position - dx + dy - dz;
|
||||
e = position - dx - dy + dz;
|
||||
f = position + dx - dy + dz;
|
||||
g = position + dx + dy + dz;
|
||||
h = position - dx + dy + dz;
|
||||
|
||||
normalsEnabled = true;
|
||||
|
||||
setTriangle(0, a, b, c);
|
||||
setTriangle(1, c, d, a);
|
||||
setTriangle(2, f, e, h);
|
||||
setTriangle(3, h, g, f);
|
||||
setTriangle(4, e, a, d);
|
||||
setTriangle(5, d, h, e);
|
||||
setTriangle(6, b, f, g);
|
||||
setTriangle(7, g, c, b);
|
||||
setTriangle(8, a, e, f);
|
||||
setTriangle(9, f, b, a);
|
||||
setTriangle(10, g, c, d);
|
||||
setTriangle(11, d, h, g);
|
||||
|
||||
setColor(new Vector4(0.8f, 0.3f, 0.5f, 1.0f));
|
||||
|
||||
updateGL();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
|
||||
using OpenTK;
|
||||
using org.nhengine.graphics;
|
||||
|
||||
namespace org.nhengine.graphics.primitives
|
||||
{
|
||||
public class Triangle : GLObject
|
||||
{
|
||||
public Triangle(Vector3 a,Vector3 b,Vector3 c)
|
||||
:base(3)
|
||||
{
|
||||
normalsEnabled = true;
|
||||
|
||||
setTriangle(0, a, b, c);
|
||||
setColor(new Vector4(0, 1, 0, 1));
|
||||
|
||||
updateGL();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{3E812F66-D5F3-4599-8360-97F355B6CC1B}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>org.nhengine</RootNamespace>
|
||||
<AssemblyName>org.nhengine</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="OpenTK">
|
||||
<HintPath>..\packages\OpenTK.2.0.0\lib\net20\OpenTK.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="graphics\GLCamera.cs" />
|
||||
<Compile Include="graphics\GLObject.cs" />
|
||||
<Compile Include="graphics\Shader.cs" />
|
||||
<Compile Include="graphics\ShaderProgram.cs" />
|
||||
<Compile Include="graphics\GlobalDefaults.cs" />
|
||||
<Compile Include="graphics\primitives\Cube.cs" />
|
||||
<Compile Include="graphics\primitives\Triangle.cs" />
|
||||
<Compile Include="graphics\GLSceneOrientation.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="OpenTK.dll.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="graphics\" />
|
||||
<Folder Include="graphics\primitives\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="OpenTK" version="2.0.0" targetFramework="net45" />
|
||||
</packages>
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="OpenTK" version="2.0.0" targetFramework="net451" />
|
||||
</packages>
|
Loading…
Reference in New Issue