Welcome to Hplus Graphics Page!

This is my old home page which has accrued stuff since forever. A more modern version is found at enchantedage.com.

miscMore random stuff. 2016-08-28
raycarA small tech demo, illustrating how to build car physics using a box and four rays, using the ODE open source physics library. Also implements a simple scene graph for DirectX. 2012-04-12
graphicsMiscellaneous articles about graphics-related stuff. Most of them are very basic. 2009-09-28
carworldA driveable car using ODE (the Open Dynamics Engine) for rigid body simulation. Simple OpenGL graphics using 3dsmax ASE files and TGA textures. Source included (MIT license!) 2009-06-24
aes-2001The presentation I gave of a paper I wrote for the 18th AES conference, on Internet Appliance Audio. It details some of the issues we addressed in the BeIA operating system when I worked for Be. 2009-06-23
vtuneHow to profile your program using Intel's VTune profiler 2009-06-23
tcp-scalabilitySome notes on the scalability of TCP-based multi-user game servers. 2009-06-23
thread-gotchasSome things to look out for when developing with threads. 2009-06-23
marshalingSome code showing how to easily marshal C++ structs to/from a stream of bytes, using templates and visitors to break the NxM dependency problem into a much better scalable N+M problem. 2009-06-23
time-offsetHow to calculate a time offset to keep a networked game simulation time in sync between game clients and game servers. 2009-06-23
nat-punchOne way to punch through NAT firewalls using peer-to-peer networking. 2009-06-23
vst-responseA short note about mapping linear VST parameters in the range [0,1] to something more musically useful; especially good inside setParameter() and getParameter() for VST effects and synths. 2009-06-23
udp-vs-tcpThe difference between UDP and TCP explained, briefly. 2009-06-23
natAn article about how NAT (Network Address Translation) works and why it gets in the way of game servers. 2009-06-23
stream-messagesHow to send separate message packets over a stream protocol such as TCP. 2009-06-23
networked-gameHow to structure the main loop of a networked game client and server. 2009-06-23
ultra-edit-glslA WORDFILE.txt addition to make keyword highlighting work in the UltraEdit editor for the GLSL high-level graphics shading language. 2009-06-23
no-threadsWhy threads are considered harmful, except in a few special cases. 2009-06-23
xmlscanXMLSCAN -- a simple, fast, in-place, non-copying XML scanner and bare-bones DOM without schema validation or entity handling. 2009-06-23
sleeping-to-save-cpuCan I call Sleep() to give up the CPU, yet still make my buffer-flipping deadline? 2009-06-23
pc-timersMeasuring elapsed time accurately on PC hardware is really hard. 2009-06-23
makesampleHow to build a make system in GNU make, without using recursive make. Recursive Make Considered Harmful! 2009-06-23
distributed-chunksHow to structure a coarse-grained distributed processing system. 2009-06-23
make-a-3d-gameA brief pointer at some resources on how to write a computer game featuring 3D graphics. 2009-06-23
environmentExecution Environments: How to manage singletons when you want to run more than one program instance in the same process. 2009-06-23
deledSome information about the nice, low-cost game mesh modeler DeleD (swell for static meshes, not for characters). 2009-06-23
odeNotes about the Open Dynamics Engine 2009-06-23
rantsRandom raving on various topics. When I add something here, I'm venting steam, rather than presenting a well-thought- through opinion, so don't take it too seriously. 2009-06-23
game-entitiesA simple pattern for game entity storage and management, as well as an optimized entity allocator. 2009-06-23
C++-apiSome simple rules to follow if you want to deliver a C++ API in part as a library, rather than forcing each user to compile the API from source code. 2009-06-23
http-getSome source that implements a simple HTTP GET wrapper, which allows you to very simply get arbitrary web pages into your Win32 C/C++ program. 2009-06-23
authenticationA brief paper suggesting how to implement authentication and encryption for a client/server game where the client is un-trusted, but the server is trusted (such as in an MMORPG). 2009-06-23
libintroduceA peer-to-peer NAT punch-through library, as well as lobbying/match-making library. 2009-06-23
bandwidthAn article I wrote on music-dsp explaining a bit about optimizing for the memory subsystem to make programs run faster. 2009-06-23
copytestSome NASM source code showing that for aligned transfers, it's not very hard to beat the throughput of Microsoft "memcpy()". The copytext.txt file contains output when run on my P-III/733 Via Apollo Pro 133 machine. Note that if you increase the max block size to 4 MB or more, the NASM version gets faster, while the MS version gets (or stays) slower. 2009-06-23
libstatsA simple library making it possible to add stats for an RPG character without having to re-compile the entire game. The library supports looking up stat values by index, by name, or by (very efficient) static accessors. 2009-06-23
carworldA driveable car using ODE (the Open Dynamics Engine) for rigid body simulation. Simple OpenGL graphics using 3dsmax ASE files and TGA textures. Source included (MIT license!) 2009-06-23
interpolationHow to deal with sharp spikes in position updates for a networked game. 2009-06-23
lagI've worked in online games for many years now. Sometimes I'm asked: "What causes lag?" 2009-06-23
easy-win32-programHow to draw a red block in a window in a Win32 program using MSVC 6.0, in 7 easy steps (Beginner Tutorial) 2009-06-23
pcm-dolby-digitalA small explanation of what the different digital audio standards for home theaters, DVD players and receivers mean. Includes HDMI. 2009-06-23