func (f frame) Render(w, h, d float64) { // Draw a wireframe around the arena gl.Color4ub(255, 255, 255, 31) gl.LineWidth(2.0) gl.Begin(gl.LINE_STRIP) gl.Vertex3d(0, 0, 0) gl.Vertex3d(w, 0, 0) gl.Vertex3d(w, h, 0) gl.Vertex3d(0, h, 0) gl.Vertex3d(0, 0, 0) gl.Vertex3d(0, 0, d) gl.Vertex3d(0, h, d) gl.Vertex3d(w, h, d) gl.Vertex3d(w, 0, d) gl.Vertex3d(0, 0, d) gl.End() gl.Begin(gl.LINES) gl.Vertex3d(0, h, 0) gl.Vertex3d(0, h, d) gl.Vertex3d(w, 0, 0) gl.Vertex3d(w, 0, d) gl.Vertex3d(w, h, 0) gl.Vertex3d(w, h, d) gl.End() // Render the page. if f.renderer != nil { f.renderer.Render(w, h, d) } }
func main() { glut.InitDisplayMode(glut.SINGLE | glut.RGB) glut.InitWindowSize(465, 250) glut.CreateWindow("GLUT bitmap & stroke font example") gl.ClearColor(1.0, 1.0, 1.0, 1.0) gl.Color3f(0, 0, 0) gl.LineWidth(3.0) glut.DisplayFunc(display) glut.ReshapeFunc(reshape) glut.MainLoop() }
func (world *World) Render(w, h, d float64) { gl.PushMatrix() gl.Scaled(w, h, d) // Draw the goal gl.Begin(gl.POINTS) gl.Color3ub(255, 0, 0) gl.PointSize(6) gl.Vertex2d(world.goal.X, world.goal.Y) gl.End() // Draw the obstacles gl.Color4ub(0, 0, 255, 63) world.obstacles.Render() // Draw the percept gl.Color4ub(0, 255, 0, 127) gl.LineWidth(1.5) gl.Begin(gl.LINES) for _, pt := range world.percept { gl.Vertex2d(world.robot.X, world.robot.Y) gl.Vertex2d(world.robot.X+pt.X, world.robot.Y+pt.Y) } gl.End() // Draw the map gl.Color3ub(0, 0, 255) gl.LineWidth(2) // FIXME // Draw the robot gl.Color3ub(0, 255, 0) gl.PointSize(4) gl.Begin(gl.POINTS) gl.Vertex2d(world.robot.X, world.robot.Y) gl.End() gl.PopMatrix() }
func (v *Voronoi) Render(w, h, d float64) { gl.PushMatrix() gl.Scaled(w, h, 1) rng := rand.New(rand.NewSource(42)) rng.Seed(42) // Draw fill colors for _, wall := range v.cellWalls { gl.Color3ub( uint8(100+rng.Int31n(128)), uint8(100+rng.Int31n(128)), uint8(100+rng.Int31n(128))) gl.Begin(gl.TRIANGLE_FAN) for _, p := range wall { if p != nil && boundedPoint(p) { gl.Vertex2d(p.X, p.Y) } } gl.End() } // Draw lines gl.LineWidth(1.5) gl.Color3ub(0, 128, 0) gl.Begin(gl.LINES) for _, edge := range v.edges { if boundedEdge(edge) { gl.Vertex2d(edge.Start.X, edge.Start.Y) gl.Vertex2d(edge.End.X, edge.End.Y) } } gl.End() // Draw points. gl.PointSize(2) gl.Color3ub(255, 255, 255) gl.Begin(gl.POINTS) for _, point := range v.points { gl.Vertex2d(point.X, point.Y) } gl.End() gl.PopMatrix() }
func (s *Scatter) Render(w, h, d float64) { gl.PushMatrix() min, max := s.points.Bounds() dim := max.Sub(min) gl.Scaled(w/dim.X, h/dim.Y, d/dim.Z) gl.Translated(-min.X, -min.Y, -min.Z) // Draw axes: red X, green Y, blue Z. gl.Begin(gl.LINES) gl.LineWidth(1.5) gl.Color3ub(255, 0, 0) gl.Vertex3d(min.X, min.Y, min.Z) gl.Vertex3d(max.X, min.Y, min.Z) gl.Color3ub(0, 255, 0) gl.Vertex3d(min.X, min.Y, min.Z) gl.Vertex3d(min.X, max.Y, min.Z) gl.Color3ub(0, 0, 255) gl.Vertex3d(min.X, min.Y, min.Z) gl.Vertex3d(min.X, min.Y, max.Z) gl.End() // Draw 2d plots on the XY, YZ, and XZ planes. gl.PointSize(10.0) gl.Begin(gl.POINTS) // X plot gl.Color4ub(255, 0, 0, 31) for _, p := range s.points { gl.Vertex3d(p.X, min.Y, min.Z) } // Y plot gl.Color4ub(0, 255, 0, 31) for _, p := range s.points { gl.Vertex3d(min.X, p.Y, min.Z) } // Z plot gl.Color4ub(0, 0, 255, 31) for _, p := range s.points { gl.Vertex3d(min.X, min.Y, p.Z) } // XY plot gl.Color4ub(255, 255, 0, 63) for _, p := range s.points { gl.Vertex3d(p.X, p.Y, min.Z) } // YZ plot gl.Color4ub(0, 255, 255, 63) for _, p := range s.points { gl.Vertex3d(min.X, p.Y, p.Z) } // XZ plot gl.Color4ub(255, 0, 255, 63) for _, p := range s.points { gl.Vertex3d(p.X, min.Y, p.Z) } // XYZ plot gl.Color4ub(255, 255, 255, 128) for _, p := range s.points { gl.Vertex3d(p.X, p.Y, p.Z) } gl.End() gl.PopMatrix() }