summaryrefslogtreecommitdiff
path: root/TestApp/RenderWindow.cs
blob: 6013724c821f14603dc9e4c057ab7aa36b984b28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using NW4RTools;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;

namespace TestApp {
	public class RenderWindow : GameWindow {
		public RenderWindow() : base(800, 600, GraphicsMode.Default, "Test Model") {

		}

		private NW4RTools.Models.OpenGL.GLModel m_glModel;

		public void SetModel(ResFile rf, string modelName) {
			m_glModel = new NW4RTools.Models.OpenGL.GLModel(rf, modelName);
		}


		protected override void OnLoad(EventArgs e) {
			base.OnLoad(e);

			GL.ClearColor(0.1f, 0.2f, 0.5f, 0.0f);
			GL.Enable(EnableCap.DepthTest);

			GL.Enable(EnableCap.Blend);
			GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

			GL.Disable(EnableCap.CullFace);

			GL.Enable(EnableCap.Lighting);

			GL.ShadeModel(ShadingModel.Smooth);

			GL.Light(LightName.Light0, LightParameter.Position, new Vector4(0, 500, 1000, 0));
			GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, new Color4(1, 1, 1, 1));
			GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Shininess, 50);
			GL.Enable(EnableCap.Light0);
			
			GL.Light(LightName.Light1, LightParameter.Position, new Vector4(1000, 500, 0, 0));
			GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, new Color4(1, 1, 1, 1));
			GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Shininess, 50);
			GL.Enable(EnableCap.Light1);

			m_glModel.Prepare(Context);
		}

		protected override void OnResize(EventArgs e) {
			base.OnResize(e);

			GL.Viewport(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height);

			Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Width / (float)Height, 1.0f, 2000.0f);
			GL.MatrixMode(MatrixMode.Projection);
			GL.LoadMatrix(ref projection);
		}

		protected override void OnUpdateFrame(FrameEventArgs e) {
			base.OnUpdateFrame(e);

			GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

			Matrix4 modelview = Matrix4.LookAt(new Vector3(1000, 400, 1000), new Vector3(1000, 0, 0), Vector3.UnitY);
			//Matrix4 modelview = Matrix4.LookAt(new Vector3(-3, 2, 3), new Vector3(0, 0, 0), Vector3.UnitY);
			GL.MatrixMode(MatrixMode.Modelview);
			GL.LoadMatrix(ref modelview);

			m_glModel.Render(Context);

			SwapBuffers();
		}


	}
}