vec3 v[4]; // координаты вершин спрайта
vec3 c;// координаты центра спрайта
GLdouble ModelViewMatrix[16];
glGetDoublev(GL_MODELVIEW_MATRIX, ModelViewMatrix);
vec3 DirX = vec3((float)ModelViewMatrix[0], (float)ModelViewMatrix[4], (float)ModelViewMatrix[8]);
vec3 DirY = vec3((float)ModelViewMatrix[1], (float)ModelViewMatrix[5], (float)ModelViewMatrix[9]);
v[0] = c + (-DirX - DirY) * SpriteSize;
v[1] = c + ( DirX - DirY) * SpriteSize;
v[2] = c + ( DirX + DirY) * SpriteSize;
v[3] = c + (-DirX + DirY) * SpriteSize;
glBegin(GL_QUADS);
glVertex3fv(v[0]);
glVertex3fv(v[1]);
glVertex3fv(v[2]);
glVertex3fv(v[3]);
glEnd();
Вывод Спрайтов (OpenGL, VC++)
Вобщем проблемма в том что нужно вывести спрайт(ы) поверх трехмерной сцены (пока в голове только один способ это взять и подобрать самые близкие кординаты к зрителю но потом подумал, а вдруг есть какая-нибудь фнкция для этого), потом ещё очень интересно как можно сделать чтоб СВЕТ не действовал на эти спрайты :(
Заранее большое спасибо...
Так отключи свет, когда спрайты рисуешь.
Цитата: Archie
Так отключи свет, когда спрайты рисуешь.
Вобще мне нужно чтоб светь отображался на других объектах кроме спрайтов...я пробывал его выключать когда рисую спрайты и включать когда рисую всё остальное не помогает...
//Извини, прогю на Дельфах, так что буквы будут случайного размера...
glbindtexture(gl_texture_2d,[...]);
glcolor4f([...]);
glpushmatrix;
//Координаты спрайта в 3D
gltranslatef(sprite.x, sprite.z, sprite.y);
//Грузим матрицу View
glgetfloatv(gl_modelview_matrix,@m);
//m - это переменная типа GLMatrix или как ее там
m[0]:=1; m[1]:=0; m[2]:=0;
m[4]:=0; m[5]:=1; m[6]:=0;
m[8]:=0; m[9]:=0; m[10]:=1;
//Вставляем ее в матрицу View !
glloadmatrixf(@m);
glbegin(gl_quads);
gltexcoord2d(0,0); glvertex3f(-sprite.rad,sprites.rad,0);
gltexcoord2d(1,0); glvertex3f(-sprite.rad,-sprite.rad,0);
gltexcoord2d(1,1); glvertex3f(sprite.rad,-sprite.rad,0);
gltexcoord2d(0,1); glvertex3f(sprite.rad,sprite.rad,0);
glend;
//rad - это размер спрайта
glpopmatrix;
http://www.lighthouse3d.com/opengl/billboarding/ - теория
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1162945673&n=9&toprint=1 - на Delphi (почти как у Akela :))
http://forum.pmg.org.ru/viewtopic.php?t=421&postdays=0&postorder=asc&start=0&sid=2d9db93a9f70cf1f56a9fab1ed32ad35 - достаточно бестолковое обсуждение с примерами (конкретно 5-я страничка)
http://pmg.org.ru/nehe/nehe19.htm - а это перевод урока от NeHe. Имхо то, что тебе, афтар, нужно для общего развития ;).
Цитата: v1rus0k
Вобще мне нужно чтоб светь отображался на других объектах кроме спрайтов...я пробывал его выключать когда рисую спрайты и включать когда рисую всё остальное не помогает...
Это скорее всего глюк OpenGL'a. У меня так же было с туманом (ну или примерно так же). Мой тебе совет: переходи на Direct3D, как я. Там и таких глюков вроде как нет, да и функции для работы со спрайтами там есть!
[COLOR="Red"]Не городи про глюки. И советов по выбору либы не давай, человек не за это спрашивает.[/COLOR]
Если все правильно писать, то и в OpenGL никаких глюков нет ;)
Цитата: Akela
Если все правильно писать, то и в OpenGL никаких глюков нет ;)
золотые слова :)
От темы, что-то, сильно отошли. Еще будут дельные предложения\замечания?
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
... //Рисуем Объект На Который Свет Не Действует
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
... //Рисуем Объект На Который Свет Действует
И ВСЁ ЗАРАБОТАЛО...
Кстати на Директ переходить не собираюсь из-за одного слова Майкрософт...вобще я учил их обои но OPENGL меня больше прёт...а вобще на вкус на цвет товарищей нет...Ещё раз ВСЕМ ОГРОМНОЕ СПАСИБО...