Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывод Спрайтов (OpenGL, VC++)

1.5K
11 марта 2007 года
v1rus0k
30 / / 15.11.2004
Доброго Времени Суток,
Вобщем проблемма в том что нужно вывести спрайт(ы) поверх трехмерной сцены (пока в голове только один способ это взять и подобрать самые близкие кординаты к зрителю но потом подумал, а вдруг есть какая-нибудь фнкция для этого), потом ещё очень интересно как можно сделать чтоб СВЕТ не действовал на эти спрайты :(

Заранее большое спасибо...
391
11 марта 2007 года
Archie
562 / / 03.02.2005
Так отключи свет, когда спрайты рисуешь.
1.5K
11 марта 2007 года
v1rus0k
30 / / 15.11.2004
Цитата: Archie
Так отключи свет, когда спрайты рисуешь.



Вобще мне нужно чтоб светь отображался на других объектах кроме спрайтов...я пробывал его выключать когда рисую спрайты и включать когда рисую всё остальное не помогает...

1.9K
11 марта 2007 года
Redneck
29 / / 05.04.2003
Вот как рисовать спрайты (про свет потом):
//Извини, прогю на Дельфах, так что буквы будут случайного размера...
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;
8.2K
12 марта 2007 года
Akela
64 / / 13.05.2005
Код:
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();

Спрайт, нарисованный таким образом будет всегда повернут к наблюдателю.
9
12 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Некоторые ссылочки по billboard:
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. Имхо то, что тебе, афтар, нужно для общего развития ;).
1.9K
12 марта 2007 года
Redneck
29 / / 05.04.2003
Цитата: v1rus0k
Вобще мне нужно чтоб светь отображался на других объектах кроме спрайтов...я пробывал его выключать когда рисую спрайты и включать когда рисую всё остальное не помогает...



Это скорее всего глюк OpenGL'a. У меня так же было с туманом (ну или примерно так же). Мой тебе совет: переходи на Direct3D, как я. Там и таких глюков вроде как нет, да и функции для работы со спрайтами там есть!

[COLOR="Red"]Не городи про глюки. И советов по выбору либы не давай, человек не за это спрашивает.[/COLOR]

8.2K
12 марта 2007 года
Akela
64 / / 13.05.2005
Если все правильно писать, то и в OpenGL никаких глюков нет ;)
15K
13 марта 2007 года
vja
85 / / 09.01.2007
Цитата: Akela
Если все правильно писать, то и в OpenGL никаких глюков нет ;)



золотые слова :)

9
13 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Всегда надо правильно писать, а не выдавать свою криворукость за происки программеров-империалистов.

От темы, что-то, сильно отошли. Еще будут дельные предложения\замечания?
1.5K
15 марта 2007 года
v1rus0k
30 / / 15.11.2004
Всем огромное спасибо...со светом тоже разобрался, просто вспомнил как в Delphi при исользовании glScene надо было ставить GL_MODULATE чтоб свет работал на объект поэтому принципу написал вот так :

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
... //Рисуем Объект На Который Свет Не Действует


glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
... //Рисуем Объект На Который Свет Действует

И ВСЁ ЗАРАБОТАЛО...

Кстати на Директ переходить не собираюсь из-за одного слова Майкрософт...вобще я учил их обои но OPENGL меня больше прёт...а вобще на вкус на цвет товарищей нет...Ещё раз ВСЕМ ОГРОМНОЕ СПАСИБО...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог