Giter VIP home page Giter VIP logo

vu's Introduction

Vu

Vu (Virtual Universe) is a 3D engine based on Go (Golang) programming language. Vu is composed of packages, detailed in GoDoc, and briefly summarized below. More getting started and background information is available on the Wiki

Vu is a small engine intended for simple games. It currently supports Vulkan on Windows.

  • vu/physics handles spheres and convex hulls.
  • vu/render uses Vulkan 1.3 without any extensions.
  • vu/device supports a basic window, button presses, mouse clicks, and mouse movement.

Vu started as a learning project for Go and 3D programming. It is currently being used by the author to develop games and other 3D applications.

Sub packages

  • audio Positions and plays sounds in a 3D environment.
  • device Links the application to native OS specific window and user events.
  • eg Examples that both demonstrate and test the vu engine.
  • load Asset loaders including models, textures, audio, shaders, and bitmapped fonts.
  • math/lin Linear math library for vectors, matricies, and quaternions.
  • physics Repositions bodies based on simulated physics.
  • render 3D drawing and graphics interface.

Build and Test

  • Clone the repo, ie: git clone [email protected]:gazed/vu.git
  • Use go generate in vu/assets/shaders to build the shaders. Requires glslc executable.
  • go build in vu\eg and run the examples.

Build Dependencies

Credit Where Credit is Due

Vu is built on the generous sharing of code and information by many talented, kind, and lucid developers. Thank you in particular to:

  • https://www.youtube.com/@TravisVroman Travis Vroman brilliantly explains how to use Vulkan in a game engine. His video devlog and code base provides an overall context for Vulkan that is difficult to get from the specification. Want a Vulkan C engine? Checkout https://github.com/travisvroman/kohi Apache License.

  • https://github.com/bbredesen/go-vk MIT License. Go bindings for Vulkan that does not required c-go and a C compiler. This is a huge amount of work due to the size and complexity of Vulkan. The generated bindings were dragged directly into vu/internal/render/vk

  • https://github.com/felipeek/raw-physics MIT License. Raw-physics provides the ability to collide spheres and convex hulls in less than 4000 lines of code. This was perfect for porting from C into Go vu/physics pretty much line for line.

  • https://github.com/lxn/win Go bindings for the Windows API that do not require c-go and a C compiler. The parts needed were put directly into vu/internal/device/win along with the original License.

  • https://github.com/qmuntal/gltf BSD 2-Clause License. GLTF helps tremendously for importing 3D model data and thanks to qmuntal it was possible to pull a few thousand lines of Go code into vu/internal/load/gltf and get a working importer.

vu's People

Contributors

anonymous2ch avatar gazed avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vu's Issues

Importing a heightmap into VU

Hi! How would one go about importing a heightmap into VU (something like this)? I am interested in simulating some projectile collisions with terrain. Are there other options apart from adding boxes on every position to recreate the terrain mesh?

Doesn't compile on Ubuntu (linux).

Currently the project does not compile on Ubuntu, while browsing through the code I found this:

// FUTURE
// Currently the most popular linux distro (ubuntu) is replacing the xserver
// display server with Mir. An example Mir shell can be found at:
//     http://unity.ubuntu.com/mir/demo_shell_8cpp-example.html
// Work on the linux portion will be delayed until there is an
// ubuntu version that fully supports Mir.

// The ubuntu (linux) native layer implementation.
// This wraps the linux windows API's (where the real work is done).

// // The following block is C code and cgo directvies.

You can use Qt5 to create an openGL context and this is supported under Mir.
Ubuntu on the phone fully supports Mir and I have been able to get openGL contexts working under QT5 with QML and Go.

Implement Direct3D Renderer

There is a Direct3D9 wrapper here: https://github.com/gonutz/d3d9
Having a Direct3D renderer would make deployment on Windows easier, since Windows comes with DirectX drivers but usually has bad built-in OpenGL support and the average user usually is not inclined to or capable of updating their graphics drivers which often breaks something in a blue-screeny kind of way.

