func (self *Picker) DrawPlayerItems(t int64) { gl.PushMatrix() gl.LoadIdentity() for i := 0; i < 5; i++ { item := ThePlayer.equippedItems[i] if item != ITEM_NONE { angle := -(float64(i) + 1.5) * math.Pi / 4 gl.LoadIdentity() x := self.x - self.actionItemRadius*float32(math.Sin(angle)) y := self.y + self.actionItemRadius*float32(math.Cos(angle)) gl.Translatef(x, y, 0) gl.Rotatef(360*float32(math.Sin(float64(t)/1e10+float64(i))), 1.0, 0.0, 0.0) gl.Rotatef(360*float32(math.Cos(float64(t)/1e10+float64(i))), 0.0, 1.0, 0.0) gl.Rotatef(360*float32(math.Sin(float64(t)/1e10+float64(i))), 0.0, 0.0, 1.0) gl.Scalef(blockscale, blockscale, blockscale) gVertexBuffer.Reset() TerrainCube(gVertexBuffer, 0, 0, 0, [18]uint16{}, item, FACE_NONE) gVertexBuffer.RenderDirect(false) gl.LoadIdentity() gl.Translatef(x-17*PIXEL_SCALE, y-19*PIXEL_SCALE, 20) consoleFont.Print(fmt.Sprintf("%d", ThePlayer.inventory[item])) } } 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 (self *Console) Draw(t int64) { gl.MatrixMode(gl.MODELVIEW) gl.PushMatrix() gl.LoadIdentity() gl.Disable(gl.DEPTH_TEST) gl.Disable(gl.LIGHTING) gl.Disable(gl.LIGHT0) gl.Disable(gl.LIGHT1) h := float32(consoleFont.height) * PIXEL_SCALE margin := float32(3.0) * PIXEL_SCALE consoleHeight := 3 * h gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Color4ub(0, 0, 0, 208) gl.Begin(gl.QUADS) gl.Vertex2f(float32(viewport.lplane), float32(viewport.bplane)+consoleHeight+margin*2) // Bottom Left Of The Texture and Quad gl.Vertex2f(float32(viewport.rplane), float32(viewport.bplane)+consoleHeight+margin*2) // Bottom Right Of The Texture and Quad gl.Vertex2f(float32(viewport.rplane), float32(viewport.bplane)) // Top Right Of The Texture and Quad gl.Vertex2f(float32(viewport.lplane), float32(viewport.bplane)) // Top Left Of The Texture and Quad gl.End() gl.Translatef(float32(viewport.lplane)+margin, float32(viewport.bplane)+consoleHeight+margin-h, 0) consoleFont.Print(fmt.Sprintf("FPS: %5.2f V: %d (%d) CH: %d M: %d", self.fps, self.vertices, self.culledVertices, len(TheWorld.chunks), len(TheWorld.mobs))) gl.LoadIdentity() gl.Translatef(float32(viewport.lplane)+margin, float32(viewport.bplane)+consoleHeight+margin-2*h, 0) consoleFont.Print(fmt.Sprintf("X: %5.2f Y: %4.2f Z: %5.2f H: %5.2f (%s) D: %0.1f (%d)", ThePlayer.position[XAXIS], ThePlayer.position[YAXIS], ThePlayer.position[ZAXIS], ThePlayer.heading, HeadingToCompass(ThePlayer.heading), ThePlayer.distanceTravelled, ThePlayer.distanceFromStart)) gl.LoadIdentity() gl.Translatef(float32(viewport.lplane)+margin, float32(viewport.bplane)+consoleHeight+margin-3*h, 0) numgc := uint32(0) avggc := float64(0) var last3 [3]float64 if self.mem.NumGC > 3 { numgc = self.mem.NumGC avggc = float64(self.mem.PauseTotalNs) / float64(self.mem.NumGC) / 1e6 index := int(numgc) - 1 if index > 255 { index = 255 } last3[0] = float64(self.mem.PauseNs[index]) / 1e6 last3[1] = float64(self.mem.PauseNs[index-1]) / 1e6 last3[2] = float64(self.mem.PauseNs[index-2]) / 1e6 } consoleFont.Print(fmt.Sprintf("Mem: %.1f/%.1f GC: %.1fms [%d: %.1f, %.1f, %.1f] ChGen: %.1fms | Sc: %.1f TOD: %.1f", float64(self.mem.Alloc)/(1024*1024), float64(self.mem.Sys)/(1024*1024), avggc, numgc, last3[0], last3[1], last3[2], float64(self.chunkGenerationTime)/1e6, viewport.scale, timeOfDay)) gl.PopMatrix() }
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() } }
// 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 } }
func (self *Wolf) Draw(center Vectorf, selectedBlockFace *BlockFace) { gl.PushMatrix() gl.Translatef(float32(self.position[XAXIS]), float32(self.position[YAXIS]), float32(self.position[ZAXIS])) gl.Rotated(self.Heading(), 0.0, 1.0, 0.0) WolfModel.GLDraw() gl.PopMatrix() }
func display() { gl.Clear(gl.COLOR_BUFFER_BIT) bitmap_output(40, 35, "This is written in a GLUT bitmap font.", glut.BITMAP_TIMES_ROMAN_24) bitmap_output(30, 210, "More bitmap text is a fixed 9 by 15 font.", glut.BITMAP_9_BY_15) bitmap_output(70, 240, " Helvetica is yet another bitmap font.", glut.BITMAP_HELVETICA_18) gl.MatrixMode(gl.PROJECTION) gl.PushMatrix() gl.LoadIdentity() glu.Perspective(40.0, 1.0, 0.1, 20.0) gl.MatrixMode(gl.MODELVIEW) gl.PushMatrix() glu.LookAt(0.0, 0.0, 4.0, /* eye is at (0,0,30) */ 0.0, 0.0, 0.0, /* center is at (0,0,0) */ 0.0, 1.0, 0.0) /* up is in postivie Y direction */ gl.PushMatrix() gl.Translatef(0, 0, -4) gl.Rotatef(50, 0, 1, 0) stroke_output(-2.5, 1.1, " This is written in a", glut.STROKE_ROMAN) stroke_output(-2.5, 0, " GLUT stroke font.", glut.STROKE_ROMAN) stroke_output(-2.5, -1.1, "using 3D perspective.", glut.STROKE_ROMAN) gl.PopMatrix() gl.MatrixMode(gl.MODELVIEW) gl.PopMatrix() gl.MatrixMode(gl.PROJECTION) gl.PopMatrix() gl.MatrixMode(gl.MODELVIEW) gl.Flush() }
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 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 reshape(w, h int) { gl.Viewport(0, 0, w, h) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, float64(w), 0, float64(h), -1, 1) gl.Scalef(1, -1, 1) gl.Translatef(0, float32(-h), 0) gl.MatrixMode(gl.MODELVIEW) }
func stroke_output(x, y float32, str string, font glut.StrokeFont) { gl.PushMatrix() gl.Translatef(x, y, 0) gl.Scalef(0.005, 0.005, 0.005) for _, ch := range str { font.Character(ch) } gl.PopMatrix() }
/* new window size or exposure */ func reshape(width int, height int) { h := float64(height) / float64(width) gl.Viewport(0, 0, width, height) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Frustum(-1.0, 1.0, -h, h, 5.0, 60.0) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(0.0, 0.0, -40.0) }
// 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.Begin(gl.TRIANGLES) // Draw triangles gl.Vertex3f(0.0, 1.0, 0.0) // top gl.Vertex3f(-1.0, -1.0, 0.0) // bottom left gl.Vertex3f(1.0, -1.0, 0.0) // bottom right gl.End() // finish drawing the triangle // Move right 3 units gl.Translatef(3.0, 0.0, 0.0) 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() // 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 } }
func (self *Picker) DrawPlayerItems(t int64, drawQuantities bool) { gl.PushMatrix() gl.LoadIdentity() for i := 0; i < 5; i++ { itemid := ThePlayer.equippedItems[i] if itemid != ITEM_NONE { angle := -(float64(i) + 1.5) * math.Pi / 4 gl.LoadIdentity() x := self.x - self.actionItemRadius*float32(math.Sin(angle)) y := self.y + self.actionItemRadius*float32(math.Cos(angle)) gl.Translatef(x, y, 0) gl.Rotated(90, 1.0, 0.0, 0.0) gl.Rotated(30*math.Sin(float64(t)/1e9+float64(itemid)/2), 0.0, 1.0, 0.0) gl.Scalef(BLOCK_SCALE, BLOCK_SCALE, BLOCK_SCALE) gGuiBuffer.Reset() if itemid < 256 { TerrainCube(gGuiBuffer, Vectori{}, [18]BlockId{BLOCK_DIRT, BLOCK_DIRT, BLOCK_DIRT, BLOCK_DIRT, BLOCK_AIR, BLOCK_DIRT, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR, BLOCK_AIR}, NewBlockDefault(BlockId(itemid)), FACE_NONE) } else { RenderItemFlat(gGuiBuffer, Vectori{}, BlockId(itemid)) } gGuiBuffer.RenderDirect(false) if drawQuantities { gl.LoadIdentity() gl.Translatef(x-17*PIXEL_SCALE, y-19*PIXEL_SCALE, 20) consoleFont.Print(fmt.Sprintf("%d", ThePlayer.inventory[itemid])) } } } gl.PopMatrix() }
func reshape(w, h int) { /* Because Gil specified "screen coordinates" (presumably with an upper-left origin), this short bit of code sets up the coordinate system to correspond to actual window coodrinates. This code wouldn't be required if you chose a (more typical in 3D) abstract coordinate system. */ gl.Viewport(0, 0, w, h) /* Establish viewing area to cover entire window. */ gl.MatrixMode(gl.PROJECTION) /* Start modifying the projection matrix. */ gl.LoadIdentity() /* Reset project matrix. */ gl.Ortho(0, float64(w), 0, float64(h), -1, 1) /* Map abstract coords directly to window coords. */ gl.Scalef(1, -1, 1) /* Invert Y axis so increasing Y goes down. */ gl.Translatef(0, float32(-h), 0) /* Shift origin up to upper-left corner. */ }
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 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) render() { gl.Translatef(float32(s.X), float32(s.Y), float32(s.Z)) gl.Rotatef(90.0, 1.0, 0.0, 0.0) s.tex.Bind(gl.TEXTURE_2D) gl.Begin(gl.QUADS) gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-s.width/2.0, -s.height/2.0, 0.0) gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(s.width/2.0, -s.height/2.0, 0.0) gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(s.width/2.0, s.height/2.0, 0.0) gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-s.width/2.0, s.height/2.0, 0.0) gl.End() s.tex.Unbind(gl.TEXTURE_2D) }
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() }
// Here goes our drawing code func drawGLScene(sector Sector) { xtrans := gl.GLfloat(-xpos) ztrans := gl.GLfloat(-zpos) ytrans := gl.GLfloat(-walkbias - 0.25) scenroty := gl.GLfloat(360.0 - yrot) // Clear the screen and depth buffer gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // reset the view gl.LoadIdentity() // Rotate up and down to look up and down gl.Rotatef(float32(lookupdown), 1.0, 0.0, 0.0) // Rotate depending on direction player is facing gl.Rotatef(float32(scenroty), 0.0, 1.0, 0.0) // translate the scene based on player position gl.Translatef(float32(xtrans), float32(ytrans), float32(ztrans)) gl.BindTexture(gl.TEXTURE_2D, uint(textures[filter])) for _, vertices := range sector { gl.Begin(gl.TRIANGLES) for _, triangle := range *vertices { gl.Normal3f(0.0, 0.0, 1.0) gl.TexCoord2f(float32(triangle.u), float32(triangle.v)) gl.Vertex3f(float32(triangle.x), float32(triangle.y), float32(triangle.z)) } gl.End() } // Draw to the screen sdl.GL_SwapBuffers() // 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 } }
func initGl() { h := float64(height) / float64(width) gl.Viewport(0, 0, width, height) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Frustum(-1.0, 1.0, -h, h, 5.0, 60.0) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(0.0, 0.0, -6.0) gl.EnableClientState(gl.VERTEX_ARRAY) gl.EnableClientState(gl.TEXTURE_COORD_ARRAY) gl.VertexPointer(3, 0, &vertices[0][0]) gl.TexCoordPointer(2, 0, &texCoords[0][0]) }
func (self *Font) Print(str string) { for _, ch := range str { self.textures[ch].Bind(gl.TEXTURE_2D) h := float32(self.height) * PIXEL_SCALE w := float32(self.widths[ch]) * PIXEL_SCALE gl.Color4ub(255, 255, 255, 255) gl.Begin(gl.QUADS) gl.TexCoord2d(0, 0) gl.Vertex2f(0, 0) // Bottom Left Of The Texture and Quad gl.TexCoord2d(1, 0) gl.Vertex2f(w, 0) // Bottom Right Of The Texture and Quad gl.TexCoord2d(1, 1) gl.Vertex2f(w, h) // Top Right Of The Texture and Quad gl.TexCoord2d(0, 1) gl.Vertex2f(0, h) // Top Left Of The Texture and Quad gl.End() gl.Translatef(w, 0, 0) self.textures[ch].Unbind(gl.TEXTURE_2D) } }
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() }
func reshape(width, height int) { shift, aspect := 0, float64(width)/float64(height) if aspect > 2 { aspect = 2 shift = width/2 - height width = height * 2 } gl.Viewport(shift, 0, width, height) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.COLOR_MATERIAL) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() glu.Perspective(45, aspect, NEAR_Z, FAR_Z) gl.Enable(gl.LIGHTING) gl.Lightfv(gl.LIGHT0, gl.POSITION, []float32{-2, -3, 5, 0}) gl.Lightfv(gl.LIGHT0, gl.AMBIENT, []float32{0.1, 0.1, 0.2, 1}) gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, []float32{0.4, 0.35, 0.2, 1}) gl.Lightfv(gl.LIGHT0, gl.SPECULAR, []float32{1, 1, 1, 1}) gl.Enable(gl.LIGHT0) gl.Rotatef(-30, 1, 0, 0) gl.Translatef(0, 0, -5) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Lightfv(gl.LIGHT1, gl.AMBIENT, []float32{0, 0, 0, 1}) gl.Lightfv(gl.LIGHT1, gl.DIFFUSE, []float32{0.4, 0.4, 0.4, 1}) gl.Lightfv(gl.LIGHT1, gl.SPECULAR, []float32{1, 1, 1, 1}) gl.Enable(gl.LIGHT1) }
func (self *Wolf) Draw(center Vectorf, selectedBlockFace *BlockFace) { pos := Vectorf{self.position[XAXIS], self.position[YAXIS], self.position[ZAXIS]} gl.PushMatrix() gl.Translated(self.position[XAXIS], self.position[YAXIS], self.position[ZAXIS]) gl.Rotated(self.Heading(), 0.0, 1.0, 0.0) // Translate to top of ground block gl.Translatef(0.0, -0.5, 0.0) pos[YAXIS] += -0.5 headHeight := 0.25 headWidth := headHeight headDepth := headHeight * 2.0 neckHeight := 0.0 torsoWidth := 1.5 * headHeight torsoHeight := 1.5 * headHeight torsoDepth := 5 * headHeight legHeight := 5*headHeight - torsoHeight - neckHeight - headHeight legWidth := (torsoWidth - 0.25*headHeight) / 2 legDepth := legWidth var legAngle, step float64 horzSpeed := self.velocity[XAXIS]*self.velocity[XAXIS] + self.velocity[ZAXIS]*self.velocity[ZAXIS] legAngle = math.Sin(self.walkSequence) * (15 + 55*horzSpeed/(self.sprintSpeed*self.sprintSpeed)) headAngle := 30.0 // torsoAngle = -math.Abs(legAngle / 6) step = headHeight * 0.3 * math.Pow(math.Sin(self.walkSequence), 2) gl.Translated(0.0, step, 0) pos[YAXIS] += step // Translate to top of leg // Translate to centre of front left leg gl.Translated(0.0, legHeight, 0) pos[YAXIS] += legHeight legDepthOffset := torsoDepth/2 - legWidth/2 legHeightOffset := -legHeight / 2 legWidthOffset := (legWidth + 0.25*headHeight) / 2 // Translate to centre of front left leg gl.Translated(legDepthOffset, 0, legWidthOffset) gl.Rotated(legAngle, 0.0, 0.0, 1.0) gl.Translated(0, legHeightOffset, 0) pos[XAXIS] += legDepthOffset pos[YAXIS] += legHeightOffset pos[ZAXIS] += legWidthOffset Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], FACE_NONE) pos[XAXIS] -= legDepthOffset pos[YAXIS] -= legHeightOffset pos[ZAXIS] -= legWidthOffset gl.Translated(0, -legHeightOffset, 0) gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Translated(-legDepthOffset, 0, -legWidthOffset) legWidthOffset = -legWidthOffset if horzSpeed <= self.walkingSpeed*self.walkingSpeed { legAngle = -legAngle } gl.Translated(legDepthOffset, 0, legWidthOffset) gl.Rotated(legAngle, 0.0, 0.0, 1.0) gl.Translated(0, legHeightOffset, 0) pos[XAXIS] += legDepthOffset pos[YAXIS] += legHeightOffset pos[ZAXIS] += legWidthOffset Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], FACE_NONE) pos[XAXIS] -= legDepthOffset pos[YAXIS] -= legHeightOffset pos[ZAXIS] -= legWidthOffset gl.Translated(0, -legHeightOffset, 0) gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Translated(-legDepthOffset, 0, -legWidthOffset) legDepthOffset = -legDepthOffset legWidthOffset = -legWidthOffset if horzSpeed > self.walkingSpeed*self.walkingSpeed { legAngle = -legAngle } gl.Translated(legDepthOffset, 0, legWidthOffset) gl.Rotated(legAngle, 0.0, 0.0, 1.0) gl.Translated(0, legHeightOffset, 0) pos[XAXIS] += legDepthOffset pos[YAXIS] += legHeightOffset pos[ZAXIS] += legWidthOffset Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], FACE_NONE) pos[XAXIS] -= legDepthOffset pos[YAXIS] -= legHeightOffset pos[ZAXIS] -= legWidthOffset gl.Translated(0, -legHeightOffset, 0) gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Translated(-legDepthOffset, 0, -legWidthOffset) legWidthOffset = -legWidthOffset if horzSpeed <= self.walkingSpeed*self.walkingSpeed { legAngle = -legAngle } gl.Translated(legDepthOffset, 0, legWidthOffset) gl.Rotated(legAngle, 0.0, 0.0, 1.0) gl.Translated(0, legHeightOffset, 0) pos[XAXIS] += legDepthOffset pos[YAXIS] += legHeightOffset pos[ZAXIS] += legWidthOffset Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], textures[TEXTURE_WOLF_LEG], FACE_NONE) pos[XAXIS] -= legDepthOffset pos[YAXIS] -= legHeightOffset pos[ZAXIS] -= legWidthOffset gl.Translated(0, -legHeightOffset, 0) gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Translated(-legDepthOffset, 0, -legWidthOffset) //gl.Rotated(torsoAngle, 0.0, 0.0, 1.0) // Translate to centre of torso gl.Translated(0.0, torsoHeight/2, 0.0) pos[YAXIS] += torsoHeight / 2 Cuboid(pos, torsoWidth, torsoHeight, torsoDepth, textures[TEXTURE_WOLF_TORSO_FRONT], textures[TEXTURE_WOLF_TORSO_BACK], textures[TEXTURE_WOLF_TORSO_SIDE], textures[TEXTURE_WOLF_TORSO_SIDE], textures[TEXTURE_WOLF_TORSO_TOP], textures[TEXTURE_WOLF_TORSO_TOP], FACE_NONE) // Translate to shoulders gl.Translated(0.0, torsoHeight/2, 0.0) pos[YAXIS] += torsoHeight / 2 // Translate to centre of head gl.Translated(torsoDepth/2+headDepth*0.5, 0.0, 0.0) pos[XAXIS] += torsoDepth/2 + headDepth*0.5 pos[YAXIS] += 0.0 gl.Rotated(-headAngle, 0.0, 0.0, 1.0) Cuboid(pos, headWidth, headHeight, headDepth, textures[TEXTURE_WOLF_HEAD_FRONT], textures[TEXTURE_WOLF_HEAD_BACK], textures[TEXTURE_WOLF_HEAD_SIDE], textures[TEXTURE_WOLF_HEAD_SIDE], textures[TEXTURE_WOLF_HEAD_TOP], textures[TEXTURE_WOLF_HEAD_BOTTOM], FACE_NONE) gl.PopMatrix() }
func (player *Player) Draw(center Vectorf, selectedBlockFace *BlockFace) { pos := Vectorf{player.position[XAXIS], player.position[YAXIS], player.position[ZAXIS]} gl.PushMatrix() gl.Translatef(float32(player.position[XAXIS]), float32(player.position[YAXIS]), float32(player.position[ZAXIS])) //stepHeight := float32(math.Sin(player.Bounce * piover180)/10.0) gl.Rotated(player.Heading(), 0.0, 1.0, 0.0) // Translate to top of ground block gl.Translatef(0.0, -0.5, 0.0) pos[YAXIS] += -0.5 // From http://www.realcolorwheel.com/human.htm headHeight := float64(0.25) hatHeight := headHeight brimHeight := 0.15 * headHeight brimWidth := 1.5 * headHeight brimDepth := 1.5 * headHeight neckHeight := 0.25 * headHeight torsoWidth := 2 * headHeight torsoHeight := 3.25 * headHeight torsoDepth := 1 * headHeight legHeight := 8*headHeight - torsoHeight - neckHeight - headHeight legWidth := (torsoWidth - 0.25*headHeight) / 2 legDepth := legWidth armHeight := 2.75 * headHeight armWidth := 0.75 * torsoDepth armDepth := 0.75 * torsoDepth // lowerArmHeight := 1.25 * headHeight // handHeight := 0.75 * headHeight var legAngle, torsoAngle, leftArmAngle, rightArmAngle, step float64 // if player.velocity[YAXIS] != 0 { // legAngle = 20 // leftArmAngle = 120 // rightArmAngle = 120 // } else { legAngle = 40 * (math.Abs(player.velocity[XAXIS]) + math.Abs(player.velocity[ZAXIS])) / player.walkingSpeed * math.Sin(player.walkSequence) torsoAngle = -math.Abs(legAngle / 6) leftArmAngle = -legAngle * 1.2 rightArmAngle = legAngle * 1.2 step = headHeight * 0.1 * math.Pow(math.Sin(player.walkSequence), 2) // } gl.Translated(0.0, step, 0) pos[YAXIS] += step // Translate to top of leg gl.Translated(0.0, legHeight, 0) pos[YAXIS] += legHeight // Translate to centre of leg gl.Rotated(legAngle, 0.0, 0.0, 1.0) gl.Translated(0.0, -legHeight/2, (legWidth+0.25*headHeight)/2) pos[YAXIS] += -legHeight / 2 pos[ZAXIS] += (legWidth + 0.25*headHeight) / 2 Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_LEG], textures[TEXTURE_LEG], textures[TEXTURE_LEG_SIDE], textures[TEXTURE_LEG_SIDE], textures[32], textures[32], FACE_NONE) gl.Translated(0.0, legHeight/2, -(legWidth+0.25*headHeight)/2) pos[YAXIS] += legHeight / 2 pos[ZAXIS] += -(legWidth + 0.25*headHeight) / 2 gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Rotated(-legAngle, 0.0, 0.0, 1.0) gl.Translated(0.0, -legHeight/2, -(legWidth+0.25*headHeight)/2) pos[YAXIS] += -legHeight / 2 pos[ZAXIS] += -(legWidth + 0.25*headHeight) / 2 Cuboid(pos, legWidth, legHeight, legDepth, textures[TEXTURE_LEG], textures[TEXTURE_LEG], textures[TEXTURE_LEG_SIDE], textures[TEXTURE_LEG_SIDE], textures[32], textures[32], FACE_NONE) gl.Translated(0.0, legHeight/2, (legWidth+0.25*headHeight)/2) pos[YAXIS] += legHeight / 2 pos[ZAXIS] += (legWidth + 0.25*headHeight) / 2 gl.Rotated(+legAngle, 0.0, 0.0, 1.0) gl.Rotated(torsoAngle, 0.0, 0.0, 1.0) // Translate to centre of torso gl.Translated(0.0, torsoHeight/2, 0.0) pos[YAXIS] += torsoHeight / 2 Cuboid(pos, torsoWidth, torsoHeight, torsoDepth, textures[TEXTURE_TORSO_FRONT], textures[TEXTURE_TORSO_BACK], textures[TEXTURE_TORSO_LEFT], textures[TEXTURE_TORSO_RIGHT], textures[TEXTURE_TORSO_TOP], textures[TEXTURE_TORSO_TOP], FACE_NONE) // Translate to shoulders gl.Translated(0.0, torsoHeight/2, 0.0) pos[YAXIS] += torsoHeight / 2 gl.Rotated(leftArmAngle, 0.0, 0.0, 1.0) gl.Translated(0.0, -armHeight/2, torsoWidth/2+armWidth/2) pos[YAXIS] += -armHeight / 2 pos[ZAXIS] += torsoWidth/2 + armWidth/2 Cuboid(pos, armWidth, armHeight, armDepth, textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM_TOP], textures[TEXTURE_HAND], FACE_NONE) gl.Translated(0.0, armHeight/2, -torsoWidth/2-armWidth/2) pos[YAXIS] += armHeight / 2 pos[ZAXIS] += -torsoWidth/2 + armWidth/2 gl.Rotated(-leftArmAngle, 0.0, 0.0, 1.0) gl.Rotated(rightArmAngle, 0.0, 0.0, 1.0) gl.Translated(0.0, -armHeight/2, -torsoWidth/2-armWidth/2) pos[YAXIS] += -armHeight / 2 pos[ZAXIS] += -torsoWidth/2 + armWidth/2 Cuboid(pos, armWidth, armHeight, armDepth, textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM], textures[TEXTURE_ARM_TOP], textures[TEXTURE_HAND], FACE_NONE) gl.Translated(0.0, armHeight/2, torsoWidth/2+armWidth/2) pos[YAXIS] += armHeight / 2 pos[ZAXIS] += torsoWidth/2 + armWidth/2 gl.Rotated(-rightArmAngle, 0.0, 0.0, 1.0) // Translate to centre of head gl.Translated(0.0, neckHeight+headHeight/2, 0.0) pos[YAXIS] += neckHeight + headHeight/2 if selectedBlockFace != nil { blockPos := selectedBlockFace.pos.Vectorf() headPos := player.position.Add(Vectorf{0, headHeight * 9, 0}) blockDir := blockPos.Minus(headPos) if player.Facing(blockDir) { yrot := (math.Atan2(blockDir[XAXIS], blockDir[ZAXIS]) - math.Pi/2) * 180 / math.Pi zrot, xrot := -12.0, -12.0 gl.Rotated(-player.Heading(), 0.0, 1.0, 0.0) gl.Rotated(yrot, 0.0, 1.0, 0.0) gl.Rotated(zrot, 0.0, 0.0, 1.0) gl.Rotated(xrot, 1.0, 0.0, 0.0) } } Cuboid(pos, headHeight, headHeight, headHeight, textures[TEXTURE_HEAD_FRONT], textures[TEXTURE_HEAD_BACK], textures[TEXTURE_HEAD_LEFT], textures[TEXTURE_HEAD_RIGHT], nil, textures[TEXTURE_HEAD_BOTTOM], FACE_NONE) // Translate to hat brim gl.Translated(0.0, headHeight/2+brimHeight/2, 0.0) pos[YAXIS] += headHeight/2 + brimHeight/2 Cuboid(pos, brimWidth, brimHeight, brimDepth, textures[TEXTURE_BRIM], textures[TEXTURE_BRIM], textures[TEXTURE_BRIM], textures[TEXTURE_BRIM], textures[TEXTURE_BRIM], textures[TEXTURE_BRIM], FACE_NONE) gl.Translated(0.0, brimHeight/2+hatHeight/2, 0.0) pos[YAXIS] += headHeight/2 + brimHeight/2 Cuboid(pos, hatHeight, hatHeight, hatHeight, textures[TEXTURE_HAT_FRONT], textures[TEXTURE_HAT_BACK], textures[TEXTURE_HAT_LEFT], textures[TEXTURE_HAT_RIGHT], textures[TEXTURE_HAT_TOP], nil, FACE_NONE) gl.PopMatrix() }
func draw_screen() { angle := float32(0.0) v := [][]float32{ {-1.0, -1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, 1.0}, {-1.0, 1.0, 1.0}, {-1.0, -1.0, -1.0}, {1.0, -1.0, -1.0}, {1.0, 1.0, -1.0}, {-1.0, 1.0, -1.0}} red := []byte{255, 0, 0, 255} green := []byte{0, 255, 0, 255} blue := []byte{0, 0, 255, 255} white := []byte{255, 255, 255, 255} yellow := []byte{0, 255, 255, 255} black := []byte{0, 0, 0, 255} orange := []byte{255, 255, 0, 255} purple := []byte{255, 0, 255, 0} gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() gl.Translatef(0.0, 0.0, -5.0) gl.Rotatef(angle, 0.0, 1.0, 0.0) if should_rotate { angle++ if angle > 360.0 { angle = 0.0 } } gl.Begin(gl.TRIANGLES) gl.Color4ubv(red) gl.Vertex3fv(v[0]) gl.Color4ubv(green) gl.Vertex3fv(v[1]) gl.Color4ubv(blue) gl.Vertex3fv(v[2]) gl.Color4ubv(red) gl.Vertex3fv(v[0]) gl.Color4ubv(blue) gl.Vertex3fv(v[2]) gl.Color4ubv(white) gl.Vertex3fv(v[3]) gl.Color4ubv(green) gl.Vertex3fv(v[1]) gl.Color4ubv(black) gl.Vertex3fv(v[5]) gl.Color4ubv(orange) gl.Vertex3fv(v[6]) gl.Color4ubv(green) gl.Vertex3fv(v[1]) gl.Color4ubv(orange) gl.Vertex3fv(v[6]) gl.Color4ubv(blue) gl.Vertex3fv(v[2]) gl.Color4ubv(black) gl.Vertex3fv(v[5]) gl.Color4ubv(yellow) gl.Vertex3fv(v[4]) gl.Color4ubv(purple) gl.Vertex3fv(v[7]) gl.Color4ubv(black) gl.Vertex3fv(v[5]) gl.Color4ubv(purple) gl.Vertex3fv(v[7]) gl.Color4ubv(orange) gl.Vertex3fv(v[6]) gl.Color4ubv(yellow) gl.Vertex3fv(v[4]) gl.Color4ubv(red) gl.Vertex3fv(v[0]) gl.Color4ubv(white) gl.Vertex3fv(v[3]) gl.Color4ubv(yellow) gl.Vertex3fv(v[4]) gl.Color4ubv(white) gl.Vertex3fv(v[3]) gl.Color4ubv(purple) gl.Vertex3fv(v[7]) gl.Color4ubv(white) gl.Vertex3fv(v[3]) gl.Color4ubv(blue) gl.Vertex3fv(v[2]) gl.Color4ubv(orange) gl.Vertex3fv(v[6]) gl.Color4ubv(white) gl.Vertex3fv(v[3]) gl.Color4ubv(orange) gl.Vertex3fv(v[6]) gl.Color4ubv(purple) gl.Vertex3fv(v[7]) gl.Color4ubv(green) gl.Vertex3fv(v[1]) gl.Color4ubv(red) gl.Vertex3fv(v[0]) gl.Color4ubv(yellow) gl.Vertex3fv(v[4]) gl.Color4ubv(green) gl.Vertex3fv(v[1]) gl.Color4ubv(yellow) gl.Vertex3fv(v[4]) gl.Color4ubv(black) gl.Vertex3fv(v[5]) gl.End() sdl.GL_SwapBuffers() }
func drawScene() { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0, 0, z) gl.Rotatef(rotation[0], 1, 0, 0) gl.Rotatef(rotation[1], 0, 1, 0) rotation[0] += speed[0] rotation[1] += speed[1] textures[filter].Bind(gl.TEXTURE_2D) gl.Begin(gl.QUADS) // Front Face gl.Normal3f(0, 0, 1) // Normal Pointing Towards Viewer gl.TexCoord2f(0, 0) gl.Vertex3f(-1, -1, 1) // Point 1 (Front) gl.TexCoord2f(1, 0) gl.Vertex3f(1, -1, 1) // Point 2 (Front) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, 1) // Point 3 (Front) gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, 1) // Point 4 (Front) // Back Face gl.Normal3f(0, 0, -1) // Normal Pointing Away From Viewer gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, -1) // Point 1 (Back) gl.TexCoord2f(1, 1) gl.Vertex3f(-1, 1, -1) // Point 2 (Back) gl.TexCoord2f(0, 1) gl.Vertex3f(1, 1, -1) // Point 3 (Back) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, -1) // Point 4 (Back) // Top Face gl.Normal3f(0, 1, 0) // Normal Pointing Up gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, -1) // Point 1 (Top) gl.TexCoord2f(0, 0) gl.Vertex3f(-1, 1, 1) // Point 2 (Top) gl.TexCoord2f(1, 0) gl.Vertex3f(1, 1, 1) // Point 3 (Top) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, -1) // Point 4 (Top) // Bottom Face gl.Normal3f(0, -1, 0) // Normal Pointing Down gl.TexCoord2f(1, 1) gl.Vertex3f(-1, -1, -1) // Point 1 (Bottom) gl.TexCoord2f(0, 1) gl.Vertex3f(1, -1, -1) // Point 2 (Bottom) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, 1) // Point 3 (Bottom) gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, 1) // Point 4 (Bottom) // Right face gl.Normal3f(1, 0, 0) // Normal Pointing Right gl.TexCoord2f(1, 0) gl.Vertex3f(1, -1, -1) // Point 1 (Right) gl.TexCoord2f(1, 1) gl.Vertex3f(1, 1, -1) // Point 2 (Right) gl.TexCoord2f(0, 1) gl.Vertex3f(1, 1, 1) // Point 3 (Right) gl.TexCoord2f(0, 0) gl.Vertex3f(1, -1, 1) // Point 4 (Right) // Left Face gl.Normal3f(-1, 0, 0) // Normal Pointing Left gl.TexCoord2f(0, 0) gl.Vertex3f(-1, -1, -1) // Point 1 (Left) gl.TexCoord2f(1, 0) gl.Vertex3f(-1, -1, 1) // Point 2 (Left) gl.TexCoord2f(1, 1) gl.Vertex3f(-1, 1, 1) // Point 3 (Left) gl.TexCoord2f(0, 1) gl.Vertex3f(-1, 1, -1) gl.End() 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(0.0, 0.0, float32(z)) // translate by z gl.Rotatef(float32(xrot), 1.0, 0.0, 0.0) /* Rotate On The X Axis */ gl.Rotatef(float32(yrot), 0.0, 1.0, 0.0) /* Rotate On The Y Axis */ /* Select Our Texture */ gl.BindTexture(gl.TEXTURE_2D, uint(textures[filter])) // based on filter gl.Begin(gl.QUADS) // Front face gl.Normal3f(0.0, 0.0, 1.0) // Normal Pointing Towards Viewer gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, -1.0, 1.0) // Bottom left gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, -1.0, 1.0) // Bottom right gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, 1.0, 1.0) // Top right gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, 1.0, 1.0) // Top left // Back Face gl.Normal3f(0.0, 0.0, -1.0) // Normal Pointing Away From Viewer gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, -1.0, -1.0) // Bottom right gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, 1.0, -1.0) // Top right gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, 1.0, -1.0) // Top left gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, -1.0, -1.0) // Bottom left // Top Face gl.Normal3f(0.0, 1.0, 0.0) // Normal Pointing Up gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(-1.0, 1.0, -1.0) // Top left gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(-1.0, 1.0, 1.0) // Bottom left gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(1.0, 1.0, 1.0) // Bottom right gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(1.0, 1.0, -1.0) // Top right // Bottom Face gl.Normal3f(0.0, -1.0, 0.0) // Normal Pointing Down gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, -1.0, -1.0) // Top right gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, -1.0, -1.0) // Top left gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, -1.0, 1.0) // Bottom left gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, -1.0, 1.0) // Bottom right // Right face gl.Normal3f(1.0, 0.0, 0.0) // Normal Pointing Right gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(1.0, -1.0, -1.0) // Bottom right gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(1.0, 1.0, -1.0) // Top right gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, 1.0, 1.0) // Top left gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, -1.0, 1.0) // Bottom left // Left Face gl.Normal3f(-1.0, 0.0, 0.0) // Normal Pointing Left gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(-1.0, -1.0, -1.0) // Bottom left gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, -1.0, 1.0) // Bottom right gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, 1.0, 1.0) // Top right gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(-1.0, 1.0, -1.0) // Top left gl.End() sdl.GL_SwapBuffers() xrot += xspeed yrot += yspeed // 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 } }
// Here goes our drawing code func drawGLScene() { // Clear the screen and depth buffer gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.BindTexture(gl.TEXTURE_2D, uint(texture)) for loop, star := range stars { gl.LoadIdentity() gl.Translatef(0.0, 0.0, float32(zoom)) gl.Rotatef(float32(tilt), 1.0, 0.0, 0.0) gl.Rotatef(float32(star.angle), 0.0, 1.0, 0.0) gl.Translatef(float32(star.dist), 0.0, 0.0) gl.Rotatef(float32(-star.angle), 0.0, 1.0, 0.0) gl.Rotatef(float32(-tilt), 1.0, 0.0, 0.0) if twinkle { other := stars[(num-loop)-1] gl.Color4ub(uint8(other.r), uint8(other.g), uint8(other.b), 255) gl.Begin(gl.QUADS) gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, -1.0, 0.0) gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, -1.0, 0.0) gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, 1.0, 0.0) gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, 1.0, 0.0) gl.End() } gl.Rotatef(float32(spin), 0.0, 0.0, 1.0) gl.Color4ub(uint8(star.r), uint8(star.g), uint8(star.b), 255) gl.Begin(gl.QUADS) gl.TexCoord2f(0.0, 0.0) gl.Vertex3f(-1.0, -1.0, 0.0) gl.TexCoord2f(1.0, 0.0) gl.Vertex3f(1.0, -1.0, 0.0) gl.TexCoord2f(1.0, 1.0) gl.Vertex3f(1.0, 1.0, 0.0) gl.TexCoord2f(0.0, 1.0) gl.Vertex3f(-1.0, 1.0, 0.0) gl.End() spin += 0.01 star.angle += gl.GLfloat(loop) / gl.GLfloat(num) star.dist -= 0.01 if star.dist < 0.0 { star.dist += 5.0 star.r = gl.GLubyte(rand.Float32() * 255) star.g = gl.GLubyte(rand.Float32() * 255) star.b = gl.GLubyte(rand.Float32() * 255) } } // Draw to the screen sdl.GL_SwapBuffers() // 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 } }