public void CalculateNormalsCubeTest() { Model cube = new ColouredCube(); Vector3[] normals = NormalModel.CalculateNormals(cube); Vector3 sum = new Vector3(); foreach (Vector3 v in normals) { sum += v; } VectorAssertions.AreEqual(new Vector3(), sum, 0.0001); }
public static void ThreeShaders() { Cube cube1 = new Cube(); Cube cube2 = new ColouredCube(); Cube cube3 = new TexturedCube(); ShaderModelRenderer sm1 = new ShaderModelRenderer(cube1); ShaderModelRenderer sm2 = new ShaderModelRenderer(cube2) { VertexShaderFilaneme = "Shaders/vs_col.glsl" }; ShaderModelRenderer sm3 = new ShaderModelRenderer(cube3) { VertexShaderFilaneme = "Shaders/vs_tex.glsl", FragmentShaderFilename = "Shaders/fs_tex.glsl" }; using (WorldWindow game = new WorldWindow() { Title = "ThreeShaders" }) { game.Camera.LookAt(new Vector3(-4, 4, -4), new Vector3()); (cube3 as TexturedCube).TextureID = TextureLoader.LoadImage("Textures/opentksquare.png"); game.Models.Add(sm1); game.Models.Add(sm2); game.Models.Add(sm3); UserInterface ui = new UserInterface(game); float time = 0; game.UpdateFrame += (o, e) => { time += (float)e.Time; cube1.Position = new Vector3(2, 0.05f * (float)Math.Sin(time), 0); cube1.Rotation = new Vector3(0.3f * time, 0.1f * time, 0); cube2.Position = new Vector3(0, 0.05f * (float)Math.Sin(time), 2); cube2.Rotation = new Vector3(0.3f * time, 0.1f * time, 0); cube3.Position = new Vector3(0, 0.05f * (float)Math.Sin(time), 0); cube3.Rotation = new Vector3(0.3f * time, 0.1f * time, 0); ui.PrintCommonStats(e.Time); }; game.Run(); } }
public void TriangleStripEnumeratorTest() { Cube cube = new ColouredCube(); int num = 0; int[] touchedVertices = new int[cube.Vertices.Length]; foreach (IndexedTriangle t in cube) { num++; touchedVertices[t.i0]++; touchedVertices[t.i1]++; touchedVertices[t.i2]++; } Assert.AreEqual(num, 2 * 6); foreach (int i in touchedVertices) { Assert.AreNotEqual(0, i); } }
static Vector3[] GenerateRandomCubes(WorldWindow game, int texID) { int numCubes = 100; Random rand = new Random(); Vector3[] posOffsets = new Vector3[numCubes]; for (int i = 0; i < numCubes; i++) { int type = rand.Next(3); Cube cube; ShaderModelRenderer sm; if (type == 0) { cube = new Cube(); sm = new ShaderModelRenderer(cube); } else if (type == 1) { cube = new ColouredCube(); sm = new ShaderModelRenderer(cube) { VertexShaderFilaneme = "Shaders/vs_col.glsl", FragmentShaderFilename = "Shaders/fs.glsl" }; } else { cube = new TexturedCube(); sm = new ShaderModelRenderer(cube) { VertexShaderFilaneme = "Shaders/vs_tex.glsl", FragmentShaderFilename = "Shaders/fs_tex.glsl" }; (cube as TexturedCube).TextureID = TextureLoader.LoadImage("Textures/opentksquare.png"); } cube.Scale = new Vector3(0.5f, 0.5f, 0.5f); game.Models.Add(sm); Vector3 v = new Vector3((float)rand.NextDouble(), (float)rand.NextDouble(), (float)rand.NextDouble()) * (float)(Math.PI * 2); posOffsets[i] = v - (Vector3.One * (float)Math.PI); } return(posOffsets); }
public static void TextboxInterfaceWithObject() { using (WorldWindow game = new WorldWindow()) { Vector3 eye = new Vector3(0, 0, -4); game.Camera.LookAt(eye, eye * 0.8f); UserInterfaceSimpleTextbox ui = new UserInterfaceSimpleTextbox(); ui.BoxBackground = Color.FromArgb(40, 0, 0, 0); ShaderModelRenderer ui_sm = new ShaderModelRenderer(ui) { VertexShaderFilaneme = "Shaders/vs_tex.glsl", FragmentShaderFilename = "Shaders/fs_tex.glsl", }; ColouredCube cube = new ColouredCube(); ShaderModelRenderer sm2 = new ShaderModelRenderer(cube) { VertexShaderFilaneme = "Shaders/vs_col.glsl", FragmentShaderFilename = "Shaders/fs.glsl", }; game.Models.Add(sm2); game.Models.Insert(0, ui_sm); float time = 0; game.UpdateFrame += (o, e) => { time += (float)e.Time; double fps = e.Time == 0 ? 1000 : 1.0 / e.Time; ui.Text = "Fps: " + fps.ToString("N1") + " Time: " + time.ToString("N2") + "\nnewline" + "\nnewline1" + "\nnewline2" + "\nnewline3"; cube.Position = new Vector3(-1, 0.5f * (float)Math.Sin(time), 0); cube.Rotation = new Vector3(0.3f * time, 0.1f * time, 0); }; game.Run(30); } }