G3N Banner

Godoc Go Report Card

G3N - Go 3D Game Engine

G3N (pronounced "gen") is a cross-platform OpenGL 3D game engine written in Go. ### **To see G3N in action try the [G3N demo](https://github.com/g3n/g3nd) or the [Gokoban](https://github.com/danaugrs/gokoban) award winning game.**

G3ND In Action

## Highlighted Projects [Gokoban - 3D Puzzle Game (_1st place in the 2017 Gopher Game Jam_)](https://github.com/danaugrs/gokoban) ## Dependencies **G3N requires Go 1.8+** The engine requires an OpenGL driver and a GCC-compatible C compiler to be installed. On Unix-based systems the engine depends on some C libraries that can be installed using the appropriate distribution package manager. * For Ubuntu/Debian-like Linux distributions, install the following packages: * `xorg-dev` * `libgl1-mesa-dev` * `libopenal1` * `libopenal-dev` * `libvorbis0a` * `libvorbis-dev` * `libvorbisfile3` * For Fedora, install the required packages: ``` $ sudo dnf -y install xorg-x11-proto-devel mesa-libGL mesa-libGL-devel openal-soft \ openal-soft-devel libvorbis libvorbis-devel glfw-devel libXi-devel ``` * For CentOS 7, enable the EPEL repo then install the same packages as for Fedora above: ``` $ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ``` Remember to use `yum` instead of `dnf` for the package installation command. * For Windows, the necessary audio libraries sources and DLLs are supplied but they need to be installed manually. Please see [Audio libraries for Windows](audio/windows) for details. We tested the Windows build using the [mingw-w64](https://mingw-w64.org) toolchain. * For macOS, you should install the development files of OpenAL and Vorbis. If you are using [Homebrew](https://brew.sh/) as your package manager, run: `brew install libvorbis openal-soft` ## Installation The following command will download the engine along with all its Go dependencies: `go get -u github.com/g3n/engine/...` ## Features * Cross-platform: Windows, Linux, and macOS * Integrated GUI (graphical user interface) with many widgets * Hierarchical scene graph - nodes can contain other nodes * 3D spatial audio via OpenAL (.wav, .ogg) * Real-time lighting: ambient, directional, point, and spot lights * Physically-based rendering: fresnel reflectance, geometric occlusion, microfacet distribution * Model loaders: glTF (.gltf, .glb), Wavefront OBJ (.obj), and COLLADA (.dae) * Geometry generators: box, sphere, cylinder, torus, etc... * Geometries support morph targets and multimaterials * Support for animated sprites based on sprite sheets * Perspective and ortographic cameras * Text image generation and support for TrueType fonts * Image textures can be loaded from GIF, PNG or JPEG files * Animation framework for position, rotation, and scale of objects * Support for user-created GLSL shaders: vertex, fragment, and geometry shaders * Integrated basic physics engine (experimental/incomplete) * Support for HiDPI displays

G3N Banner

## Hello G3N The code below is a basic "hello world" application ([hellog3n](https://github.com/g3n/demos/tree/master/hellog3n)) that shows a blue torus. You can download and install `hellog3n` via: `go get -u github.com/g3n/demos/hellog3n` For more complex demos please see the [G3N demo program](https://github.com/g3n/g3nd). ```Go package main import ( "github.com/g3n/engine/util/application" "github.com/g3n/engine/geometry" "github.com/g3n/engine/material" "github.com/g3n/engine/math32" "github.com/g3n/engine/graphic" "github.com/g3n/engine/light" ) func main() { app, _ := application.Create(application.Options{ Title: "Hello G3N", Width: 800, Height: 600, }) // Create a blue torus and add it to the scene geom := geometry.NewTorus(1, .4, 12, 32, math32.Pi*2) mat := material.NewPhong(math32.NewColor("DarkBlue")) torusMesh := graphic.NewMesh(geom, mat) app.Scene().Add(torusMesh) // Add lights to the scene ambientLight := light.NewAmbient(&math32.Color{1.0, 1.0, 1.0}, 0.8) app.Scene().Add(ambientLight) pointLight := light.NewPoint(&math32.Color{1, 1, 1}, 5.0) pointLight.SetPosition(1, 0, 2) app.Scene().Add(pointLight) // Add an axis helper to the scene axis := graphic.NewAxisHelper(0.5) app.Scene().Add(axis) app.CameraPersp().SetPosition(0, 0, 3) app.Run() } ```

hellog3n Screenshot

## Documentation For the engine API reference, please see [![GoDoc](https://godoc.org/github.com/g3n/engine?status.svg)](https://godoc.org/github.com/g3n/engine). There is also the beginning of a Getting Started Guide, and a newly created list of Guides and Tutorials: * https://github.com/g3n/engine/wiki/Getting-Started-(WIP) * https://github.com/g3n/engine/wiki/Guides-and-Tutorials Along with those, a good way to learn G3N is to step through the source code of the [demos](https://github.com/g3n/g3nd). ## Contributing If you find a bug or create a new feature you are encouraged to send pull requests! ## Community Join our [channel](https://gophers.slack.com/messages/g3n) on Gophers Slack ([Click here to register for Gophers Slack](https://invite.slack.golangbridge.org/)). It's a great way to have your questions answered quickly by the G3N community.