Consistent Color/Colour naming

Hi!
awesome library thanks for the hard work so far!
I just started using it but I already fell in love :-)

But it would awesome if color would be named consistently within the library (preferably color :P).

In vu.Eng#SetColor its SetColor but in
render.Light its SetColour/GetColour().

Thx!

Doesn't compile on OpenSuse

# github.com/gazed/vu/device
../go/src/github.com/gazed/vu/device/input.go:196: undefined: controlKeyMask
../go/src/github.com/gazed/vu/device/input.go:197: undefined: shiftKeyMask
../go/src/github.com/gazed/vu/device/input.go:198: undefined: functionKeyMask
../go/src/github.com/gazed/vu/device/input.go:199: undefined: commandKeyMask
../go/src/github.com/gazed/vu/device/input.go:200: undefined: altKeyMask
../go/src/github.com/gazed/vu/device/input.go:208: undefined: key0
../go/src/github.com/gazed/vu/device/input.go:209: undefined: key1
../go/src/github.com/gazed/vu/device/input.go:210: undefined: key2
../go/src/github.com/gazed/vu/device/input.go:211: undefined: key3
../go/src/github.com/gazed/vu/device/input.go:212: undefined: key4
../go/src/github.com/gazed/vu/device/input.go:212: too many errors
# github.com/gazed/vu/audio/al
could not determine kind of name for C.uintptr_t
could not determine kind of name for C.wrap_alcCaptureCloseDevice
could not determine kind of name for C.wrap_alcCaptureSamples
could not determine kind of name for C.wrap_alcCaptureStart
could not determine kind of name for C.wrap_alcCaptureStop
could not determine kind of name for C.wrap_alcCloseDevice
could not determine kind of name for C.wrap_alcCreateContext
could not determine kind of name for C.wrap_alcDestroyContext
could not determine kind of name for C.wrap_alcGetContextsDevice
could not determine kind of name for C.wrap_alcGetEnumValue
could not determine kind of name for C.wrap_alcGetError
could not determine kind of name for C.wrap_alcGetIntegerv
could not determine kind of name for C.wrap_alcGetProcAddress
could not determine kind of name for C.wrap_alcGetString
could not determine kind of name for C.wrap_alcIsExtensionPresent
could not determine kind of name for C.wrap_alcMakeContextCurrent
could not determine kind of name for C.wrap_alcProcessContext
could not determine kind of name for C.wrap_alcSuspendContext

gcc errors for preamble:
../go/src/github.com/gazed/vu/audio/al/al.go:272:2: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcCreateContext( uintptr_t device, const int* attrlist ) { return (uintptr_t)(*pfn_alcCreateContext)((ALCdevice *)device, attrlist); }
  ^
../go/src/github.com/gazed/vu/audio/al/al.go:272:59: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcCreateContext( uintptr_t device, const int* attrlist ) { return (uintptr_t)(*pfn_alcCreateContext)((ALCdevice *)device, attrlist); }
                                                           ^
../go/src/github.com/gazed/vu/audio/al/al.go:273:64: error: unknown type name 'uintptr_t'
 // ALC_API ALCboolean   ALC_APIENTRY wrap_alcMakeContextCurrent( uintptr_t context ) { return (*pfn_alcMakeContextCurrent)( (ALCcontext *)context ); }
                                                                ^
../go/src/github.com/gazed/vu/audio/al/al.go:274:60: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcProcessContext( uintptr_t context ) { (*pfn_alcProcessContext)( (ALCcontext *)context ); }
                                                            ^
../go/src/github.com/gazed/vu/audio/al/al.go:275:60: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcSuspendContext( uintptr_t context ) { (*pfn_alcSuspendContext)( (ALCcontext *)context ); }
                                                            ^
../go/src/github.com/gazed/vu/audio/al/al.go:276:60: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcDestroyContext( uintptr_t context ) { (*pfn_alcDestroyContext)( (ALCcontext *)context ); }
                                                            ^
