Da letture e da test che ho effettuato in prima persona, ottenere un tasso di fotogrammi costante con Sleep() è utopico. Anche usare librerie dedicate (tipo quelle per il multimedia timer) non è sufficiente. Ho letto di tecniche per interrogare più direttamente il sistema con QueryPerformanceCounter() e QueryPerformanceFrequency() che promettono una maggiore precisione, ma non sono mai riuscito a implementarle per eccesso di complessità (c'è sicuramente chi sa farlo, ma non è il mio livello). Se ho ben compreso, altre tecniche che pare possano funzionare bene sui sistemi multiprocessore implicano la creazione di thread distinti e l'interazione tra essi (anche in questo caso, troppo "su" per il mio livello).
E' una bella sfida. Buona fortuna!
P.S. Qualora riuscissi a ottenere un bel tasso di fotogrammi elevato e costante finirai per ritrovarti a lottare contro effetti "ottici" potenzialmente schifosi, tipo "l'effetto strappo" dovuto alla difficoltà di sincronizzare il cambio dei fotogrammi con la frequenza di aggiornamento dello schermo. Un casino!