g3n / engine

Go 3D Game Engine (http://g3n.rocks)
https://discord.gg/NfaeVr8zDg
BSD 2-Clause "Simplified" License
2.74k stars 292 forks source link

Form display problem on mac os #263

Open fxrz12 opened 2 years ago

fxrz12 commented 2 years ago

Due to the high resolution of the computer screen, the scene display is only a quarter of the interface, which needs to be modified: //width, height := a.GetSize() width, height := a.GetFramebufferSize() //replace it worked~

package main

import (
    "fmt"
    "github.com/g3n/engine/app"
    "github.com/g3n/engine/camera"
    "github.com/g3n/engine/core"
    "github.com/g3n/engine/geometry"
    "github.com/g3n/engine/gls"
    "github.com/g3n/engine/graphic"
    "github.com/g3n/engine/gui"
    "github.com/g3n/engine/light"
    "github.com/g3n/engine/material"
    "github.com/g3n/engine/math32"
    "github.com/g3n/engine/renderer"
    "github.com/g3n/engine/util/helper"
    "github.com/g3n/engine/window"
    "time"
)

func main() {

    // Create application and scene
    a := app.App("",800,600)
    scene := core.NewNode()

    // Set the scene to be managed by the gui manager
    gui.Manager().Set(scene)

    // Create perspective camera
    cam := camera.New(1)
    cam.SetPosition(0, 0, 3)
    scene.Add(cam)
    //scene.SetScale(2,2,1)
    // Set up orbit control for the camera
    camera.NewOrbitControl(cam)

    // Set up callback to update viewport and camera aspect ratio when the window is resized
    onResize := func(evname string, ev interface{}) {
        // Get framebuffer size and update viewport accordingly
        //width, height := a.GetSize()
        width, height := a.GetFramebufferSize() //replace
        a.Gls().Viewport(0, 0, int32(width), int32(height))
        // Update the camera's aspect ratio
        cam.SetAspect(float32(width) / float32(height))
    }
    a.Subscribe(window.OnWindowSize, onResize)
    onResize("", nil)

    // Create a blue torus and add it to the scene
    geom := geometry.NewTorus(1, .4, 12, 32, math32.Pi*2)
    mat := material.NewStandard(math32.NewColor("DarkBlue"))
    mesh := graphic.NewMesh(geom, mat)
    scene.Add(mesh)

    // Create and add a button to the scene
    btn := gui.NewButton("Make Red")
    //btn.SetPosition(0, 0)
    //btn.Panel.SetSize(10, 6)

    btn.Subscribe(gui.OnClick, func(name string, ev interface{}) {
        fmt.Println(a.IWindow.GetScale())
        fmt.Println(a.IWindow.FullScreen())
        fmt.Println(a.GetScale())
        mat.SetColor(math32.NewColor("DarkRed"))
    })
    scene.Add(btn)

    // Create and add lights to the scene
    scene.Add(light.NewAmbient(&math32.Color{1.0, 1.0, 1.0}, 0.8))
    pointLight := light.NewPoint(&math32.Color{1, 1, 1}, 5.0)
    pointLight.SetPosition(1, 0, 2)
    scene.Add(pointLight)

    // Create and add an axis helper to the scene
    scene.Add(helper.NewAxes(0.5))

    // Set background color to gray
    a.Gls().ClearColor(0.5, 0.5, 0.5, 1.0)

    // Run the application
    a.Run(func(renderer *renderer.Renderer, deltaTime time.Duration) {
        a.Gls().Clear(gls.DEPTH_BUFFER_BIT | gls.STENCIL_BUFFER_BIT | gls.COLOR_BUFFER_BIT)
        renderer.Render(scene, cam)
    })
}
fxrz12 commented 2 years ago

found that someone met:Demos (and example code) displaying in quarter of window scene #241