Wire3D
| Wire3D | |
| | |
| General | |
|---|---|
| Author(s) | antibyte |
| Type | Framework library |
| Version | 1.0.2 |
| Licence | GNU Lesser GPL |
| Links | |
| Download | |
| Website | |
| Discussion | |
| Source | |
Wire3D (Wii Independent Rendering Engine 3D) is an open source, object oriented, multiplatform 3D engine written in C++, supporting homebrew Wii and Windows (DirectX). It provides a framework to developers for writing platform agnostic 3D applications (including physics using the Bullet Physics library) that run on Wii and Windows out of the box.
The following example applications are included:
Contents |
Demo
This application (Zip-Archive for HBC) shows how to load a scene using an Importer class and attaches a few controllers manipulating the scene, e.g. controllers rotating fans and moving a conveyor belt, or a controller applying a spline to the camera performing a fly-through of the scene.
Samples
The following samples (Zip-Archive for HBC) serve as tutorials. Their code is well documented and should be read in ascending order, since they build upon concepts that are explained in preceding samples. They are completely self-contained, meaning all objects, textures and the likes are created at runtime, so you can toy around in the sample code, compile and simply use Wiiload to transfer it to the Wii without any further ado. More information about the individual samples can be found in the wiki of the project page.
Key features
- Platform independent renderer
- draw call batching of static and dynamic geometry
- minimizes render state, buffer, light and texture changes
- creates displaylists (Wii) from static meshes on the fly
- supports 16/32 bit RGB(A) textures (incl. generation of mipmaps using a Gauss filter)
- once render objects are bound, no further memory allocations occur at runtime
- supports 3 ways of rendering
- visible sets of objects from the scene graph
- individual objects
- low-level rendering by manually controlling render states, buffers, etc.
- Scene graph
- various nodes (discrete level of detail, billboard, skybox, light, switch, ...)
- controller system
- hierarchical render state, light and effect handling
- hierarchical culler
- sequential set of visible objects
- sorted (by transparency, render state, material and depth) set of visible objects
- Math supporting doubles and floats
- vector3, matrix34 (Wii specific optimizations)
- vector2, vector4, matrix2, matrix3, matrix4, quaternion (generic C++ code)
- Object system
- custom run-time type information (rtti)
- smart pointers (reference linking)
- Custom template containers
- array, hash set, hash table, list, sorted map, queue, stack
Physics
Wire3D uses the Bullet Physics library. Bullet can be used for collision detection, ray casting, rigid bodies, ragdolls, motors and many other use cases. As of Wire3D v1.0.1, Bullet is included in the Wire3D repository and download for Wii and Windows. There are no more extra downloads and setup required in order to compile all the samples.
Importer
Wire3D comes with an Importer library that reads PNGs, true type fonts et al using Freetype2 and XML scene descriptions that can be exported from Unity3D using the supplied exporter script.
Changelog
The complete changelog can be found here.
v1.0.2
- Wire
- draw call batching of static and dynamic geometry
- text rendering
- skybox node
- VertexBuffer uses 32bit color (instead of 4 floats) now, so no more conversion at Bind() time. Note: Although interface changed, there are no changes for the user due to implicit conversion operators to/from ColorRGB(A).
- IndexBuffer only uses 16bit indices, as Wii does not support 32bit indices anyways. Note: Interface only changed on IndexBuffer::GetData(), if you are accessing index buffers via operator there are no changes necessary.
- (PC) fixed renderer statistics bug when ResetDevice()/DestroyAll() was issued.
- (PC) fixed NVIDIA PerfHUD getting stalled when pressing a key.
- (Wii) fixed anisotropic texture filtering
- Importer
- leaking vertex data fixed
- support for "Static" flagged transformations
- fixed missing Spotlight parameters
- Tools
- freetype2 font engine added
- Samples
- updated Sample3, Sample10 and Demo to showcase new features
Support
Limited support is supplied here.
Credits
Wire logo by Noogman.
Wire3D framework by antibyte, pieces of code were taken from the following third parties:
- Wild Magic
- LodePNG
- RapidXML
- Bullet Physics (Wii port by Adam Higerd)
- Freetype2 font engine