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); geometry = VAOLoader.FromMesh(mesh, shader); //per instance attributes var rnd = new Random(12); Func <float> Rnd01 = () => (float)rnd.NextDouble(); Func <float> RndCoord = () => (Rnd01() - 0.5f) * 35.0f; var instancePositions = new Vector3[particelCount]; for (int i = 0; i < particelCount; ++i) { instancePositions[i] = new Vector3(RndCoord(), RndCoord(), RndCoord()); } geometry.SetAttribute(shader.GetAttributeLocation("instancePosition"), instancePositions, VertexAttribPointerType.Float, 3, true); }
public MainVisual() { Camera.FarClip = 50f; Camera.Distance = 4f; Camera.FovY = 90f; suzanne.BackfaceCulling = true; suzanne.SetInputTexture(Resources.TextureDiffuse); suzanne.UpdateMeshShader(Obj2Mesh.FromObj(Resourcen.suzanne), Resources.ShaderDefault); suzanne.ZBufferTest = true; copyQuad.BackfaceCulling = false; copyQuad.SetInputTexture("tex", imageBase); copyQuad.UpdateMeshShader(null, Resources.ShaderCopy); copyQuad.ZBufferTest = false; var delta = 3f; var extend = 10f * delta; var translates = new List <Vector3>(); for (float x = -extend; x <= extend; x += delta) { for (float y = -extend; y <= extend; y += delta) { for (float z = -extend; z <= extend; z += delta) { translates.Add(new Vector3(x, y, z)); } } } suzanne.UpdateInstanceAttribute("translate", translates.ToArray()); suzanne.InstanceCount = translates.Count; }
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); }
private void UpdateMesh(Shader shader) { Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne); geometry = VAOLoader.FromMesh(mesh, shader); //per instance attributes var rnd = new Random(12); Func <float> Rnd01 = () => (float)rnd.NextDouble(); Func <float> RndCoord = () => (Rnd01() - 0.5f) * 8.0f; var instancePositions = new Vector3[particelCount]; for (int i = 0; i < particelCount; ++i) { instancePositions[i] = new Vector3(RndCoord(), RndCoord(), RndCoord()); } geometry.SetAttribute(shader.GetAttributeLocation("instancePosition"), instancePositions, VertexAttribPointerType.Float, 3, true); Func <float> RndSpeed = () => (Rnd01() - 0.5f); var instanceSpeeds = new Vector3[particelCount]; for (int i = 0; i < particelCount; ++i) { instanceSpeeds[i] = new Vector3(RndSpeed(), RndSpeed(), RndSpeed()); } geometry.SetAttribute(shader.GetAttributeLocation("instanceSpeed"), instanceSpeeds, VertexAttribPointerType.Float, 3, true); }
private void UpdateGeometry(Shader shader) { Mesh mesh = new Mesh(); //mesh.Add(Meshes.CreateSphere(.7f, 3)); mesh.Add(Obj2Mesh.FromObj(Resourcen.suzanne)); geometry = VAOLoader.FromMesh(mesh, shader); }
private void UpdateGeometry(Shader shader) { var mesh = new Mesh(); var sphere = Meshes.CreateSphere(1, 4); 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) { return; } this.shader = shader; if (ReferenceEquals(shader, null)) { return; } Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne); geometry = VAOLoader.FromMesh(mesh, shader); }
public FileDrawable(string fileName, RenderDevice renderer) { byte[] bytes = File.ReadAllBytes(fileName); DefaultMesh mesh = Obj2Mesh.FromObj(bytes); indices = renderer.CopyToVideoRAM(mesh.IDs.ToArray()); List <Vector3> positions = mesh.Position; List <Vector3> normals = mesh.Normal; attributePosition = renderer.CopyToVideoRAM(positions.ToArray()); var normalsAsColors = normals.Select(n => new Vector4(n, 1)); attributeColor = renderer.CopyToVideoRAM(normalsAsColors.ToArray()); }
public MainVisual() { const string path = "../../"; const string pathMedia = path + "media/"; shader = ShaderLoader.FromFiles(path + "vertex.glsl", path + "fragment.glsl"); //load geometry Mesh mesh = Obj2Mesh.FromObj(pathMedia + "suzanne.obj"); geometry.SetAttribute(shader.GetAttributeLocation("position"), mesh.positions.ToArray(), VertexAttribPointerType.Float, 3); geometry.SetAttribute(shader.GetAttributeLocation("normal"), mesh.normals.ToArray(), VertexAttribPointerType.Float, 3); //geometry.SetAttribute(shader.GetAttributeLocation("uv"), mesh.uvs.ToArray(), VertexAttribPointerType.Float, 2); geometry.SetID(mesh.ids.ToArray(), PrimitiveType.Triangles); GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); //draw wireframe //texDiffuse = TextureLoader.FromFile(pathMedia + "capsule0.jpg"); }
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); }
/// <summary> /// Meshes the specified resources. /// </summary> /// <param name="resources">The resources.</param> /// <returns></returns> /// <exception cref="ArgumentException">No elements</exception> public static DefaultMesh DefaultMesh(IEnumerable <NamedStream> resources) { return(Obj2Mesh.FromObj(ByteBuffer(resources))); }
public void ShaderChanged(string name, Shader shader) { if (ShaderName == name) { this.shaderObject = shader; if (ReferenceEquals(shader, null)) { return; } // cloud // cloud needs to be translated higher to "get" the (beginning) light from below Mesh cloudMesh = Obj2Mesh.FromObj(Resourcen.cloud); this.cloud = VAOLoader.FromMesh(cloudMesh, shader); // table Mesh tableClothMesh = Obj2Mesh.FromObj(Resourcen.tableCloth); this.tableCloth = VAOLoader.FromMesh(tableClothMesh, shader); // table top Mesh tableMesh = Obj2Mesh.FromObj(Resourcen.table); this.table = VAOLoader.FromMesh(tableMesh, shader); // candle Mesh candleMesh = Obj2Mesh.FromObj(Resourcen.candle); this.candle = VAOLoader.FromMesh(candleMesh, shader); // plate Mesh plateMesh = Obj2Mesh.FromObj(Resourcen.plate); this.plate = VAOLoader.FromMesh(plateMesh, shader); // grape plate var xform = new Transformation(); xform.ScaleGlobal(new System.Numerics.Vector3(.8f)); Mesh grapePlateMesh = Obj2Mesh.FromObj(Resourcen.plate); this.grapePlate = VAOLoader.FromMesh(grapePlateMesh.Transform(xform), shader); // wine bottle Mesh wineBottleMesh = Obj2Mesh.FromObj(Resourcen.wineBottle); this.wineBottle = VAOLoader.FromMesh(wineBottleMesh, shader); // wine bottle label Mesh wineBottleLabelMesh = Obj2Mesh.FromObj(Resourcen.wineBottleLabel); this.wineBottleLabel = VAOLoader.FromMesh(wineBottleLabelMesh, shader); // wine bottle shutter Mesh wineBottleShutterMesh = Obj2Mesh.FromObj(Resourcen.wineBottleShutter); this.wineBottleShutter = VAOLoader.FromMesh(wineBottleShutterMesh, shader); // grapes Mesh grapesMesh = Obj2Mesh.FromObj(Resourcen.grapes); this.grapes = VAOLoader.FromMesh(grapesMesh, shader); // knife left Mesh knifeLeftMesh = Obj2Mesh.FromObj(Resourcen.knife); this.knifeLeft = VAOLoader.FromMesh(knifeLeftMesh, shader); // knife right var xform_ = new Transformation(); xform_.RotateYGlobal(180f); Mesh knifeRightMesh = Obj2Mesh.FromObj(Resourcen.knife); this.knifeRight = VAOLoader.FromMesh(knifeRightMesh.Transform(xform_), shader); // fork left Mesh forkLeftMesh = Obj2Mesh.FromObj(Resourcen.fork); this.forkLeft = VAOLoader.FromMesh(forkLeftMesh, shader); // fork right Mesh forkRightMesh = Obj2Mesh.FromObj(Resourcen.fork); this.forkRight = VAOLoader.FromMesh(forkRightMesh.Transform(xform_), shader); // environment sphere var sphere = Meshes.CreateSphere(6, 4); var envSphere = sphere.SwitchTriangleMeshWinding(); this.environment = VAOLoader.FromMesh(envSphere, shader); } else if (ShaderShadowName == name) { this.shaderShadow = shader; if (ReferenceEquals(shaderObject, null)) { return; } } }