>>внедрена в видуху в виде OpenGl
Чего вы спорите???
На столе лежит книжеца (старая) и в ней написано:
Быстродейтвие программ использующих OpenGL, существенно зависит от видеоадаптера. Аппаратная реализация всех базовых функций OpenGL - залог высокого быстродействия.
Драйвер для видеокарты конечно должен быть установлен, как-же без него-то.
У меня когда я эту книгу читал был Пентиум 233Мгц и видуха с 1.5 мГб памяти - OpenGL работал.

и сортировка граней
>>Сортируют в редких случаях (прозрачные объекты, различные оптимизации) ито на процессоре.
Ну это вы уже погнали волну...
>>и тени
>>Стандартного (обобщеного) алгоритма построения теней нет.
Тени уже есть... Где-то видал как их делать (но, забыл). Можно почитать и узнать.
http://gamedev.ru/articles/?id=20121
В общем все работает само-собой вот затестил только что. Код полностью непригодный для флеша

Код:
//------------(c) Copyright Порев В.Н-------------
void myGlStart(HDC hdc)
{
//hdc = Canvas->Handle;
HGLRC hglrc;
PIXELFORMATDESCRIPTOR pfd;
int iPixelFormat,i,j;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 32;
pfd.iLayerType = PFD_MAIN_PLANE;
iPixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc,iPixelFormat,&pfd);
hglrc = wglCreateContext(hdc);
if (hglrc)
wglMakeCurrent(hdc, hglrc);
float nx,ny,nz;
GLfloat lightpos[4] = {3,3,4,1};
GLfloat lightdirection[3] = {-0.5,-0.6,-0.7};
//gluOrtho2D(-400,400,-300,300);
//gluOrtho2D(4,4,-4,4);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
//ракурс показа
gluPerspective(50,double(550/400),1,40);//-400,400,-300,300);
glMatrixMode(GL_MODELVIEW);//видовая матрица
//glLoadIdentity();
glTranslatef(0,0,-10);
glRotatef(27,1,0,0);
glRotatef(-19,0,1,0);
//ЗАДАЕМ ПАРАМЕТРЫ ИСТОЧНИКА СВЕТА
glLightfv(GL_LIGHT0,GL_POSITION,lightpos);
glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,lightdirection);
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,4);
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,50);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
//рисование пирамиды
glColor3f(1,1,0);
NormalVector(&nx,&ny,&nz,
0,4,0,
2,0.7,2,
2,0.7,-2);
glNormal3f(nx,ny,nz);
glBegin(GL_TRIANGLES);
glVertex3f(0,4,0);
glVertex3f(2,0.7,2);
glVertex3f(2,0.7,-2);
//передняя грань
NormalVector(&nx,&ny,&nz,
0,4,0,
-2,0.7,2,
2,0.7,2);
glNormal3f(nx,ny,nz);
glBegin(GL_TRIANGLES);
glVertex3f(0,4,0);
glVertex3f(-2,0.7,2);
glVertex3f(2,0.7,2);
glEnd();
//----------рисуем шахматное поле
glNormal3f(0,1,0);
for (j=-5;j<5;j++)
for (i=-5;i<5;i++)
{
if ((abs(i+j)%2)==0)
glColor3f(1,0,0);
else
glColor3f(1,1,1);
glBegin(GL_QUADS);
glVertex3f(i,0,j);
glVertex3f(i+1,0,j);
glVertex3f(i+1,0,j+1);
glVertex3f(i,0,j+1);
glEnd();
}
glFinish();
}