Показать сообщение отдельно
Старый 24.03.2009, 23:32
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 13  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>внедрена в видуху в виде 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();
}