../go/src/github.com/gazed/vu/audio/al/al.go:277:2: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcGetCurrentContext( void ) { return (uintptr_t)(*pfn_alcGetCurrentContext)(); }
  ^
../go/src/github.com/gazed/vu/audio/al/al.go: In function 'wrap_alcGetCurrentContext':
../go/src/github.com/gazed/vu/audio/al/al.go:277:80: error: 'uintptr_t' undeclared (first use in this function)
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcGetCurrentContext( void ) { return (uintptr_t)(*pfn_alcGetCurrentContext)(); }
                                                                                ^
../go/src/github.com/gazed/vu/audio/al/al.go:277:80: note: each undeclared identifier is reported only once for each function it appears in
../go/src/github.com/gazed/vu/audio/al/al.go: At top level:
../go/src/github.com/gazed/vu/audio/al/al.go:278:2: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcGetContextsDevice( uintptr_t context ) { return (uintptr_t)(*pfn_alcGetContextsDevice)( (ALCcontext *)context ); }
  ^
../go/src/github.com/gazed/vu/audio/al/al.go:278:63: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcGetContextsDevice( uintptr_t context ) { return (uintptr_t)(*pfn_alcGetContextsDevice)( (ALCcontext *)context ); }
                                                               ^
../go/src/github.com/gazed/vu/audio/al/al.go:279:2: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcOpenDevice( const char *devicename ) { return (uintptr_t)(*pfn_alcOpenDevice)( devicename ); }
  ^
../go/src/github.com/gazed/vu/audio/al/al.go: In function 'wrap_alcOpenDevice':
../go/src/github.com/gazed/vu/audio/al/al.go:279:91: error: 'uintptr_t' undeclared (first use in this function)
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcOpenDevice( const char *devicename ) { return (uintptr_t)(*pfn_alcOpenDevice)( devicename ); }
                                                                                           ^
../go/src/github.com/gazed/vu/audio/al/al.go: At top level:
../go/src/github.com/gazed/vu/audio/al/al.go:280:57: error: unknown type name 'uintptr_t'
 // ALC_API ALCboolean   ALC_APIENTRY wrap_alcCloseDevice( uintptr_t device ) { return (*pfn_alcCloseDevice)( (ALCdevice *)device ); }
                                                         ^
../go/src/github.com/gazed/vu/audio/al/al.go:281:54: error: unknown type name 'uintptr_t'
 // ALC_API ALCenum      ALC_APIENTRY wrap_alcGetError( uintptr_t device ) { return (*pfn_alcGetError)( (ALCdevice *)device ); }
                                                      ^
../go/src/github.com/gazed/vu/audio/al/al.go:282:64: error: unknown type name 'uintptr_t'
 // ALC_API ALCboolean   ALC_APIENTRY wrap_alcIsExtensionPresent( uintptr_t device, const char *extname ) { return (*pfn_alcIsExtensionPresent)( (ALCdevice *)device, extname ); }
                                                                ^
../go/src/github.com/gazed/vu/audio/al/al.go:283:60: error: unknown type name 'uintptr_t'
 // ALC_API void  *      ALC_APIENTRY wrap_alcGetProcAddress( uintptr_t device, const char *funcname ) { return (*pfn_alcGetProcAddress)( (ALCdevice *)device, funcname ); }
                                                            ^
../go/src/github.com/gazed/vu/audio/al/al.go:284:58: error: unknown type name 'uintptr_t'
 // ALC_API ALCenum      ALC_APIENTRY wrap_alcGetEnumValue( uintptr_t device, const char *enumname ) { return (*pfn_alcGetEnumValue)( (ALCdevice *)device, enumname ); }
                                                          ^
../go/src/github.com/gazed/vu/audio/al/al.go:285:55: error: unknown type name 'uintptr_t'
 // ALC_API const char * ALC_APIENTRY wrap_alcGetString( uintptr_t device, int param ) { return (*pfn_alcGetString)( (ALCdevice *)device, param ); }
                                                       ^
