envymycar a multi-player car racing game for teaching computer graphics fabio ganovelli massimiliano...
TRANSCRIPT
eNVyMyCara Multi-player Car Racing Game
for Teaching Computer Graphics
Fabio Ganovelli Massimiliano CorsiniVisual Computing Lab, ISTI - PISA
Before starting...
meet:
SoftOGLhow to make your students hate you
2006:: appointed contract professor at University Of Siena for the course of Fundamental of Computer Graphics
7 weeks 42 hours (middle term test and lab included) 9 students
Pisa
Siena
Possible Course Program
Introduction (history, uses, trends...)
general notions (rendering paradigms, hardware...)
tranformations
rasterization
lighting and texture mapping
final project: simple projects using OpenGL...
I could have done this way...still...
Course project:
SoftOGL.sf.netImplementing a working OpenGL-like graphics API
benefit: to make the students gain a solid understanding ofCG algorithms
namespace softogl{ namespace impl{ // DDA segment rasterization // void DDASegmentRasterization(Segment2d s,int size=1){ // .................implementation.................. // } // Bresehnam segment rasterization // void BresenhamSegmentRasterization(Segment2d s,int siz = 1){ // .................implementation.................. // } // Polygon Filling // void PolygonFilling(Polygon2d p){ // .................implementation................. // } // }// end impl namespace sdk{ // ...}// end sdk};
students:iplementation
me: environmentand SDK tools
SoftOGL
first day, Feb 27, 2006
last day, April 9, 2006
Mistakes
programming skills :(
little sense of achievement :(
way too much work for the number of credits given by the CG course :(
2007:: My collegue Massimiliano was appointed contract professor at University Of Ferrara
Pisa
Siena
Ferrara
Goals of the course project
Give them a reachable target
Generate cooperation and competition between students
Make them learn some CG
Set the students in a common framework without too much specialized tasks
Do not burden them with non-CG problems
yeah..
eNVyMyCar.sf.net
a Multi-player Car Racing Game for
Teaching Computer Graphics
Concept
A software framework implementing a simple multi-player car-racing game over a LAN
Student's task: implement a client for the game:
RENDER the scene interactively
take the user input
doesn't it remind you something?...
Goals of the course project
Give them a reachable target
Generate cooperation and competition between students
Make them learn some CG
Set the students in a common framework without too much specialized tasks
Do not burden them with non-CG problems
Envy factor
At any moment, a client may send a snapshot of its view to all the others connected
NVMC_Server
Goals of the course project
Give them a reachable target
Generate cooperation and competition between students
Make them learn some CG
Set the students in a common framework without too much specialized tasks
Do not burden them with non-CG problems
Elements of the SceneStatic
The street
The buildings
The trees
Tunnels...
Dynamic (state)
The cars
sun position
p0
p0
p0
p1
p2
p3
p4
p5 p
6
p7
\
NVMC Architecture
#include <game_client.h>extern NvmcClient cli;
void draw_scene(){cli.UpdateScene();
/* .....*/
cli.UpdateScreenshots();}
void process_event(....){switch(..) {
case ... : cli.Command(COMMAND_INCREASE_SPEED); break;case ... : cli.Command(COMMAND_DECREASE_SPEED); break;case ... : cli.Command(COMMAND_TURN_LEFT); break;case ... : cli.Command(COMMAND_TURN_RIGHT); break;case ... : cli.Command(COMMAND_BRAKE); break;case ... : cli.Command(SEND_SCREENSHOT);break;
}}int launch_viewer(){......}
making a circuit
NVMC provides a simple code to convert a bitmap in a circuit
Implementation
the simpler the better:
C++
VCG for geometric concepts (vcg.sf.net)
QT for networking and multi threading
whatever you/they like for GUI (sdl -glut -qt)
used with: Windows ( .net), Mac (xcode), Linux (eclipse/Kdevelop)
Goals of the course project
Give them a reachable target
Generate cooperation and competition between students
Make them learn some CG
Set the students in a common framework without too much specialized tasks
Do not burden them with non-CG problems
Incremental learning
Basic features (the minimum required)
geometric transformations
lighting
texturing terrain and buildings
rollingsteering
putting on its place
scale place the carin its current position
Make it interesting
The students are given a list of possible features to implement, e.g.:
impostors for the trees
motion blurring for speed
lens flares
dynamic reflections on the car
projective texturing for the car lights
Each feature brings some points
Encourage clean code
code must be modular: if student A includes features written by student B it is a bonus for both
Q: How do you know who did it first?
A1: trust them
source code is open: envymycar.sf.net
CVS repository
A2: have a look to the commit timestamps
Goals of the course project
Give them a reachable target
Generate cooperation and competition between students
Make them learn some CG
Set the students in a common framework without too much specialized tasks
Do not burden them with non-CG problems
Conclusion
NVMC was used in 2 courses in 2006 and in one course in 2007 (just finished)
The feedback of the 39 students of these courses was very satisfactory (after the usual it's-too-much-work default complaint)
problems can be in the background knowledge of c++ and the bit of Stl they need to know.
Future Work
Implementation is quite poor:
no collision detection
only flat circuits
...other things we can put there having time..
Set up a public NVMC server for students of different campus to show off
Thanks!
http://envymycar.sf.net
thanks to:all our students who worked with nvmcRenata Otfinoswka for all the drawings