纯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
}

效果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Logo

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

更多推荐