../go/src/github.com/gazed/vu/audio/al/al.go:286:57: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcGetIntegerv( uintptr_t device, int param, int size, int *data ) { (*pfn_alcGetIntegerv)( (ALCdevice *)device, param, size, data ); }
                                                         ^
../go/src/github.com/gazed/vu/audio/al/al.go:287:2: error: unknown type name 'uintptr_t'
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcCaptureOpenDevice( const char *devicename, unsigned int frequency, int format, int buffersize ) { return (uintptr_t)(*pfn_alcCaptureOpenDevice)( devicename, frequency, format, buffersize ); }
  ^
../go/src/github.com/gazed/vu/audio/al/al.go: In function 'wrap_alcCaptureOpenDevice':
../go/src/github.com/gazed/vu/audio/al/al.go:287:150: error: 'uintptr_t' undeclared (first use in this function)
 // ALC_API uintptr_t    ALC_APIENTRY wrap_alcCaptureOpenDevice( const char *devicename, unsigned int frequency, int format, int buffersize ) { return (uintptr_t)(*pfn_alcCaptureOpenDevice)( devicename, frequency, format, buffersize ); }
                                                                                                                                                      ^
../go/src/github.com/gazed/vu/audio/al/al.go: At top level:
../go/src/github.com/gazed/vu/audio/al/al.go:288:64: error: unknown type name 'uintptr_t'
 // ALC_API ALCboolean   ALC_APIENTRY wrap_alcCaptureCloseDevice( uintptr_t device ) { return (*pfn_alcCaptureCloseDevice)( (ALCdevice *)device ); }
                                                                ^
../go/src/github.com/gazed/vu/audio/al/al.go:289:58: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcCaptureStart( uintptr_t device ) { (*pfn_alcCaptureStart)( (ALCdevice *)device ); }
                                                          ^
../go/src/github.com/gazed/vu/audio/al/al.go:290:57: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcCaptureStop( uintptr_t device ) { (*pfn_alcCaptureStop)( (ALCdevice *)device ); }
                                                         ^
../go/src/github.com/gazed/vu/audio/al/al.go:291:60: error: unknown type name 'uintptr_t'
 // ALC_API void         ALC_APIENTRY wrap_alcCaptureSamples( uintptr_t device, ALCvoid *buffer, int samples ) { (*pfn_alcCaptureSamples)( (ALCdevice *)device, buffer, samples ); }
                                                            ^

# github.com/gazed/vu/physics
/tmp/go-build827693216/github.com/gazed/vu/physics/_obj/collision.o: In function `btAtan2':
../go/src/github.com/gazed/vu/physics/collision.c:58: undefined reference to `atan2'
/tmp/go-build827693216/github.com/gazed/vu/physics/_obj/collision.o: In function `btSqrt':
../go/src/github.com/gazed/vu/physics/collision.c:59: undefined reference to `sqrt'
../go/src/github.com/gazed/vu/physics/collision.c:59: undefined reference to `sqrt'
../go/src/github.com/gazed/vu/physics/collision.c:59: undefined reference to `sqrt'
../go/src/github.com/gazed/vu/physics/collision.c:59: undefined reference to `sqrt'
../go/src/github.com/gazed/vu/physics/collision.c:59: undefined reference to `sqrt'
/tmp/go-build827693216/github.com/gazed/vu/physics/_obj/collision.o:/home/terminal/go/src/github.com/gazed/vu/physics/collision.c:59: more undefined references to `sqrt' follow
collect2: error: ld returned 1 exit status

go get -u github.com/gazed/vu

terminal@linux-iflx:~/Downloads> uname -a
Linux linux-iflx 4.4.74-18.20-default #1 SMP Fri Jun 30 19:01:19 UTC 2017 (b5079b8) x86_64 x86_64 x86_64 GNU/Linux
terminal@linux-iflx:~/Downloads> cat /etc/os-release
NAME="openSUSE Leap"
VERSION="42.2"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.