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 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 (shape *Skybox) Draw(camera Camera) { shader := shape.shader gl.DepthFunc(gl.LEQUAL) gl.DepthMask(false) projection, view := camera.Projection(), camera.View().Mat3().Mat4() gl.UniformMatrix4fv(shader.Uniform("projection"), projection[:]) gl.UniformMatrix4fv(shader.Uniform("view"), view[:]) gl.BindTexture(gl.TEXTURE_CUBE_MAP, shape.Texture) gl.BindBuffer(gl.ARRAY_BUFFER, shape.VBO) gl.EnableVertexAttribArray(shader.Attrib("vertCoord")) gl.VertexAttribPointer(shader.Attrib("vertCoord"), vertexDim, gl.FLOAT, false, shape.Stride(), 0) gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, shape.IBO) gl.DrawElements(gl.TRIANGLES, len(shape.indices), gl.UNSIGNED_BYTE, 0) gl.DisableVertexAttribArray(shader.Attrib("vertCoord")) gl.DepthMask(true) gl.DepthFunc(gl.LESS) }
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 event.Config) { since := time.Now().Sub(e.started) 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) // Setup MVP var m mgl.Mat4 m = mgl.Perspective(0.785, float32(c.Width/c.Height), 0.1, 10.0) gl.UniformMatrix4fv(e.shader.projection, m[:]) m = mgl.LookAtV( mgl.Vec3{3, 3, 3}, // eye mgl.Vec3{0, 0, 0}, // center mgl.Vec3{0, 1, 0}, // up ) gl.UniformMatrix4fv(e.shader.view, m[:]) m = mgl.HomogRotate3D(float32(since.Seconds()), mgl.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.model, m[:]) // Draw our shape gl.BindBuffer(gl.ARRAY_BUFFER, e.shape.buf) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, e.shape.coordsPerVertex, gl.FLOAT, false, 20, 0) // 4 bytes in float, 5 values per vertex gl.EnableVertexAttribArray(e.shader.vertTexCoord) gl.VertexAttribPointer(e.shader.vertTexCoord, e.shape.texCoordsPerVertex, gl.FLOAT, false, 20, 12) gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, e.shape.texture) gl.DrawArrays(gl.TRIANGLES, 0, e.shape.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) }