纯go语言ui框架之高级组件:第85个组件3D地球
·
纯go语言实现flutter风格桌面GUI框架:ui
1、支持windows 、linux、unix、masOS、ios、android等操作系统
2、代码风格和flutter基本差不多,如果会flutter和go语言无缝切换上手,如果熟悉go语言很快上手。
3、框架有上100个组件,足以支持绝大部复杂应用
4、支持
1)手动刷新ui
2)定时更新ui
3)指定时间范围实时刷新ui
4)手动开启实时刷新ui和手动关闭实时刷新ui
5)全局实时刷新
————————————————
1、纯go语言ui框架第85个组件:3D地球
这个是可以旋转的3D地球
完整代码
package main
import (
"fmt"
"image"
_ "image/jpeg"
_ "image/png"
"os"
"render/layout"
"render/widget/material"
"ui"
"echart/chart3d"
"echart/glchart"
)
func main() {
globe := glchart.NewGlobe3DGL(-1, -1)
globe.SetLightDir(chart3d.Vec3{X: 0.7, Y: 0.3, Z: 0.5})
globe.Camera.SetZoomRange(0.05, 500) // 最小放大1.5倍,最大缩小100倍
// 加载地球纹理 earth.jpg
if img, err := loadTexture("earth.jpg"); err == nil {
globe.SetTexture(img)
fmt.Println("已加载地球纹理: earth.jpg")
} else if img, err := loadTexture("earth.png"); err == nil {
globe.SetTexture(img)
fmt.Println("已加载地球纹理: earth.png")
} else {
fmt.Println("未找到 earth.jpg/earth.png,使用程序生成纹理")
}
// 加载星空背景 starfield.jpg
if img, err := loadTexture("starfield.jpg"); err == nil {
globe.SetBackground(img)
fmt.Println("已加载星空背景: starfield.jpg")
} else if img, err := loadTexture("starfield.png"); err == nil {
globe.SetBackground(img)
fmt.Println("已加载星空背景: starfield.png")
} else {
fmt.Println("未找到 starfield.jpg/starfield.png,无背景")
}
fmt.Println("GL 3D 地球 — GPU 硬件加速渲染(拖拽旋转,滚轮缩放)")
app := ui.NewApp("3D 地球", 700, 700)
app.SetRoot(ui.WidgetFunc(func(gtx layout.Context, th *material.Theme) layout.Dimensions {
return globe.Layout(gtx, th)
}))
app.Run()
}
// loadTexture 加载纹理图片
func loadTexture(path string) (image.Image, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
img, _, err := image.Decode(f)
return img, err
}
效果:



openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)