private void UpdateGeometry(Shader shader) { Mesh mesh = new Mesh(); var roomSize = 8; var plane = Meshes.CreateQuad(roomSize, roomSize, 2, 2); var xform = new Transformation(); xform.TranslateGlobal(0, -roomSize / 2, 0); mesh.Add(plane.Transform(xform)); xform.RotateZGlobal(90f); mesh.Add(plane.Transform(xform)); xform.RotateZGlobal(90f); mesh.Add(plane.Transform(xform)); xform.RotateZGlobal(90f); mesh.Add(plane.Transform(xform)); xform.RotateYGlobal(90f); mesh.Add(plane.Transform(xform)); xform.RotateYGlobal(180f); mesh.Add(plane.Transform(xform)); var sphere = Meshes.CreateSphere(1); mesh.Add(sphere); var suzanne = Obj2Mesh.FromObj(Resourcen.suzanne); mesh.Add(suzanne.Transform(System.Numerics.Matrix4x4.CreateTranslation(2, 2, -2))); geometry = VAOLoader.FromMesh(mesh, shader); }
public void ShaderChanged(string name, Shader shader) { if (ShaderName == name) { this.shader = shader; if (ReferenceEquals(shader, null)) { return; } Mesh mesh = Meshes.CreateQuad(10, 10, 10, 10); var sphere = Meshes.CreateSphere(0.5f, 2); sphere.SetConstantUV(new System.Numerics.Vector2(0.5f, 0.5f)); var xform = new Transformation(); xform.TranslateLocal(0, 2, -2); mesh.Add(sphere.Transform(xform)); xform.TranslateGlobal(0, 0, 2); mesh.Add(sphere.Transform(xform)); xform.TranslateGlobal(2, 0, -1); mesh.Add(sphere.Transform(xform)); geometry = VAOLoader.FromMesh(mesh, shader); } else if (ShaderDepthName == name) { this.shaderDepth = shader; if (ReferenceEquals(shaderDepth, null)) { return; } //todo: radeon cards make errors with geometry bound to one shader and use in other shaders because of binding id changes } }
public VisualPlane() { var sVertex = Encoding.UTF8.GetString(Resourcen.plane_vert); var sFragment = Encoding.UTF8.GetString(Resourcen.plane_frag); shdPlane = ShaderLoader.FromStrings(sVertex, sFragment); var mesh = Meshes.CreateQuad(2, 2, 1, 1); plane = VAOLoader.FromMesh(mesh, shdPlane); }
public void ShaderChanged(string name, Shader shader) { if (ShaderName != name) { return; } this.shader = shader; if (ReferenceEquals(shader, null)) { return; } Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne); geometryBody = VAOLoader.FromMesh(mesh, shader); var plane = Meshes.CreateQuad(100, 100, 10, 10); var xForm = new Transformation(); xForm.TranslateLocal(0, -20, 0); geometryPlane = VAOLoader.FromMesh(plane.Transform(xForm), shader); //for AMD graphics cards geometryPlane.SetAttribute(shader.GetAttributeLocation("instancePosition"), new Vector3[] { Vector3.Zero }, VertexAttribPointerType.Float, 3, true); geometryPlane.SetAttribute(shader.GetAttributeLocation("instanceScale"), new float[] { 1 }, VertexAttribPointerType.Float, 1, true); }