Bibliothèque Go gratuite pour le rendu et la transformation 3D
Principale bibliothèque graphique Go 3D open source pour travailler avec des maillages 3D, des ombrages et matériaux personnalisés, des transformations 3D, un rendu multithread, l'anti-aliasing, etc.
Qu'est‑ce que la bibliothèque FauxGL ?
FauxGL est une bibliothèque 3D Go open source innovante créée par Michael Fogleman, offrant un rendu 3D logiciel purement en Go, sans dépendances externes. Cette boîte à outils légère mais puissante est idéale pour les développeurs recherchant une API 3D Go gratuite pour des solutions graphiques portables. Elle prend en charge des fonctionnalités essentielles telles que les transformations de sommets, l'importation et la manipulation de maillages 3D, l'ombrage personnalisé, la gestion des matériaux, le contrôle de la perspective et de la caméra, le rastérisation de triangles, l'interpolation des couleurs, le mapping de textures, le rendu en fil de fer, le tampon de profondeur et la suppression des surfaces cachées. Les développeurs peuvent facilement créer des dessins 3D STL, ajouter des sections à des fichiers 3D et gérer le rendu de diagrammes 3D avec précision, ce qui en fait un choix polyvalent pour les projets nécessitant un contrôle élevé du pipeline de rendu.
Contrairement aux solutions dépendantes du GPU comme OpenGL ou DirectX, FauxGL fonctionne entièrement sur le CPU, ce qui le rend idéal pour les environnements sans accélération matérielle ou où un contrôle direct du rendu est nécessaire. Bien qu'il ne soit pas conçu pour les jeux à haute fréquence d'images, il excelle dans le rendu hors ligne, les tests d'algorithmes, l'usage éducatif et la génération de visualisations. FauxGL peut travailler avec les fichiers 3D OBJ et FBX, charger des formats tels que STL, PLY et 3DS, et même convertir des fichiers 3D en PDF lorsqu'il est intégré à des flux de travail plus larges. Il offre également des fonctions intégrées pour créer des plans, des sphères, des cubes, des cylindres et des cônes, permettant un rendu rapide des entités de fichiers 3D et l'application de transformations aux diagrammes 3D. FauxGL se présente comme une démonstration claire et expressive des capacités de Go dans le rendu graphique 3D basé sur le CPU.
Premiers pas avec FauxGL
La méthode recommandée pour installer FauxGL est d'utiliser GitHub. Veuillez utiliser la commande suivante pour une installation fluide.
Installez l'API FauxGL via la commande Get
go get github.com/fogleman/fauxgl Vous pouvez télécharger la bibliothèque partagée compilée depuis le dépôt Github.
Rendu purement basé sur le CPU via l'API Go
La bibliothèque open source FauxGL prend en charge le rendu purement basé sur le CPU et n'utilise pas du tout le GPU. Chaque triangle, chaque pixel et chaque transformation sont calculés uniquement sur le CPU. Cela en fait un choix idéal pour les environnements de rendu sans tête (comme les serveurs) ou les tâches simples de traitement graphique sans dépendance au GPU. Le script de code suivant montre comment configurer une scène dans les applications Go.
Comment configurer une scène pour un rendu purement basé sur le CPU via la bibliothèque Go ?
import "github.com/fogleman/fauxgl"
const (
width = 1024
height = 768
)
func main() {
context := fauxgl.NewContext(width, height)
context.ClearColorBufferWithColor(fauxgl.Black)
context.ClearDepthBuffer()
// Now you can start drawing models or primitives!
}
Chargement et transformation de modèles 3D
La bibliothèque open source FauxGL offre un support complet pour le chargement et la manipulation de modèles 3D dans les applications Go. Une fois chargés, vous pouvez facilement appliquer des transformations telles que le redimensionnement, la rotation, le changement d'échelle et la translation. Voici un exemple simple qui montre comment les développeurs peuvent charger les formats Wavefront OBJ, l'un des formats de fichiers 3D les plus courants, et appliquer des transformations à l'aide de la bibliothèque Go.
Comment charger un modèle 3D et appliquer des transformations via la bibliothèque Go ?
mesh, err := fauxgl.LoadOBJ("model.obj")
if err != nil {
panic(err)
}
// Apply transformations
matrix := fauxgl.Identity().
Scale(fauxgl.Vector{1, 1, 1}).
Rotate(fauxgl.V(0, 1, 0), fauxgl.Radians(45)).
Translate(fauxgl.Vector{0, 0, -5})
mesh.Transform(matrix)
Opérations vectorielles via la bibliothèque Go
La bibliothèque MathGL offre un support étendu pour les mathématiques des vecteurs et des matrices, y compris les opérations sur les vecteurs et matrices 2D, 3D et 4D. Elles sont essentielles pour gérer les positions, directions, vitesses et autres données spatiales. Elle prend en charge les opérations Add, Sub, Dot, Cross, Normalize, etc., ainsi que plusieurs types de précision (mgl32 pour float32, mgl64 pour float64). Voici un exemple simple qui montre comment les développeurs peuvent effectuer différentes opérations vectorielles dans leurs applications Go.
Comment effectuer des opérations vectorielles via la bibliothèque Go ?
package main
import (
"fmt"
"github.com/go-gl/mathgl/mgl32"
)
func main() {
// Create two 3D vectors
v1 := mgl32.Vec3{1, 2, 3}
v2 := mgl32.Vec3{4, 5, 6}
// Vector addition
sum := v1.Add(v2)
fmt.Println("Vector sum:", sum) // [5 7 9]
// Dot product
dot := v1.Dot(v2)
fmt.Println("Dot product:", dot) // 32
// Cross product
cross := v1.Cross(v2)
fmt.Println("Cross product:", cross) // [-3 6 -3]
}
Ombrage personnalisé et matériaux via Go
Vous pouvez définir comment les objets sont ombrés en utilisant des shaders personnalisables dans les applications Go. La bibliothèque open source FauxGL offre un système flexible pour écrire votre propre logique d’ombrage — vous permettant de contrôler la couleur, l’éclairage et même des effets personnalisés au niveau du pixel. Ce qui suit montre comment les développeurs peuvent réaliser un ombrage plat simple dans les applications Go.
Comment réaliser un ombrage plat simple dans les applications Go ?
shader := func(vertex fauxgl.Vertex) fauxgl.Color {
normal := vertex.Normal.Normalize()
light := fauxgl.Vector{1, 1, 1}.Normalize()
intensity := normal.Dot(light)
baseColor := fauxgl.HexColor(0x3498db) // Light blue color
return baseColor.MulScalar(intensity)
}
context.Shader = shader
context.DrawMesh(mesh)