本文整理汇总了Golang中github.com/go-gl/gl/v2/1/gl.Ortho函数的典型用法代码示例。如果您正苦于以下问题:Golang Ortho函数的具体用法?Golang Ortho怎么用?Golang Ortho使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Ortho函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: recalcOrthoBorders
func (cam *camera) recalcOrthoBorders() {
const totalW = gameW + leftBorder + rightBorder
const totalH = gameH + topBorder + bottomBorder
const totalRatio = float64(totalW) / totalH
windowRatio := float64(cam.WindowWidth) / float64(cam.WindowHeight)
var horizontalBorder, verticalBorder float64
if windowRatio > totalRatio {
// window is wider than game => borders left and right
horizontalBorder = (windowRatio*totalH - totalW) / 2
} else {
// window is higher than game => borders on top and bottom
verticalBorder = (totalW/windowRatio - totalH) / 2
}
cam.Left = -leftBorder - horizontalBorder
cam.Right = gameW + rightBorder + horizontalBorder
cam.Top = -topBorder - verticalBorder
cam.Bottom = gameH + bottomBorder + verticalBorder
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(cam.Left, cam.Right, cam.Bottom, cam.Top, -1, 1)
gl.MatrixMode(gl.MODELVIEW)
}
开发者ID:gonutz,项目名称:settlers,代码行数:27,代码来源:camera.go
示例2: drawHud
func (ctx *DrawContext) drawHud(o *orrery.Orrery, frametime time.Duration) {
txt, size, err := ctx.createHudTexture(o, frametime)
if err != nil {
log.Fatalf(`can't create texture from text surface: %s`, err)
}
defer gl.DeleteTextures(1, &txt)
gl.MatrixMode(gl.PROJECTION)
gl.PushMatrix()
gl.LoadIdentity()
gl.Ortho(0.0, float64(ctx.width), float64(ctx.height), 0.0, -1.0, 1.0)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.Clear(gl.DEPTH_BUFFER_BIT)
gl.BindTexture(gl.TEXTURE_2D, txt)
gl.Enable(gl.TEXTURE_2D)
defer gl.Disable(gl.TEXTURE_2D)
gl.Color3f(1, 1, 1)
gl.Begin(gl.QUADS)
gl.TexCoord2f(0, 0)
gl.Vertex2f(0.0, 0.0)
gl.TexCoord2f(1, 0)
gl.Vertex2f(float32(size[0]), 0.0)
gl.TexCoord2f(1, 1)
gl.Vertex2f(float32(size[0]), float32(size[1]))
gl.TexCoord2f(0, 1)
gl.Vertex2f(0.0, float32(size[1]))
gl.End()
gl.PopMatrix()
}
开发者ID:farhaven,项目名称:universe,代码行数:33,代码来源:drawing.go
示例3: initGraphics
func initGraphics() error {
if err := gl.Init(); err != nil {
return err
}
if err := glfw.Init(); err != nil {
return err
}
glfw.WindowHint(glfw.Resizable, glfw.False)
var err error
window, err = glfw.CreateWindow(64*scaleRatio, 32*scaleRatio, "CHIP-8 Emulator", nil, nil)
if err != nil {
return err
}
window.MakeContextCurrent()
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, 64, 32, 0, 0, 1)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
clear()
window.SwapBuffers()
return nil
}
开发者ID:am4,项目名称:chip8,代码行数:31,代码来源:graphics.go
示例4: main
func main() {
err := glfw.Init()
if err != nil {
panic(err)
}
defer glfw.Terminate()
fp, err := os.Open("example.tmx")
if err != nil {
panic(err)
}
m, err := tmx.NewMap(fp)
if err != nil {
panic(err)
}
var monitor *glfw.Monitor
window, err := glfw.CreateWindow(screenWidth, screenHeight, "Map Renderer", monitor, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
if err := gl.Init(); err != nil {
panic(err)
}
width, height := window.GetFramebufferSize()
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.ClearColor(1.0, 1.0, 1.0, 1.0)
gl.Viewport(0, 0, int32(width), int32(height))
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, float64(width), float64(height), 0, -1, 1)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
canvas := newOpenGLCanvas(width, height, float32(width)/float32(screenWidth), float32(height)/float32(screenHeight))
renderer := tmx.NewRenderer(*m, canvas)
fps := 0
startTime := time.Now().UnixNano()
timer := tmx.CreateTimer()
timer.Start()
for !window.ShouldClose() {
elapsed := float64(timer.GetElapsedTime()) / (1000 * 1000)
renderer.Render(int64(math.Ceil(elapsed)))
fps++
if time.Now().UnixNano()-startTime > 1000*1000*1000 {
log.Println(fps)
startTime = time.Now().UnixNano()
fps = 0
}
window.SwapBuffers()
glfw.PollEvents()
timer.UpdateTime()
}
}
开发者ID:manyminds,项目名称:tmx,代码行数:58,代码来源:opengl.go
示例5: drawScene
func drawScene(w *glfw.Window) {
width, height := w.GetFramebufferSize()
ratio := float32(width) / float32(height)
var x1, x2, y1, y2 float32
if ratio > 1 {
x1, x2, y1, y2 = -ratio, ratio, -1, 1
} else {
x1, x2, y1, y2 = -1, 1, -1/ratio, 1/ratio
}
gl.Viewport(0, 0, int32(width), int32(height))
gl.Clear(gl.COLOR_BUFFER_BIT)
// Applies subsequent matrix operations to the projection matrix stack
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity() // replace the current matrix with the identity matrix
gl.Ortho(float64(x1), float64(x2), float64(y1), float64(y2), 1, -1) // multiply the current matrix with an orthographic matrix
// Applies subsequent matrix operations to the modelview matrix stack
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.LineWidth(1)
gl.Begin(gl.LINE) // delimit the vertices of a primitive or a group of like primitives
gl.Color3f(0, 0, 0) // set the current color
gl.Vertex3f(0, y1, 0)
gl.Vertex3f(0, y2, 0)
gl.Vertex3f(x1, 0, 0)
gl.Vertex3f(x2, 0, 0)
gl.End()
gl.Rotatef(float32(glfw.GetTime()*50), 0, 0, 1) // multiply the current matrix by a rotation matrix
s := float32(.95)
gl.Begin(gl.TRIANGLES)
gl.Color3f(1, 0, 0) // set the current color
gl.Vertex3f(0, s, 0) // specify a vertex
gl.Color3f(0, 1, 0)
gl.Vertex3f(s*.866, s*-0.5, 0)
gl.Color3f(0, 0, 1)
gl.Vertex3f(s*-.866, s*-0.5, 0)
gl.End()
gl.LineWidth(5)
gl.Begin(gl.LINE_LOOP)
for i := float64(0); i < 2*math.Pi; i += .05 {
r, g, b := hsb2rgb(float32(i/(2*math.Pi)), 1, 1)
gl.Color3f(r, g, b)
gl.Vertex3f(s*float32(math.Sin(i)), s*float32(math.Cos(i)), 0)
}
gl.End()
}
开发者ID:rdterner,项目名称:gl,代码行数:56,代码来源:demo.go
示例6: main
func main() {
runtime.LockOSThread()
if err := glfw.Init(); err != nil {
panic(err)
}
defer glfw.Terminate()
window, err := glfw.CreateWindow(800, 600, "fontstash example", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
glfw.SwapInterval(1)
gl.Init()
data, err := ioutil.ReadFile(filepath.Join("..", "ClearSans-Regular.ttf"))
if err != nil {
panic(err)
}
gl.Enable(gl.TEXTURE_2D)
tmpBitmap := make([]byte, 512*512)
cdata, err, _, tmpBitmap := truetype.BakeFontBitmap(data, 0, 32, tmpBitmap, 512, 512, 32, 96)
var ftex uint32
gl.GenTextures(1, &ftex)
gl.BindTexture(gl.TEXTURE_2D, ftex)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.ALPHA, 512, 512, 0,
gl.ALPHA, gl.UNSIGNED_BYTE, unsafe.Pointer(&tmpBitmap[0]))
gl.ClearColor(0.3, 0.3, 0.32, 1.)
for !window.ShouldClose() {
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, 800, 600, 0, 0, 1)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.Disable(gl.DEPTH_TEST)
gl.Color4ub(255, 255, 255, 255)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
my_print(100, 100, "The quick brown fox jumps over the fence", ftex, cdata)
window.SwapBuffers()
glfw.PollEvents()
}
}
开发者ID:shibukawa,项目名称:fontstash.go,代码行数:54,代码来源:truetype.go
示例7: onResize
// onResize sets up a simple 2d ortho context based on the window size
func onResize(window *glfw.Window, w, h int) {
w, h = window.GetSize() // query window to get screen pixels
width, height := window.GetFramebufferSize()
gl.Viewport(0, 0, int32(width), int32(height))
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, float64(w), 0, float64(h), -1, 1)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.ClearColor(1, 1, 1, 1)
}
开发者ID:jhautefeuille,项目名称:hellochipmunk,代码行数:12,代码来源:glfwtest.go
示例8: setupScene
func setupScene(width int, height int) {
gl.Disable(gl.DEPTH_TEST)
gl.Disable(gl.LIGHTING)
gl.ClearColor(0.5, 0.5, 0.5, 0.0)
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, float64(width), 0, float64(height), -1, 1)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
}
开发者ID:nightowlware,项目名称:gooey,代码行数:12,代码来源:gooey.go
示例9: Reset
func (state *State) Reset(window *glfw.Window) {
gl.ClearColor(1, 1, 1, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.Disable(gl.DEPTH)
gl.Enable(gl.FRAMEBUFFER_SRGB)
width, height := window.GetSize()
gl.Viewport(0, 0, int32(width), int32(height))
gl.Ortho(0, float64(width), float64(height), 0, 30, -30)
}
开发者ID:egonelbre,项目名称:spector,代码行数:13,代码来源:ui.go
示例10: reshape
func reshape(window *glfw.Window, w, h int) {
gl.ClearColor(1, 1, 1, 1)
//fmt.Println(gl.GetString(gl.EXTENSIONS))
gl.Viewport(0, 0, int32(w), int32(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. */
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.Disable(gl.DEPTH_TEST)
width, height = w, h
}
开发者ID:zzn01,项目名称:draw2d,代码行数:14,代码来源:postscriptgl.go
示例11: reshape
func reshape(w int, 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, int32(w), int32(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. */
}
开发者ID:XO-Lib,项目名称:GCXO,代码行数:14,代码来源:Window.go
示例12: setupScene
func setupScene() {
gl.ClearColor(0, 0, 0, 0)
if texDel {
gl.DeleteTextures(1, tex1)
}
tex1 = newTexture(*slides[selCell].getImage(monWidth, monHeight))
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(-1, 1, -1, 1, 1.0, 10.0)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
texDel = true
}
开发者ID:lordwelch,项目名称:PresentationApp,代码行数:16,代码来源:glfw.go
示例13: Update
func (view *MenuView) Update(t, dt float64) {
view.checkButtons()
view.texture.Purge()
window := view.director.window
w, h := window.GetFramebufferSize()
sx := 256 + margin*2
sy := 240 + margin*2
nx := (w - border*2) / sx
ny := (h - border*2) / sy
ox := (w-nx*sx)/2 + margin
oy := (h-ny*sy)/2 + margin
if nx < 1 {
nx = 1
}
if ny < 1 {
ny = 1
}
view.nx = nx
view.ny = ny
view.clampSelection()
gl.PushMatrix()
gl.Ortho(0, float64(w), float64(h), 0, -1, 1)
view.texture.Bind()
for j := 0; j < ny; j++ {
for i := 0; i < nx; i++ {
x := float32(ox + i*sx)
y := float32(oy + j*sy)
index := nx*(j+view.scroll) + i
if index >= len(view.paths) {
continue
}
path := view.paths[index]
tx, ty, tw, th := view.texture.Lookup(path)
drawThumbnail(x, y, tx, ty, tw, th)
}
}
view.texture.Unbind()
if int((t-view.t)*4)%2 == 0 {
x := float32(ox + view.i*sx)
y := float32(oy + view.j*sy)
drawSelection(x, y, 8, 4)
}
gl.PopMatrix()
}
开发者ID:sunclx,项目名称:nes,代码行数:44,代码来源:menuview.go
示例14: Init
func Init() {
width, height, regionid := 80, 60, 1
gl.Ortho(0, 40, 0, 30, -1, 3)
rooms := generate.PlaceRooms(width, height, 100, 2, 10) // Place rooms between 3x3 and 5x5 in a 40 x 30 grid of tiles
bakedRooms, regionid := generate.BakeRooms(rooms, width, height, regionid) // Render rooms down to a grid
maze, regionid := generate.MakeMazes(bakedRooms, width, height, regionid) // Finish up by generating mazes between rooms
connect, regionid := generate.ConnectRooms(maze, width, height, regionid)
trimmed := generate.TrimPaths(connect, width, height)
x, y := 0, 0
LOOP:
for i := 0; i < width; i++ {
for j := 0; j < height; j++ {
if trimmed[(j*width)+i] != 0 {
x, y = i, j
break LOOP
}
}
}
baked := generate.BakeForTileset(trimmed, width, height)
texture := newTexture("assets/terminal.png")
game = GameData{width, height, baked, x, y, texture}
}
开发者ID:Geemili,项目名称:maze-rogue,代码行数:24,代码来源:maze-rogue.go
示例15: main
func main() {
runtime.LockOSThread()
if err := glfw.Init(); err != nil {
panic(err)
}
defer glfw.Terminate()
window, err := glfw.CreateWindow(800, 600, "fontstash example", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
glfw.SwapInterval(1)
gl.Init()
stash := fontstash.New(512, 512)
clearSansRegular, err := stash.AddFont(filepath.Join("..", "ClearSans-Regular.ttf"))
if err != nil {
panic(err)
}
clearSansItalic, err := stash.AddFont(filepath.Join("..", "ClearSans-Italic.ttf"))
if err != nil {
panic(err)
}
clearSansBold, err := stash.AddFont(filepath.Join("..", "ClearSans-Bold.ttf"))
if err != nil {
panic(err)
}
droidJapanese, err := stash.AddFont(filepath.Join("..", "DroidSansJapanese.ttf"))
if err != nil {
panic(err)
}
gl.ClearColor(0.3, 0.3, 0.32, 1.)
for !window.ShouldClose() {
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, 800, 0, 600, -1, 1)
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.Disable(gl.DEPTH_TEST)
gl.Color4ub(255, 255, 255, 255)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.Disable(gl.TEXTURE_2D)
gl.Begin(gl.QUADS)
gl.Vertex2i(0, -5)
gl.Vertex2i(5, -5)
gl.Vertex2i(5, -11)
gl.Vertex2i(0, -11)
gl.End()
sx := float64(100)
sy := float64(250)
stash.BeginDraw()
dx := sx
dy := sy
dx = stash.DrawText(clearSansRegular, 24, dx, dy, "The quick ", [4]float32{0, 0, 0, 1})
dx = stash.DrawText(clearSansItalic, 48, dx, dy, "brown ", [4]float32{1, 1, 0.5, 1})
dx = stash.DrawText(clearSansRegular, 24, dx, dy, "fox ", [4]float32{0, 1, 0.5, 1})
_, _, lh := stash.VMetrics(clearSansItalic, 24)
dx = sx
dy -= lh * 1.2
dx = stash.DrawText(clearSansItalic, 24, dx, dy, "jumps over ", [4]float32{0, 1, 1, 1})
dx = stash.DrawText(clearSansBold, 24, dx, dy, "the lazy ", [4]float32{1, 0, 1, 1})
dx = stash.DrawText(clearSansRegular, 24, dx, dy, "dog.", [4]float32{0, 1, 0, 1})
dx = sx
dy -= lh * 1.2
dx = stash.DrawText(clearSansRegular, 12, dx, dy, "Now is the time for all good men to come to the aid of the party.", [4]float32{0, 0, 1, 1})
_, _, lh = stash.VMetrics(clearSansItalic, 12)
dx = sx
dy -= lh * 1.2 * 2
dx = stash.DrawText(clearSansItalic, 18, dx, dy, "Ég get etið gler án þess að meiða mig.", [4]float32{1, 0, 0, 1})
_, _, lh = stash.VMetrics(clearSansItalic, 18)
dx = sx
dy -= lh * 1.2
stash.DrawText(droidJapanese, 18, dx, dy, "どこかに置き忘れた、サングラスと打ち明け話。", [4]float32{1, 1, 1, 1})
stash.EndDraw()
gl.Enable(gl.DEPTH_TEST)
window.SwapBuffers()
glfw.PollEvents()
}
}
开发者ID:shibukawa,项目名称:fontstash.go,代码行数:96,代码来源:fontstash.go
示例16: main
//.........这里部分代码省略.........
}
img := settlementImage(g.GetCurrentPlayer().Color)
// TODO duplicate code:
img.DrawColoredAtXY(x-img.Width/2, y-(5*img.Height/8), color)
}
if state == buildingRoad && movingRoadVisible && mouseIn {
color := [4]float32{1, 1, 1, 1}
x, y := edgeToScreen(movingRoadEdge)
if !(!movingRoadVisible || !g.CanBuildRoadAt(movingRoadEdge)) {
img := roadImage(movingRoadEdge, g.GetCurrentPlayer().Color)
// TODO duplicate code:
img.DrawColoredAtXY(x-img.Width/2, y-(5*img.Height/8), color)
}
}
x, y, w, h := tileToScreen(g.Robber.Position)
robber := glImages["robber"]
robber.DrawAtXY(x+(w-robber.Width)/2, y+(h-robber.Height)/2)
}
}
buildMenu := &menu{color{0.5, 0.4, 0.8, 0.9}, rect{0, 500, 800, 250}}
showCursor := 0
start := time.Now()
frames := 0
window.SetSize(windowW, windowH)
for !window.ShouldClose() {
glfw.PollEvents()
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
const controlsHeight = 0 // TODO reserve are for stats and menus
gameW, gameH := 7.0*200, 7.0*tileYOffset+tileSlopeHeight+controlsHeight
gameRatio := gameW / gameH
windowRatio := float64(windowW) / float64(windowH)
var left, right, bottom, top float64
if windowRatio > gameRatio {
// window is wider than game => borders left and right
border := (windowRatio*gameH - gameW) / 2
left, right = -border, border+gameW
bottom, top = gameH, 0
} else {
// window is higher than game => borders on top and bottom
border := (gameW/windowRatio - gameH) / 2
left, right = 0, gameW
bottom, top = gameH+border, -border
}
gl.Ortho(left, right, bottom, top, -1, 1)
cam.Left, cam.Right, cam.Bottom, cam.Top = left, right, bottom, top
gl.ClearColor(0, 0, 1, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
drawGame()
lines = make([]string, g.PlayerCount*6)
for i, player := range g.GetPlayers() {
lines[i*6+0] = fmt.Sprintf("player %v has %v ore", i+1, player.Resources[game.Ore])
lines[i*6+1] = fmt.Sprintf("player %v has %v grain", i+1, player.Resources[game.Grain])
lines[i*6+2] = fmt.Sprintf("player %v has %v lumber", i+1, player.Resources[game.Lumber])
lines[i*6+3] = fmt.Sprintf("player %v has %v wool", i+1, player.Resources[game.Wool])
lines[i*6+4] = fmt.Sprintf("player %v has %v brick", i+1, player.Resources[game.Brick])
}
if len(lines) > 0 {
stash.BeginDraw()
const fontSize = 35
const cursorText = "" //"_"
cursor := ""
if showCursor > 60 {
cursor = cursorText
}
for i, line := range lines {
output := line
if i == len(lines)-1 {
output += cursor
}
font.Write(output, 0, float64(i+1)*fontSize)
}
if len(lines) == 0 {
font.Write(cursor, 0, fontSize)
}
stash.EndDraw()
}
buildMenu.draw()
window.SwapBuffers()
showCursor = (showCursor + 1) % 120
frames++
if time.Now().Sub(start).Seconds() >= 1.0 {
fmt.Println(frames, "fps")
frames = 0
start = time.Now()
}
}
}
开发者ID:gonutz,项目名称:settlers,代码行数:101,代码来源:main_glfw.go
示例17: main
func main() {
if err := glfw.Init(nopContextWatcher{}); err != nil {
panic(err)
}
defer glfw.Terminate()
window, err := glfw.CreateWindow(1536, 960, "", nil, nil)
if err != nil {
panic(err)
}
globalWindow = window
window.MakeContextCurrent()
window.SetInputMode(glfw.CursorMode, glfw.CursorHidden)
if err := gl.Init(); nil != err {
panic(err)
}
glfw.SwapInterval(1) // Vsync.
framebufferSizeCallback := func(w *glfw.Window, framebufferSize0, framebufferSize1 int) {
gl.Viewport(0, 0, int32(framebufferSize0), int32(framebufferSize1))
var windowSize [2]int
windowSize[0], windowSize[1] = w.GetSize()
// Update the projection matrix
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, float64(windowSize[0]), float64(windowSize[1]), 0, -1, 1)
gl.MatrixMode(gl.MODELVIEW)
}
{
var framebufferSize [2]int
framebufferSize[0], framebufferSize[1] = window.GetFramebufferSize()
framebufferSizeCallback(window, framebufferSize[0], framebufferSize[1])
}
window.SetFramebufferSizeCallback(framebufferSizeCallback)
var inputEventQueue []InputEvent
mousePointer = &Pointer{VirtualCategory: POINTING}
var lastMousePos mgl64.Vec2
lastMousePos[0], lastMousePos[1] = window.GetCursorPos()
MousePos := func(w *glfw.Window, x, y float64) {
//fmt.Println("MousePos:", x, y)
inputEvent := InputEvent{
Pointer: mousePointer,
EventTypes: map[EventType]bool{SLIDER_EVENT: true, AXIS_EVENT: true},
InputId: 0,
Buttons: nil,
Sliders: []float64{x - lastMousePos[0], y - lastMousePos[1]}, // TODO: Do this in a pointer general way?
Axes: []float64{x, y},
}
lastMousePos[0] = x
lastMousePos[1] = y
inputEventQueue = EnqueueInputEvent(inputEvent, inputEventQueue)
}
window.SetCursorPosCallback(MousePos)
MousePos(window, lastMousePos[0], lastMousePos[1])
gl.ClearColor(0.85, 0.85, 0.85, 1)
rand.Seed(4)
var widget = newMultitouchTestBoxWidget(mgl64.Vec2{600, 300}, rand.Intn(6))
var widget2 = newMultitouchTestBoxWidget(mgl64.Vec2{600 + 210, 300 + 210}, rand.Intn(6))
var widget3 = newMultitouchTestBoxWidget(mgl64.Vec2{600 + 210, 300}, rand.Intn(6))
var widget4 = newMultitouchTestBoxWidget(mgl64.Vec2{600, 300 + 210}, rand.Intn(6))
go func() {
<-time.After(5 * time.Second)
log.Println("trigger!")
widget.color++ // HACK: Racy.
glfw.PostEmptyEvent()
}()
for !window.ShouldClose() {
//glfw.PollEvents()
glfw.WaitEvents()
// Process Input.
inputEventQueue = ProcessInputEventQueue(inputEventQueue)
gl.Clear(gl.COLOR_BUFFER_BIT)
widget.Render()
widget2.Render()
widget3.Render()
widget4.Render()
mousePointer.Render()
window.SwapBuffers()
log.Println("swapped buffers")
runtime.Gosched()
}
}
开发者ID:rexposadas,项目名称:gx,代码行数:100,代码来源:main.go
示例18: main
func main() {
flag.Parse()
go func() {
http.ListenAndServe("localhost:6060", nil)
}()
go func() {
for {
runtime.GC()
time.Sleep(1)
}
}()
if err := glfw.Init(); err != nil {
log.Fatalln("failed to initialize glfw:", err)
}
defer glfw.Terminate()
glfw.WindowHint(glfw.Resizable, glfw.True)
glfw.WindowHint(glfw.Visible, glfw.False) // do not steal focus
glfw.WindowHint(glfw.Samples, 4)
glfw.WindowHint(glfw.ContextVersionMajor, 2)
glfw.WindowHint(glfw.ContextVersionMinor, 1)
window, err := glfw.CreateWindow(800, 600, "Spector", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
window.Restore()
window.SetPos(32, 64)
if err := gl.Init(); err != nil {
panic(err)
}
if err := gl.GetError(); err != 0 {
fmt.Println("INIT", err)
}
startnano := time.Now().UnixNano()
DrawList := draw.NewList()
for !window.ShouldClose() {
start := qpc.Now()
if window.GetKey(glfw.KeyEscape) == glfw.Press {
return
}
now := float64(time.Now().UnixNano()-startnano) / 1e9
width, height := window.GetSize()
{ // reset window
gl.MatrixMode(gl.MODELVIEW)
gl.LoadIdentity()
gl.Viewport(0, 0, int32(width), int32(height))
gl.Ortho(0, float64(width), float64(height), 0, 30, -30)
gl.ClearColor(1, 1, 1, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
}
DrawList.Reset()
DrawList.AddRectFill(&draw.Rectangle{
draw.Vector{10, 10},
draw.Vector{50, 50},
}, draw.Red)
CircleRadius := float32(50.0 * math.Sin(now*1.3))
DrawList.AddCircle(
draw.Vector{100, 100}, CircleRadius, draw.Red)
DrawList.AddArc(
draw.Vector{200, 100}, CircleRadius/2+50,
float32(now),
float32(math.Sin(now)*10),
draw.ColorHSL(float32(math.Sin(now*0.3)), 0.8, 0.5))
LineWidth := float32(math.Sin(now*2.1)*5 + 5)
LineCount := int(width / 8)
line := make([]draw.Vector, LineCount)
for i := range line {
r := float64(i) / float64(LineCount-1)
line[i].X = float32(r) * float32(width)
line[i].Y = float32(height)*0.5 + float32(math.Sin(r*11.8+now)*100)
}
DrawList.AddLine(line[:], LineWidth,
draw.ColorHSL(float32(math.Sin(now*0.3)), 0.6, 0.6))
CircleCount := int(width / 8)
circle := make([]draw.Vector, CircleCount)
for i := range circle {
p := float64(i) / float64(CircleCount)
a := now + p*math.Pi*2
w := math.Sin(p*62)*20.0 + 100.0
circle[i].X = float32(width)*0.5 + float32(math.Cos(a)*w)
circle[i].Y = float32(height)*0.5 + float32(math.Sin(a)*w)
//.........这里部分代码省略.........
开发者ID:egonelbre,项目名称:spector,代码行数:101,代码来源:main.go
示例19: setViewport
func setViewport(width int, height int) {
gl.Viewport(0, 0, int32(width), int32(height))
gl.Ortho(-float64(width)/2, float64(width)/2,
-float64(height)/2, float64(height)/2, -1.0, 1.0)
}
开发者ID:fmd,项目名称:gogol,代码行数:6,代码来源:window.go
示例20: main
func main() {
if err := glfw.Init(); err != nil {
panic(err)
}
defer glfw.Terminate()
glfw.WindowHint(glfw.Samples, 8) // Anti-aliasing.
window, err := glfw.CreateWindow(400, 400, "", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
if err := gl.Init(); err != nil {
panic(err)
}
glfw.SwapInterval(1)
//window.SetPos(50, 600)
//window.SetPos(1600, 600)
//window.SetPos(1275, 300)
//window.SetPos(1200, 300)
framebufferSizeCallback := func(w *glfw.Window, framebufferSize0, framebufferSize1 int) {
gl.Viewport(0, 0, int32(framebufferSize0), int32(framebufferSize1))
var windowSize [2]int
windowSize[0], windowSize[1] = w.GetSize()
// Update the projection matrix.
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity()
gl.Ortho(0, float64(windowSize[0]), float64(windowSize[1]), 0, -1, 1)
gl.MatrixMode(gl.MODELVIEW)
}
{
var framebufferSize [2]int
framebufferSize[0], framebufferSize[1] = window.GetFramebufferSize()
framebufferSizeCallback(window, framebufferSize[0], framebufferSize[1])
}
window.SetFramebufferSizeCallback(framebufferSizeCallback)
go func() {
<-time.After(5 * time.Second)
log.Println("trigger!")
boxUpdated = true
glfw.PostEmptyEvent()
}()
//gl.ClearColor(0.8, 0.3, 0.01, 1)
gl.ClearColor(247.0/255, 247.0/255, 247.0/255, 1)
var spinner int
for !window.ShouldClose() && glfw.Press != window.GetKey(glfw.KeyEscape) {
glfw.WaitEvents()
//glfw.PollEvents()
gl.Clear(gl.COLOR_BUFFER_BIT)
drawSpinner(spinner)
spinner++
drawBox()
window.SwapBuffers()
log.Println("swapped buffers")
//runtime.Gosched()
}
}
开发者ID:taliszhou,项目名称:Conception-go,代码行数:73,代码来源:main.go
注:本文中的github.com/go-gl/gl/v2/1/gl.Ortho函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论