Paid Assistance Experienced/Senior SDL Programmer

Greetings,

We just discovered SDL and think it’s a perfect match for some urgent
enhancements we need to make for our project. We need assistance of an SDL or
OpenGL expert to help us add some features to our existing game engine rather
urgently. We would greatly appreciate your assistance, if you believe you are
the right person, or referral to someone that can help us, or any other
pointers.

We basically need to add two sets of functionality to our existing 3D based
engine.

  1. Cross-platform (Linux/Windows) streaming video and audio (hopefully based
    on an existing robust SDL or OpenGL based player).

  2. Add 3D enhancements to the existing 3D-based engine, including 3D rending
    with camera object and perspective projection, light object and surface
    reflection properties, 3D mesh object loading from a standard (3ds, others?)
    format, etc.

CURRENT ENGINE:

Our requirements are for a simpler type of games and do not require BSD and
many other complex implementations. Our media engine is based on an
abstracted GraphicsLib class object. We currently have an OpenGL class derived
from the base GraphicsLib class that takes care of most of the internal OpenGL
processes. We also have abstracted Glyph, Texture, and Audio classes. Adding
onto the library is as simple as deriving a new class based on one of the
above base classes and tying in the functionality. We are currently using
orthogonal projections to render geometry. Basically we are billboarding all
of our graphics to simulate 2D in a 3D environment (Phase II of requirements
will add loading 3D geometry to use in our games.)

The main problem our engine faces today is loading and rendering large
animations. Whether they are large in image size or small and have many
frames, they can take up quite a bit of video memory. We can implement the
movie to texture rendering ourselves using DirectX’s DirectMedia interfaces or
the normal Win32 AVI function calls, but we do not use DirectX anymore as we
now use Linux for the OS. We still need to be cross-platform because a lot of
our game developers use Windows to develop game content and it also makes
providing demos easier. Our first most priority is to be able to play movies
onto OpenGL textures or directly into the frame buffer (back buffer) with
alpha blending (transparency) support. This will dramatically reduce the
amount of video memory being used, allowing us to load the more content. The
next priority is to extend the rest of the media libraries functionality. This
includes all sorts of systems used by 2D and 3D games such as particle
systems, simple physics with collision detection, IKE (inverse kinematics),
bone animation, mesh morphs, vertex and pixel shaders, etc… We want to
extend the media library so that our game developers will have more control
over what they can do in the engine. So instead of relying on large animation
sequences to render an announcer to a bonus game, we could use bone animation
and a mesh to achieve the same effect.

TASK DETAILS

Part 1: (needed urgently)

  1.  Stream data from a movie file format (avi, mpg, custom, etc...) to be 
    

rendered to an OpenGL texture. The movie files are on a local disk and we
need to read them very efficiently taking advantage of CODECs or whatever
other means available to standard Linux and Windows. Derive a base class from
the abstract Texture class on both Windows and Linux platforms. Must allow
multiple simultaneous stream objects (limited by performance). The main
streaming mechanism will have to be implemented using multiple threads and
maintaining efficient frame rates on specified hardware platforms.

We will provide three libraries, Core, Media and GUI. We will also provide a
sample application that renders an image (Texture) to a rectangle (Quad) on
the screen.

Your first assignment is to replace the image with a movie. It must be
streamed from an avi or mpg file that we will provide.

Your second assignment on this task will be to stream two small movies side by
side at the same time.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

  1.  Stream data from an audio format (wav, mp3, custom, etc?).  This may 
    

involve extending and modifying the existing ALSound and Sound classes that
currently supports static audio objects only and have them based on SDL?s
libraries.

Using the libraries from task 1 above your first task assignment is to stream
audio from a wav or mp3 file that we will provide.

Your second assignment on this task will be to stream two sounds at the same
time.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

Part 2:

  1.  Implement 3D rendering with camera object and perspective projection.
    

Using the libraries from task 1 above your first task assignment is to
encapsulate the camera object. This will include loading camera properties
from a script.

The second assignment will be to create a 3D object class. A simple cube
object will be loaded from a script and rendered with perspective using the
camera object from task 1.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

  1.  Implement 3D light object loading from a standard format (3DS, others?)
    

Using the libraries from task 1 above your first task assignment is to
encapsulate a light object. This will include loading light properties from a
3ds file and from a script.

The second task will be to implement reflectivity properties for surfaces
(Quads). It is important that we be able to position lights and also describe
the reflectivity of each surface to ambient, specular and diffuse lighting.
You will implement a 3D cube that rotates and each face responds to light
differently.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

  1.  Implement 3D mesh object loading from a standard format (3DS, others?)
    

Using the libraries from above your first task assignment is to create a 3D
mesh object. This will include loading the mesh from a file format to be
provided. We hope to use a standard format that is commonly used such as
those used by 3ds or other similar products.

The second assignment will be to render the mesh object with perspective using
the camera object.

The third assignment will be to animate the mesh object using a KeyFrame and
physics object. Your goal will be to load a 3D mesh object (a fish) that we
provide and animate it swimming along a predetermined path.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

  1.  Expand our Media library to encapsulate commonly used OpenGL 
    

functionality

Using the libraries from task 1 above your first task assignment is to extend
the KeyFrame class to manipulate texture coordinates. You will take the movie
from task 1 above and move it along a path using the KeyFrame object. In
effect this creates an animated sprite effect.

Your second assignment will be to add a physics object that manipulates
objects of base type Glyph. You will use the physics object to bounce a ball
from left to right along the screen. In effect the physics object is a
dynamic path that is determined according to the initial and current
(changing) inputs to the object. Initial inputs should include position,
velocity and acceleration for all three axes along with gravity and friction
coefficients.

All objects are to be implemented in accordance with our existing class
programming style including naming conventions and comments.

EXPERIENCE:

We believe the right person would have:

Proven experience in 3D graphics programming
Proficient with Linux C++ development tools including compiler and debugger
Proficient with SDL or OpenGL on Linux (OpenGL/SDL on Windows is a plus)
Proficient with MS Visual Studio .NET (C++) environment
Proficient in object oriented programming using C++ on Windows and Linux
Knowledge of Windows and Linux operating systems

Time is of the essence on the first release. Please email with relevant
experience, and estimated cost and delivery date for the two releases, along
with any specific questions you may have. We are hoping that the first part
would not take more than a week, or may be two to complete.

Thank you and looking forward to hearing from you on this.

Best Wishes,

Michael Soraya
@Michael_Soraya