public void Render(TerrainTile tile, TerrainGlobal terrainGlobal, Matrix4 projection, Matrix4 view, Vector3 eyePos) { var boxparam = tile.GetBoxParam(); Vector3 eyePosTileCoords = Vector4.Transform(new Vector4(eyePos, 0.0f), tile.InverseModelMatrix).Xyz; GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Front); // we only want to render back-faces tile.HeightTexture.Bind(TextureUnit.Texture0); tile.ParamTexture.Bind(TextureUnit.Texture1); tile.NormalTexture.Bind(TextureUnit.Texture2); this.boundingBoxProgram .UseProgram() .SetUniform("projection_matrix", projection) .SetUniform("model_matrix", tile.ModelMatrix) .SetUniform("view_matrix", view) .SetUniform("heightTex", 0) .SetUniform("paramTex", 1) .SetUniform("normalTex", 2) .SetUniform("eyePos", eyePos) .SetUniform("nEyePos", eyePosTileCoords) .SetUniform("boxparam", boxparam); this.vertexVBO.Bind(this.boundingBoxProgram.VariableLocation("vertex")); this.boxcoordVBO.Bind(this.boundingBoxProgram.VariableLocation("in_boxcoord")); this.indexVBO.Bind(); GL.DrawElements(BeginMode.Triangles, this.indexVBO.Length, DrawElementsType.UnsignedInt, 0); Sampler.Unbind(TextureUnit.Texture0); }
public void Render(TerrainTile tile, TerrainGlobal terrainGlobal, Matrix4 projection, Matrix4 view, Vector3 eyePos) { var boxparam = tile.GetBoxParam(); //Matrix4 transform = projection * view * tile.ModelMatrix; Matrix4 transform = tile.ModelMatrix * view * projection; GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); // we only want to render front-faces tile.HeightTexture.Bind(TextureUnit.Texture0); tile.ParamTexture.Bind(TextureUnit.Texture1); tile.NormalTexture.Bind(TextureUnit.Texture2); terrainGlobal.ShadeTexture.Bind(TextureUnit.Texture3); terrainGlobal.TerrainDetailTexture.Bind(TextureUnit.Texture4); this.shader .UseProgram() .SetUniform("transform_matrix", transform) .SetUniform("heightTex", 0) .SetUniform("paramTex", 1) .SetUniform("normalTex", 2) .SetUniform("shadeTex", 3) .SetUniform("detailTex", 4) .SetUniform("eyePos", eyePos) .SetUniform("boxparam", boxparam) .SetUniform("patchSize", this.Width) .SetUniform("scale", this.Scale) .SetUniform("offset", this.Offset) .SetUniform("detailTexScale", this.DetailTexScale); this.mesh.Bind(this.shader.VariableLocation("vertex"), this.shader.VariableLocation("in_boxcoord")); this.mesh.Render(); }
public void Render(TerrainTile tile, TerrainGlobal terrainGlobal, Matrix4 projection, Matrix4 view, Vector3 eyePos) { var boxparam = tile.GetBoxParam(); GL.Disable(EnableCap.CullFace); //GL.CullFace(CullFaceMode.Back); // we only want to render front-faces tile.HeightTexture.Bind(TextureUnit.Texture0); tile.ParamTexture.Bind(TextureUnit.Texture1); tile.NormalTexture.Bind(TextureUnit.Texture2); if (this.DetailTexture != null) { this.DetailTexture.Bind(TextureUnit.Texture3); } this.shader .UseProgram() .SetUniform("projection_matrix", projection) .SetUniform("model_matrix", tile.ModelMatrix) .SetUniform("view_matrix", view) .SetUniform("heightTex", 0) .SetUniform("paramTex", 1) .SetUniform("normalTex", 2) .SetUniform("detailTex", 3) .SetUniform("eyePos", eyePos) .SetUniform("boxparam", boxparam) .SetUniform("patchSize", this.Width) .SetUniform("scale", this.Scale) .SetUniform("offset", this.Offset) .SetUniform("detailTexScale", this.DetailTexScale); //this.mesh.Bind(this.shader.VariableLocation("vertex"), this.shader.VariableLocation("in_boxcoord")); //this.mesh.Render(); this.vertexVBO.Bind(this.shader.VariableLocation("vertex")); this.boxcoordVBO.Bind(this.shader.VariableLocation("in_boxcoord")); this.indexVBO.Bind(); GL.DrawElements(BeginMode.Lines, this.indexVBO.Length, DrawElementsType.UnsignedInt, 0); //Sampler.Unbind(TextureUnit.Texture0); }
public void Render(TerrainTile tile, TerrainGlobal terrainGlobal, Matrix4 projection, Matrix4 view, Vector3 eyePos, float angleOffset, float angleExtent, float radiusOffset, float radiusExtent) { var boxparam = tile.GetBoxParam(); // undo view translation to centre mesh on viewer //Matrix4 transform = Matrix4.CreateTranslation(-eyePos.X, 0f, -eyePos.Z) * view * projection; Matrix4 transform = Matrix4.Identity * view * projection; GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); // we only want to render front-faces tile.HeightTexture.Bind(TextureUnit.Texture0); tile.ParamTexture.Bind(TextureUnit.Texture1); tile.NormalTexture.Bind(TextureUnit.Texture2); terrainGlobal.ShadeTexture.Bind(TextureUnit.Texture3); terrainGlobal.TerrainDetailTexture.Bind(TextureUnit.Texture4); this.shader .UseProgram() .SetUniform("angleOffset", angleOffset) .SetUniform("angleExtent", angleExtent) .SetUniform("radiusOffset", radiusOffset) .SetUniform("radiusExtent", radiusExtent) .SetUniform("transform_matrix", transform) .SetUniform("heightTex", 0) .SetUniform("paramTex", 1) .SetUniform("normalTex", 2) .SetUniform("shadeTex", 3) .SetUniform("detailTex", 4) .SetUniform("eyePos", eyePos) .SetUniform("boxparam", boxparam) .SetUniform("patchSize", this.Width) .SetUniform("scale", this.Scale) .SetUniform("offset", this.Offset) .SetUniform("detailTexScale", this.DetailTexScale); this.mesh.Bind(this.shader.VariableLocation("vertex"), this.shader.VariableLocation("in_boxcoord")); this.mesh.Render(); }