func Cylinder(r, h gl.Float, slices int, hollow, solid bool) { res := 2 * math.Pi / float64(slices) mode := gl.LINE_LOOP if solid { mode = gl.QUADS } gl.Begin(gl.Enum(mode)) for a := 0.0; a < 2*math.Pi; a += res { gl.Normal3f(gl.Float(math.Cos(a)), gl.Float(math.Sin(a)), 0) gl.Vertex3f(r*gl.Float(math.Cos(a)), r*gl.Float(math.Sin(a)), 0) gl.Vertex3f(r*gl.Float(math.Cos(a)), r*gl.Float(math.Sin(a)), h) a += res gl.Vertex3f(r*gl.Float(math.Cos(a)), r*gl.Float(math.Sin(a)), h) gl.Vertex3f(r*gl.Float(math.Cos(a)), r*gl.Float(math.Sin(a)), 0) } gl.End() if !hollow { // X Y plane if h < 0 { gl.Normal3f(0, 0, 1) } else { gl.Normal3f(0, 0, -1) } Circle(r, slices, solid) // Top (or bottom) if h < 0 { gl.Normal3f(0, 0, -1) } else { gl.Normal3f(0, 0, 1) } gl.Translatef(0, 0, h) Circle(r, slices, solid) } }
// Set the GL modelview matrix to match view position and orientation. func UpdateViewpos() { gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(gl.Float(Viewpos[0]), gl.Float(Viewpos[1]), gl.Float(Viewpos[2])) gl.Rotatef(gl.Float(Rot[0]*2), 1, 0, 0) gl.Rotatef(gl.Float(Rot[1]*2), 0, 1, 0) gl.Rotatef(gl.Float(Rot[2]*2), 0, 0, 1) }
func DrawStarTex(t *data.Star) { // Find the center point of the texture to rotate around xav := (t.X1 + t.X2) / 2 yav := (t.Y1 + t.Y2) / 2 //Translate there, rotate, translate back gl.MatrixMode(gl.MODELVIEW) gl.Translatef(xav, yav, 0) gl.Rotatef(gl.Float(t.Theta), 0, 0, 1) gl.Translatef(-xav, -yav, 0) //Bind our texture to be drawn by id gl.Color3f(1, 1, 1) gl.Enable(gl.TEXTURE_2D) gl.BindTexture(gl.TEXTURE_2D, t.TexId) // Draw a rectangle with the texture stretched to the corners gl.Begin(gl.QUADS) // Stretch the texture to its 4 corners. gl.TexCoord2d(0, 0) gl.Vertex2f(t.X1, t.Y1) gl.TexCoord2d(0, 1) gl.Vertex2f(t.X1, t.Y2) gl.TexCoord2d(1, 1) gl.Vertex2f(t.X2, t.Y2) gl.TexCoord2d(1, 0) gl.Vertex2f(t.X2, t.Y1) gl.End() // Unbind the texture in case something else wants to draw gl.Disable(gl.TEXTURE_2D) // Reset the matrix gl.LoadIdentity() }
func renderPts() { gl.MatrixMode(gl.MODELVIEW) for i := minPt; i <= maxPt; i++ { if Pts[i].is == false { continue } pt := &Pts[i] gl.PopMatrix() gl.PushMatrix() gl.Translatef(gl.Float(pt.X), gl.Float(pt.Y), -gl.Float(pt.Z)) gl.Scalef(gl.Float(pt.R*2), gl.Float(pt.R*2), gl.Float(pt.R*2)) gl.DrawArrays(gl.QUADS, 0, 24) } }
func drawScene() { fps() gl.Clear(gl.COLOR_BUFFER_BIT) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() if input.Zoom > 0 { gl.Ortho(0, gl.Double(float64(*flagSize)/input.Zoom), gl.Double(float64(*flagSize)/input.Zoom), 0, -1, 1.0) } gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(gl.Float(input.TransX*1), gl.Float(input.TransY*1), 0) drawGrid() drawCells() }
// draw draws the triangle. func draw() { gl.ClearColor(0.3, 0.3, 0.3, 0.0) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.ShadeModel(gl.SMOOTH) gl.LoadIdentity() gl.Translatef(-15.0, -15.0, 0.0) gl.Begin(gl.TRIANGLES) gl.Color3f(1.0, 0.0, 0.0) gl.Vertex2f(0.0, 0.0) gl.Color3f(0.0, 1.0, 0.0) gl.Vertex2f(30.0, 0.0) gl.Color3f(0.0, 0.0, 1.0) gl.Vertex2f(0.0, 30.0) gl.End() win.SwapBuffers() }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(0, 0, -3.0) gl.Rotatef(rotx, 1, 0, 0) gl.Rotatef(roty, 0, 1, 0) rotx += 0.5 roty += 0.5 gl.BindTexture(gl.TEXTURE_2D, texture) gl.Color4f(1, 1, 1, 1) gl.Begin(gl.QUADS) gl.Normal3f(0, 0, 1) gl.TexCoord2f(0, 0) gl.Vertex3f(-1, -1, 1) gl.TexCoord2f(1, 0) gl.Vertex3f(1, -1, 1) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, 1) gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, 1) gl.Normal3f(0, 0, -1) gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, -1) gl.TexCoord2f(1, 1) gl.Vertex3f(-1, 1, -1) gl.TexCoord2f(0, 1) gl.Vertex3f(1, 1, -1) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, -1) gl.Normal3f(0, 1, 0) gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, -1) gl.TexCoord2f(0, 0) gl.Vertex3f(-1, 1, 1) gl.TexCoord2f(1, 0) gl.Vertex3f(1, 1, 1) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, -1) gl.Normal3f(0, -1, 0) gl.TexCoord2f(1, 1) gl.Vertex3f(-1, -1, -1) gl.TexCoord2f(0, 1) gl.Vertex3f(1, -1, -1) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, 1) gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, 1) gl.Normal3f(1, 0, 0) gl.TexCoord2f(1, 0) gl.Vertex3f(1, -1, -1) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, -1) gl.TexCoord2f(0, 1) gl.Vertex3f(1, 1, 1) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, 1) gl.Normal3f(-1, 0, 0) gl.TexCoord2f(0, 0) gl.Vertex3f(-1, -1, -1) gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, 1) gl.TexCoord2f(1, 1) gl.Vertex3f(-1, 1, 1) gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, -1) gl.End() }