func draw(c event.Config) { secondsFromStart := time.Since(startTime) * 60 / time.Second now := clock.Time(secondsFromStart) currentBottomRight := geom.Point{c.Width, c.Height} if bottomRight == nil || currentBottomRight != *bottomRight { bottomRight = ¤tBottomRight log.Printf("Device Sizing: %vx%v PixelsPerPt:%v", c.Width, c.Height, c.PixelsPerPt, ) } if fullScene == nil { fullScene = setupScene(c.Width, c.Height, secondsFromStart) } gl.ClearColor(0, 0, 0, 0) gl.Clear(gl.COLOR_BUFFER_BIT) eng.Render(fullScene, now, c) debug.DrawFPS(c) }
func onPaint(c size.Event) { gl.ClearColor(0, 0.3, 0.3, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.UseProgram(program) green += direction if green > 1 { green = 1 direction = -direction } if green < 0.4 { green = 0.4 direction = -direction } gl.Uniform4f(color, 0, green, 0, 1) gl.Uniform2f(offset, touchX/float32(c.WidthPx), touchY/float32(c.HeightPx)) gl.BindBuffer(gl.ARRAY_BUFFER, buf) gl.BufferData(gl.ARRAY_BUFFER, triangleData, gl.STATIC_DRAW) // ? gl.EnableVertexAttribArray(position) gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(position) debug.DrawFPS(c) }
func onPaint(c size.Event) { //清场 gl.ClearColor(1, 1, 1, 1) //设置背景颜色 gl.Clear(gl.COLOR_BUFFER_BIT) //使用program gl.UseProgram(program) gl.Uniform4f(color, 0, 0.5, 0.8, 1) //设置color对象值,设置4个浮点数. //offset有两个值X,Y,窗口左上角为(0,0),右下角为(1,1) //gl.Uniform4f(offset,5.0,1.0,1.0,1.0 ) //gl.Uniform2f(offset,offsetx,offsety )//为2参数的uniform变量赋值 //log.Println("offset:",offsetx,offsety, 0, 0) gl.UniformMatrix4fv(scan, []float32{ float32(touchLoc.X/c.WidthPt*4 - 2), 0, 0, 0, 0, float32(touchLoc.Y/c.HeightPt*4 - 2), 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, }) gl.BindBuffer(gl.ARRAY_BUFFER, buf) gl.EnableVertexAttribArray(position) /*glVertexAttribPointer 指定了渲染时索引值为 index 的顶点属性数组的数据格式和位置。调用gl.vertexAttribPointer()方法,把顶点着色器中某个属性相对应的通用属性索引连接到绑定的webGLBUffer对象上。 index 指定要修改的顶点属性的索引值 size 指定每个顶点属性的组件数量。必须为1、2、3或者4。初始值为4。(如position是由3个(x,y,z)组成,而颜色是4个(r,g,b,a)) type 指定数组中每个组件的数据类型。可用的符号常量有GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_UNSIGNED_SHORT, GL_FIXED, 和 GL_FLOAT,初始值为GL_FLOAT。 normalized 指定当被访问时,固定点数据值是否应该被归一化(GL_TRUE)或者直接转换为固定点值(GL_FALSE)。 stride 指定连续顶点属性之间的偏移量。如果为0,那么顶点属性会被理解为:它们是紧密排列在一起的。初始值为0。 pointer 指定第一个组件在数组的第一个顶点属性中的偏移量。该数组与GL_ARRAY_BUFFER绑定,储存于缓冲区中。初始值为0; */ gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0) //更新position值 gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(position) debug.DrawFPS(c) }
func onDraw(c config.Event) { gl.ClearColor(1, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) debug.DrawFPS(c) DrawResult(c, <-speed_rate) }
func draw(c event.Config) { if scene == nil { loadScene(c) } gl.ClearColor(1, 1, 1, 1) gl.Clear(gl.COLOR_BUFFER_BIT) now := clock.Time(time.Since(startTime) * 60 / time.Second) eng.Render(scene, now, c) debug.DrawFPS(c) }
func onPaint() { if scene == nil { loadScene() } gl.ClearColor(1, 1, 1, 1) gl.Clear(gl.COLOR_BUFFER_BIT) now := clock.Time(time.Since(startTime) * 60 / time.Second) eng.Render(scene, now, cfg) debug.DrawFPS(cfg) }
func (e *Engine) Draw(c size.Event) { gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.ClearColor(0.2, 0.2, 0.2, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.DEPTH_BUFFER_BIT) gl.UseProgram(e.shader.program) m := mgl32.Perspective(0.785, float32(c.WidthPt/c.HeightPt), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projection, m[:]) eye := mgl32.Vec3{0, 0, 8} center := mgl32.Vec3{0, 0, 0} up := mgl32.Vec3{0, 1, 0} m = mgl32.LookAtV(eye, center, up) gl.UniformMatrix4fv(e.shader.view, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLoc.X/c.WidthPt-0.5)*3.14*2, mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.modelx, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLoc.Y/c.HeightPt-0.5)*3.14, mgl32.Vec3{1, 0, 0}) gl.UniformMatrix4fv(e.shader.modely, m[:]) coordsPerVertex := 3 for _, obj := range e.shape.Objs { gl.BindBuffer(gl.ARRAY_BUFFER, obj.coord) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 12, 0) if obj.useuv == true { gl.Uniform1i(e.shader.useuv, 1) texCoordsPerVertex := 2 gl.BindBuffer(gl.ARRAY_BUFFER, obj.uvcoord) gl.EnableVertexAttribArray(e.shader.vertTexCoord) gl.VertexAttribPointer(e.shader.vertTexCoord, texCoordsPerVertex, gl.FLOAT, false, 8, 0) gl.BindTexture(gl.TEXTURE_2D, obj.tex) } else { gl.Uniform1i(e.shader.useuv, 0) gl.Uniform4f(e.shader.color, obj.color[0], obj.color[1], obj.color[2], obj.color[3]) } gl.DrawArrays(gl.TRIANGLES, 0, obj.vcount) if obj.useuv { gl.DisableVertexAttribArray(e.shader.vertTexCoord) } gl.DisableVertexAttribArray(e.shader.vertCoord) } debug.DrawFPS(c) }
func (e *Engine) Draw(c size.Event) { gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.ClearColor(0.5, 0.8, 0.8, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.DEPTH_BUFFER_BIT) gl.UseProgram(e.shader.program) gl.Uniform3fv(e.shader.lightdir, []float32{0.5, 0.6, 0.7}) m := mgl32.Perspective(1.3, float32(c.WidthPt/c.HeightPt), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projectionmatrix, m[:]) eye := mgl32.Vec3{0, 0, 0.2} center := mgl32.Vec3{0, 0, 0} up := mgl32.Vec3{0, 1, 0} m = mgl32.LookAtV(eye, center, up) gl.UniformMatrix4fv(e.shader.viewmatrix, m[:]) m = mgl32.HomogRotate3D((e.touchx/float32(c.WidthPt)-0.5)*6.28, mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.modelmatrix, m[:]) m = mgl32.HomogRotate3D((e.touchx/float32(c.WidthPt)-0.5)*6.28, mgl32.Vec3{0, -1, 0}) gl.UniformMatrix4fv(e.shader.lightmatrix, m[:]) coordsPerVertex := 3 for _, obj := range e.shape.Objs { gl.BindBuffer(gl.ARRAY_BUFFER, obj.coord) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 12, 0) texCoordsPerVertex := 2 gl.BindBuffer(gl.ARRAY_BUFFER, obj.uvcoord) gl.EnableVertexAttribArray(e.shader.texcoord) gl.VertexAttribPointer(e.shader.texcoord, texCoordsPerVertex, gl.FLOAT, false, 8, 0) gl.BindBuffer(gl.ARRAY_BUFFER, obj.normal) gl.EnableVertexAttribArray(e.shader.normal) gl.VertexAttribPointer(e.shader.normal, 3, gl.FLOAT, false, 12, 0) gl.BindTexture(gl.TEXTURE_2D, obj.tex) gl.DrawArrays(gl.TRIANGLES, 0, obj.vcount) gl.DisableVertexAttribArray(e.shader.texcoord) gl.DisableVertexAttribArray(e.shader.normal) gl.DisableVertexAttribArray(e.shader.vertCoord) } debug.DrawFPS(c) }
func (e *Engine) Draw(c config.Event) { now := time.Now() interval := now.Sub(e.lastTick) e.lastTick = now // Handle key presses var camDelta mgl.Vec3 if e.bindings.Pressed(KeyCamForward) { camDelta[2] -= moveSpeed } if e.bindings.Pressed(KeyCamReverse) { camDelta[2] += moveSpeed } if e.bindings.Pressed(KeyCamLeft) { camDelta[0] -= moveSpeed } if e.bindings.Pressed(KeyCamRight) { camDelta[0] += moveSpeed } if e.bindings.Pressed(KeyCamUp) { e.camera.MoveTo(e.camera.Position().Add(mgl.Vec3{0, moveSpeed, 0})) } if e.bindings.Pressed(KeyCamDown) { e.camera.MoveTo(e.camera.Position().Add(mgl.Vec3{0, -moveSpeed, 0})) } if camDelta[0]+camDelta[1]+camDelta[2] != 0 { e.following = false e.camera.Move(camDelta) } else if e.following { pos := e.world.Focus().Position() e.camera.Lerp(pos.Add(e.followOffset), pos, 0.1) } gl.ClearColor(0, 0, 0, 1) //gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.Enable(gl.DEPTH_TEST) //gl.Disable(gl.CULL_FACE) //gl.DepthFunc(gl.LESS) //gl.SampleCoverage(4.0, false) if !e.paused { err := e.world.Tick(interval) if err != nil { e.paused = true e.gameover = true } } e.scene.Draw(e.camera) gl.Disable(gl.DEPTH_TEST) debug.DrawFPS(c) }
func onPaint(e size.Event) { if scene == nil { loadScene() } gl.ClearColor(1, 1, 1, 1) gl.Clear(gl.COLOR_BUFFER_BIT) now := clock.Time(time.Since(start) * 60 / time.Second) eng.Render(scene, now, e) if *dbg { debug.DrawFPS(e) } }
func draw(c event.Config) { select { case <-determined: if ok { gl.ClearColor(0, 1, 0, 1) } else { gl.ClearColor(1, 0, 0, 1) } default: gl.ClearColor(0, 0, 0, 1) } gl.Clear(gl.COLOR_BUFFER_BIT) debug.DrawFPS(c) }
func onDraw(sz size.Event) { select { case <-determined: if ok { gl.ClearColor(0, 1, 0, 1) } else { gl.ClearColor(1, 0, 0, 1) } default: gl.ClearColor(0, 0, 0, 1) } gl.Clear(gl.COLOR_BUFFER_BIT) debug.DrawFPS(sz) }
func onPaint(c config.Event) { if !started { touchLoc = geom.Point{c.Width / 2, c.Height / 2} started = true } if scene == nil { loadScene() } gl.ClearColor(242/255.0, 240/255.0, 217/255.0, 1) // gophercon bg color gl.Clear(gl.COLOR_BUFFER_BIT) now := clock.Time(time.Since(startClock) * 60 / time.Second) eng.Render(scene, now, c) debug.DrawFPS(c) }
func (e *Engine) Draw(c size.Event) { since := time.Now().Sub(e.started) //gl.Enable() gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.ClearColor(0, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.DEPTH_BUFFER_BIT) gl.UseProgram(e.shader.program) m := mgl32.Perspective(0.785, float32(c.WidthPt/c.HeightPt), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projection, m[:]) eye := mgl32.Vec3{3, 3, 3} center := mgl32.Vec3{0, 0, 0} up := mgl32.Vec3{0, 1, 0} m = mgl32.LookAtV(eye, center, up) gl.UniformMatrix4fv(e.shader.view, m[:]) m = mgl32.HomogRotate3D(float32(since.Seconds()), mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.model, m[:]) gl.BindBuffer(gl.ARRAY_BUFFER, e.shape.buf) coordsPerVertex := 3 texCoordsPerVertex := 2 vertexCount := len(cubeData) / (coordsPerVertex + texCoordsPerVertex) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 20, 0) // 4 bytes in float, 5 values per vertex gl.EnableVertexAttribArray(e.shader.vertTexCoord) gl.VertexAttribPointer(e.shader.vertTexCoord, texCoordsPerVertex, gl.FLOAT, false, 20, 12) gl.BindTexture(gl.TEXTURE_2D, e.shape.texture) gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(e.shader.vertCoord) debug.DrawFPS(c) }
func (e *Engine) Draw(c size.Event) { gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.ClearColor(0, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.DEPTH_BUFFER_BIT) gl.UseProgram(e.shader.program) m := mgl32.Perspective(0.785, float32(c.WidthPt/c.HeightPt), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projection, m[:]) eye := mgl32.Vec3{0, 3, 3} center := mgl32.Vec3{0, 0, 0} up := mgl32.Vec3{0, 1, 0} m = mgl32.LookAtV(eye, center, up) gl.UniformMatrix4fv(e.shader.view, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLocX*5/c.WidthPt), mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.modelx, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLocY*5/c.HeightPt), mgl32.Vec3{1, 0, 0}) gl.UniformMatrix4fv(e.shader.modely, m[:]) gl.BindBuffer(gl.ARRAY_BUFFER, e.shape.buf) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.BindBuffer(gl.ARRAY_BUFFER, e.shape.colorbuf) gl.EnableVertexAttribArray(e.shader.color) gl.VertexAttribPointer(e.shader.color, colorsPerVertex, gl.FLOAT, false, 0, 0) //更新color值 gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(e.shader.vertCoord) gl.DisableVertexAttribArray(e.shader.color) debug.DrawFPS(c) }
func (e *Engine) Draw(c size.Event) { gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.ClearColor(0.2, 0.2, 0.2, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.Clear(gl.DEPTH_BUFFER_BIT) gl.UseProgram(e.shader.program) m := mgl32.Perspective(0.785, float32(c.WidthPt/c.HeightPt), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projection, m[:]) eye := mgl32.Vec3{0, 0, 5} center := mgl32.Vec3{0, 0, 0} up := mgl32.Vec3{0, 1, 0} m = mgl32.LookAtV(eye, center, up) gl.UniformMatrix4fv(e.shader.view, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLoc.X*10/c.WidthPt), mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.modelx, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLoc.Y*10/c.HeightPt), mgl32.Vec3{1, 0, 0}) gl.UniformMatrix4fv(e.shader.modely, m[:]) coordsPerVertex := 3 for _, buf := range e.shape.bufs { gl.BindBuffer(gl.ARRAY_BUFFER, buf.coord) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.Uniform4f(e.shader.color, buf.color[0], buf.color[1], buf.color[2], buf.color[3]) gl.DrawArrays(gl.TRIANGLES, 0, buf.vcount) gl.DisableVertexAttribArray(e.shader.vertCoord) } debug.DrawFPS(c) }
func onDraw(c config.Event) { gl.ClearColor(1, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.UseProgram(program) green += 0.01 if green > 1 { green = 0 } gl.Uniform4f(color, 0, green, 0, 1) gl.Uniform2f(offset, float32(touchLoc.X/c.Width), float32(touchLoc.Y/c.Height)) gl.BindBuffer(gl.ARRAY_BUFFER, buf) gl.EnableVertexAttribArray(position) gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(position) debug.DrawFPS(c) }
func onPaint(sz size.Event) { gl.ClearColor(1, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.UseProgram(program) green += 0.01 if green > 1 { green = 0 } gl.Uniform4f(color, 0, green, 0, 1) gl.Uniform2f(offset, touchX/float32(sz.WidthPx), touchY/float32(sz.HeightPx)) gl.BindBuffer(gl.ARRAY_BUFFER, buf) gl.EnableVertexAttribArray(position) gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.DrawArrays(gl.TRIANGLES, 0, vertexCount) gl.DisableVertexAttribArray(position) debug.DrawFPS(sz) }
func draw(c config.Event) { secondsFromStart := time.Since(startTime) * 60 / time.Second now := clock.Time(secondsFromStart) if screenWidth == nil || *screenWidth != c.WidthPt { screenWidth = &c.WidthPt log.Printf("Device Sizing: %vx%v PixelsPerPt:%v", c.WidthPt, c.HeightPt, c.PixelsPerPt, ) } if fullScene == nil { fullScene = setupScene(c.WidthPt, c.HeightPt, secondsFromStart) } gl.ClearColor(0, 0, 0, 0) gl.Clear(gl.COLOR_BUFFER_BIT) eng.Render(fullScene, now, c) debug.DrawFPS(c) }
func onDraw(sz size.Event) { gl.ClearColor(0, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT) debug.DrawFPS(sz) }