Torcs in C#
- Compile torcs as a library, with very high interface: TorcsLaunch().
- Make a C# wrapper to it.
- Launch torcs from Mono.
- Start plugging in other engines with C# APIs
New Physics Engine?
Torcs 3D Engine.
Reasons to throw away Torcs 3-d Engine
Here is the list of improvements we can get, mainly by making use of OpenGL 2.0 features (Shaders, Buffers Objects).
Without too much work we can achieve:
- Per-pixel lighting 
- Fake sky reflections on coachwork and metallic parts (my personal algorithm) 
- High-quality illumination model
Modular architecture already make this possible. The 3D engine implements an interface (defined in interfaces/graphic.h), it is given the high-level information about the track and cars and have to build and display its own geometry from this.
Make it in C# ? For now making a C# wrapper for the renderer would imply calling C# from C, is that possible? If possible, the whole src/interfaces headers have to be wrapped to C# then. (Cf Torcs in C#)
Notes by Jeko for Jeko
It's almost pure OpenGL, so very easy to tweak.
Main work is done in src/modules/graphic/ssggraph/grmain.cpp
It builds a list of "screens" (main screen, mirrors, etc)
Each screen set up the opengl parameters he like and render track, then cars, etc..
Rendering of the car is done here: src/modules/graphic/ssggraph/grcar.cpp, grDrawCar()
(WDB: there is an error in the code used to display car's lights. The number of calls to the displaying routine is incremented with the number of lights defined for the car! So if you define all lights (front lights, rear lights, brake lights) you loose the transparency you had, using only the brake lights. Also it's implementation isn't effective, because in every timestep first all work is done to be able to display the light's and later it is canceled, because the lights wouldn't be seen. Instead you could first decide, wether the light's are visble or not).
It would be cool to be able setup a situation where a car is following a series of rules, and you can play God and add or subtract parts of the world while the system is live and watch how it behaves. (Saving changes, so that this can become the track for next time...)
I'd like to be able to add barriers, or stop signs, or whatever and test how the driving engine handles it.
I'd like to be able to have different robots race on different computers. This would be a nice feature for the world simulator in about 6 months :-)