func drawShip(angle float32) { gl.PushMatrix() gl.Translatef(x, y, 0.0) gl.Rotatef(angle, 0.0, 0.0, 1.0) if thrust { gl.Color3f(1.0, 0.0, 0.0) gl.Begin(gl.LINE_STRIP) gl.Vertex2f(-0.75, -0.5) gl.Vertex2f(-1.75, 0) gl.Vertex2f(-0.75, 0.5) gl.End() } gl.Color3f(1.0, 1.0, 0.0) gl.Begin(gl.LINE_LOOP) gl.Vertex2f(2.0, 0.0) gl.Vertex2f(-1.0, -1.0) gl.Vertex2f(-0.5, 0.0) gl.Vertex2f(-1.0, 1.0) gl.Vertex2f(2.0, 0.0) gl.End() if shield { gl.Color3f(0.1, 0.1, 1.0) gl.Begin(gl.LINE_LOOP) for rad := 0.0; rad < 12.0; rad += 1.0 { gl.Vertex2f( float32(2.3*math.Cos(2*float64(rad)/math.Pi)+0.2), float32(2.0*math.Sin(2*float64(rad)/math.Pi))) } gl.End() } gl.PopMatrix() }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(-1.5, 0, -6) gl.Rotatef(trisAngle, 0, 1, 0) gl.Begin(gl.TRIANGLES) gl.Color3f(1, 0, 0) gl.Vertex3f(0, 1, 0) gl.Color3f(0, 1, 0) gl.Vertex3f(-1, -1, 0) gl.Color3f(0, 0, 1) gl.Vertex3f(1, -1, 0) gl.End() gl.LoadIdentity() gl.Translatef(1.5, 0, -6) gl.Rotatef(quadAngle, 1, 0, 0) gl.Color3f(0.5, 0.5, 1.0) gl.Begin(gl.QUADS) gl.Vertex3f(-1, 1, 0) gl.Vertex3f(1, 1, 0) gl.Vertex3f(1, -1, 0) gl.Vertex3f(-1, -1, 0) gl.End() trisAngle += 0.2 quadAngle -= 0.15 glfw.SwapBuffers() }
func main() { var err error if err = glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } defer glfw.Terminate() // Open window with FSAA samples (if possible). glfw.OpenWindowHint(glfw.FsaaSamples, 4) if err = glfw.OpenWindow(400, 400, 0, 0, 0, 0, 0, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } defer glfw.CloseWindow() glfw.SetWindowTitle("Aliasing Detector") glfw.SetSwapInterval(1) if samples := glfw.WindowParam(glfw.FsaaSamples); samples != 0 { fmt.Fprintf(os.Stdout, "Context reports FSAA is supported with %d samples\n", samples) } else { fmt.Fprintf(os.Stdout, "Context reports FSAA is unsupported\n") } gl.MatrixMode(gl.PROJECTION) glu.Perspective(0, 1, 0, 1) for glfw.WindowParam(glfw.Opened) == 1 { time := float32(glfw.Time()) gl.Clear(gl.COLOR_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0.5, 0, 0) gl.Rotatef(time, 0, 0, 1) gl.Enable(GL_MULTISAMPLE_ARB) gl.Color3f(1, 1, 1) gl.Rectf(-0.25, -0.25, 0.25, 0.25) gl.LoadIdentity() gl.Translatef(-0.5, 0, 0) gl.Rotatef(time, 0, 0, 1) gl.Disable(GL_MULTISAMPLE_ARB) gl.Color3f(1, 1, 1) gl.Rectf(-0.25, -0.25, 0.25, 0.25) glfw.SwapBuffers() } }
func display() { gl.Clear(gl.COLOR_BUFFER_BIT) gl.Begin(gl.TRIANGLES) gl.Color3f(0.0, 0.0, 1.0) /* blue */ gl.Vertex2i(0, 0) gl.Color3f(0.0, 1.0, 0.0) /* green */ gl.Vertex2i(200, 200) gl.Color3f(1.0, 0.0, 0.0) /* red */ gl.Vertex2i(20, 200) gl.End() gl.Flush() /* Single buffered, so needs a flush. */ }
// Here goes our drawing code func drawGLScene() { // Clear the screen and depth buffer gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // Move left 1.5 units and into the screen 6.0 units. gl.LoadIdentity() gl.Translatef(-1.5, 0.0, -6.0) gl.Rotatef(float32(rtri), 0.0, 1.0, 0.0) // Rotate the triangle on the Y axis gl.Begin(gl.TRIANGLES) // Draw triangles gl.Color3f(1.0, 0.0, 0.0) // Set The Color To Red gl.Vertex3f(0.0, 1.0, 0.0) // top gl.Color3f(0.0, 1.0, 0.0) // Set The Color To Red gl.Vertex3f(-1.0, -1.0, 0.0) // bottom left gl.Color3f(0.0, 0.0, 1.0) // Set The Color To Red gl.Vertex3f(1.0, -1.0, 0.0) // bottom right gl.End() // finish drawing the triangle // Move right 3 units gl.LoadIdentity() gl.Translatef(1.5, 0.0, -6.0) gl.Color3f(0.5, 0.5, 1.0) // Set The Color To Blue One Time Only gl.Rotatef(float32(rquad), 1.0, 0.0, 0.0) // rotate the quad on the X axis gl.Begin(gl.QUADS) // draw quads gl.Vertex3f(-1.0, 1.0, 0.0) // top left gl.Vertex3f(1.0, 1.0, 0.0) // top right gl.Vertex3f(1.0, -1.0, 0.0) // bottom right gl.Vertex3f(-1.0, -1.0, 0.0) // bottom left gl.End() // done drawing the quad // Draw to the screen sdl.GL_SwapBuffers() rtri += 0.2 // Increase The Rotation Variable For The Triangle rquad -= 0.15 // Decrease The Rotation Variable For The Quad // Gather our frames per second frames++ t := sdl.GetTicks() if t-t0 >= 5000 { seconds := (t - t0) / 1000.0 fps := frames / seconds fmt.Println(frames, "frames in", seconds, "seconds =", fps, "FPS") t0 = t frames = 0 } }
// Render stuff func Draw() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(-1.5, 0, -6) gl.Begin(gl.TRIANGLES) gl.Color3f(1, 0, 0) gl.Vertex3f(0, 1, 0) gl.Color3f(0, 1, 0) gl.Vertex3f(-1, -1, 0) gl.Color3f(0, 0, 1) gl.Vertex3f(1, -1, 0) gl.End() glfw.SwapBuffers() }
func (s *Sprite) Draw(x, y, angle, scale float32, blend bool) { gl.Enable(gl.TEXTURE_2D) gl.Disable(gl.COLOR_MATERIAL) if blend { gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.BLEND) } else { gl.Disable(gl.BLEND) gl.BlendFunc(gl.ONE, gl.ZERO) } gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(x, y, 0) gl.Rotatef(angle*360/(2*math.Pi), 0, 0, 1) gl.Scalef(scale, scale, 1) s.tex.Bind(gl.TEXTURE_2D) gl.Begin(gl.QUADS) gl.Color3f(1, 1, 1) gl.TexCoord2d(0, 0) gl.Vertex3f(-0.5*s.width, -0.5*s.height, 0) gl.TexCoord2d(1, 0) gl.Vertex3f(0.5*s.width, -0.5*s.height, 0) gl.TexCoord2d(1, 1) gl.Vertex3f(0.5*s.width, 0.5*s.height, 0) gl.TexCoord2d(0, 1) gl.Vertex3f(-0.5*s.width, 0.5*s.height, 0) gl.End() gl.Disable(gl.TEXTURE_2D) gl.Disable(gl.BLEND) }
func Draw() { gl.Clear(gl.COLOR_BUFFER_BIT) gl.PushMatrix() defer gl.PopMatrix() gl.Color4f(0, 1, 0, .5) DrawCircle(vect.Vect{ScreenSize.X / 2, ScreenSize.Y / 2}, ScreenSize.Y/2.0-5.0, false) if Settings.Paused { gl.Color3f(1, 1, 1) RenderFontAt("Paused", 20, 30) } //draw collision objects gl.PushMatrix() gl.Translated(ScreenSize.X/2, ScreenSize.Y/2, 0) gl.Scaled(Settings.Scale, Settings.Scale, 1) DrawDebugData(space) gl.PopMatrix() }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0, 0, -20+globalState.MousePos.Z*globalState.speed) gl.Rotatef(globalState.Rot.X, 1, 0, 0) gl.Rotatef(globalState.Rot.Y, 0, 1, 0) gl.Rotatef(globalState.Rot.Z, 0, 0, 1) if globalState.speed != 1 { gl.Scalef(globalState.speed, globalState.speed, globalState.speed) } gl.RenderMode(gl.RENDER) gl.Begin(gl.QUADS) for i, _ := range mesh.Faces { if colors, ok := faceColor[i]; ok { gl.Color3f(colors[0], colors[1], colors[2]) } else { faceColor[i] = make([]float32, 3) faceColor[i][0] = rand.Float32() faceColor[i][1] = rand.Float32() faceColor[i][2] = rand.Float32() gl.Color3f(faceColor[i][0], faceColor[i][1], faceColor[i][2]) } face := &mesh.Faces[i] for j, _ := range face.Vertices { var v *wfobj.Vertex if len(face.Normals) > 0 { v = &face.Normals[j] gl.Normal3f(v.X, v.Y, v.Z) } v = &face.Vertices[j] gl.Vertex3f(v.X, v.Y, v.Z) } } gl.End() gl.Finish() gl.Flush() sdl.GL_SwapBuffers() }
func DrawDebugData(space *collision.Space) { //Draw shapes for _, b := range space.Bodies { if b.Enabled == false { //Inactive gl.Color3f(.5, .8, .5) } else if b.IsStatic() { //Static gl.Color3f(1, 1, 1) } else { //Normal gl.Color3f(1, 0, 0) } for _, s := range b.Shapes { DrawShape(s) } } gl.Color3f(0, 1, 0.5) for _, b := range space.Bodies { DrawTransform(&b.Transform, 0.2) } if Settings.DrawAABBs { for _, b := range space.Bodies { gl.Color3f(.3, .7, .7) for _, s := range b.Shapes { DrawQuad(s.AABB.Lower, s.AABB.Upper, false) } } } const contactRadius = 0.2 const contactNormalScale = 0.5 for arb := space.ContactManager.ArbiterList.Arbiter; arb != nil; arb = arb.Next { for i := 0; i < arb.NumContacts; i++ { con := arb.Contacts[i] gl.Color3f(0, 0, 1) p1 := con.Position p2 := vect.Add(p1, vect.Mult(con.Normal, contactNormalScale)) //p2 := vect.Add(p1, vect.Mult(con.Normal, con.Separation)) DrawLine(p1, p2) gl.Color3f(0, 1, 0) DrawCircle(con.Position, contactRadius, false) } } if Settings.DrawTreeNodes { for _, node := range space.GetDynamicTreeNodes() { gl.Color3f(0.0, .7, .7) DrawQuad(node.AABB().Lower, node.AABB().Upper, false) } } }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Color3f(1, 1, 1) drawShapes(space) glfw.SwapBuffers() }
func drawBullets() { gl.Begin(gl.POINTS) gl.Color3f(1.0, 0.0, 1.0) for i := 0; i < MAX_BULLETS; i++ { if bullet[i].inuse { gl.Vertex2f(bullet[i].x, bullet[i].y) } } gl.End() }
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 drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // Food for coord, _ := range food { gl.LoadIdentity() gl.Scalef(0.05, 0.05, 1) gl.Translatef(float32(coord.x)-5, float32(coord.y)-5, -1) gl.Begin(gl.QUADS) gl.Color3f(0.5, float32(coord.x)/10, float32(coord.y)/10) gl.Vertex3f(0.25, 0.75, 0) gl.Vertex3f(0.75, 0.75, 0) gl.Color3f(0.3, float32(coord.x)/10-0.2, float32(coord.y)/10-0.2) gl.Vertex3f(0.75, 0.25, 0) gl.Vertex3f(0.25, 0.25, 0) gl.End() } //Snake for _, coord := range snake.coords { gl.LoadIdentity() gl.Scalef(0.05, 0.05, 1) gl.Translatef(float32(coord.x)-5, float32(coord.y)-5, -1) gl.Begin(gl.QUADS) gl.Color3f(float32(coord.y)/10, float32(coord.x)/10, 0.5) gl.Vertex3f(0, 1, 0) gl.Vertex3f(1, 1, 0) gl.Color3f(float32(coord.y)/10-0.2, float32(coord.x)/10-0.2, 0.3) gl.Vertex3f(1, 0, 0) gl.Vertex3f(0, 0, 0) gl.End() } glfw.SwapBuffers() }
// Render the mesh // The V array must be a multiple of 3 since it uses triangles to render the mesh. // If two or more triangles share the same edge the user can pass the same pointer twice func (m *Mesh) Render() { count := 0 gl.Begin(gl.TRIANGLES) for _, v := range m.V { if count%3 == 0 && count > 0 { gl.End() gl.Begin(gl.TRIANGLES) count = 0 } gl.Color3f(1, 0, 0) gl.Vertex3f(v.X, v.Y, v.Z) count++ } if count > 0 { gl.End() } }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(1.5, 0, -6) gl.Rotatef(quadAngle, 1, 1, 1) gl.Begin(gl.QUADS) for i, _ := range mesh.Faces { gl.Color3f(rand.Float32(), rand.Float32(), rand.Float32()) face := &mesh.Faces[i] for j, _ := range face.Vertices { v := &face.Vertices[j] gl.Vertex3f(v.X, v.Y, v.Z) } } gl.End() quadAngle -= 0.15 glfw.SwapBuffers() }
// Here goes our drawing code func drawGLScene() { // Clear the screen and depth buffer gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // Move left 1.5 units and into the screen 6.0 units. gl.LoadIdentity() gl.Translatef(-1.5, 0.0, -6.0) gl.Rotatef(float32(rtri), 0.0, 1.0, 0.0) // Rotate the triangle on the Y axis gl.Begin(gl.TRIANGLES) // Draw triangles gl.Color3f(1.0, 0.0, 0.0) /* Red */ gl.Vertex3f(0.0, 1.0, 0.0) /* Top Of Triangle (Front) */ gl.Color3f(0.0, 1.0, 0.0) /* Green */ gl.Vertex3f(-1.0, -1.0, 1.0) /* Left Of Triangle (Front) */ gl.Color3f(0.0, 0.0, 1.0) /* Blue */ gl.Vertex3f(1.0, -1.0, 1.0) /* Right Of Triangle (Front) */ gl.Color3f(1.0, 0.0, 0.0) /* Red */ gl.Vertex3f(0.0, 1.0, 0.0) /* Top Of Triangle (Right) */ gl.Color3f(0.0, 0.0, 1.0) /* Blue */ gl.Vertex3f(1.0, -1.0, 1.0) /* Left Of Triangle (Right) */ gl.Color3f(0.0, 1.0, 0.0) /* Green */ gl.Vertex3f(1.0, -1.0, -1.0) /* Right Of Triangle (Right) */ gl.Color3f(1.0, 0.0, 0.0) /* Red */ gl.Vertex3f(0.0, 1.0, 0.0) /* Top Of Triangle (Back) */ gl.Color3f(0.0, 1.0, 0.0) /* Green */ gl.Vertex3f(1.0, -1.0, -1.0) /* Left Of Triangle (Back) */ gl.Color3f(0.0, 0.0, 1.0) /* Blue */ gl.Vertex3f(-1.0, -1.0, -1.0) /* Right Of Triangle (Back) */ gl.Color3f(1.0, 0.0, 0.0) /* Red */ gl.Vertex3f(0.0, 1.0, 0.0) /* Top Of Triangle (Left) */ gl.Color3f(0.0, 0.0, 1.0) /* Blue */ gl.Vertex3f(-1.0, -1.0, -1.0) /* Left Of Triangle (Left) */ gl.Color3f(0.0, 1.0, 0.0) /* Green */ gl.Vertex3f(-1.0, -1.0, 1.0) /* Right Of Triangle (Left) */ gl.End() // finish drawing the triangle // Move right 3 units gl.LoadIdentity() gl.Translatef(1.5, 0.0, -7.0) gl.Rotatef(float32(rquad), 1.0, 1.0, 1.0) // rotate the quad on the X axis gl.Begin(gl.QUADS) // draw quads gl.Color3f(0.0, 1.0, 0.0) // Set The Color To Green gl.Vertex3f(1.0, 1.0, -1.0) // Top Right Of The Quad (Top) gl.Vertex3f(-1.0, 1.0, -1.0) // Top Left Of The Quad (Top) gl.Vertex3f(-1.0, 1.0, 1.0) // Bottom Left Of The Quad (Top) gl.Vertex3f(1.0, 1.0, 1.0) // Bottom Right Of The Quad (Top) gl.Color3f(1.0, 0.5, 0.0) // Set The Color To Orange gl.Vertex3f(1.0, -1.0, 1.0) // Top Right Of The Quad (Bottom) gl.Vertex3f(-1.0, -1.0, 1.0) // Top Left Of The Quad (Bottom) gl.Vertex3f(-1.0, -1.0, -1.0) // Bottom Left Of The Quad (Bottom) gl.Vertex3f(1.0, -1.0, -1.0) // Bottom Right Of The Quad (Bottom) gl.Color3f(1.0, 0.0, 0.0) // Set The Color To Red gl.Vertex3f(1.0, 1.0, 1.0) // Top Right Of The Quad (Front) gl.Vertex3f(-1.0, 1.0, 1.0) // Top Left Of The Quad (Front) gl.Vertex3f(-1.0, -1.0, 1.0) // Bottom Left Of The Quad (Front) gl.Vertex3f(1.0, -1.0, 1.0) // Bottom Right Of The Quad (Front) gl.Color3f(1.0, 1.0, 0.0) // Set The Color To Yellow gl.Vertex3f(1.0, -1.0, -1.0) // Bottom Left Of The Quad (Back) gl.Vertex3f(-1.0, -1.0, -1.0) // Bottom Right Of The Quad (Back) gl.Vertex3f(-1.0, 1.0, -1.0) // Top Right Of The Quad (Back) gl.Vertex3f(1.0, 1.0, -1.0) // Top Left Of The Quad (Back) gl.Color3f(0.0, 0.0, 1.0) // Set The Color To Blue gl.Vertex3f(-1.0, 1.0, 1.0) // Top Right Of The Quad (Left) gl.Vertex3f(-1.0, 1.0, -1.0) // Top Left Of The Quad (Left) gl.Vertex3f(-1.0, -1.0, -1.0) // Bottom Left Of The Quad (Left) gl.Vertex3f(-1.0, -1.0, 1.0) // Bottom Right Of The Quad (Left) gl.Color3f(1.0, 0.0, 1.0) // Set The Color To Violet gl.Vertex3f(1.0, 1.0, -1.0) // Top Right Of The Quad (Right) gl.Vertex3f(1.0, 1.0, 1.0) // Top Left Of The Quad (Right) gl.Vertex3f(1.0, -1.0, 1.0) // Bottom Left Of The Quad (Right) gl.Vertex3f(1.0, -1.0, -1.0) // Bottom Right Of The Quad (Right) gl.End() // done drawing the quad // Draw to the screen sdl.GL_SwapBuffers() rtri += 0.2 // Increase The Rotation Variable For The Triangle rquad -= 0.15 // Decrease The Rotation Variable For The Quad // Gather our frames per second frames++ t := sdl.GetTicks() if t-t0 >= 5000 { seconds := (t - t0) / 1000.0 fps := frames / seconds fmt.Println(frames, "frames in", seconds, "seconds =", fps, "FPS") t0 = t frames = 0 } }