Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсветка объектов. GLScene. [Delphi, Windows]


VitGun ©   (2004-06-09 22:31:00) 

С GLScene поставляется демка \Demos\Interface\Pick там показано как можно подсвечивать объекты при наведении на них указателея мыши. Вопрос: можно ли таким же образом подсвечивать ТЕКСТУРИРОВАННЫЕ объекты (неправильной формы), или прийдеться рисовать для каждого отдельную текстуру?


DeadMeat   (2004-06-10 17:46:00) [1]

> VitGun
Укажи в свойствах текстуры TextureMode в tmModulate

---
...Death Is Only The Begining...


wiz   (2004-06-10 15:15:00) [2]

можно и так, как предложил NailMan: изменять цвет источника света. Но в этом случае нужно будет менять параметры источника до и после отрисовки подсвеченного объекта (или glPushAttrib/glLight/.../glPopAttrib) иначе все предметы вокруг источника будут менять цвет.

по моему проще и правильнее с идейной точки зрения сделать моим путём, т.к. мы хотим поменять свойства (цвет) самого объекта, а не свойства источника "излучения".

Для примера кусочек кода из моего проекта:

//устанавливаю свойства материала
glMaterialfv(...)
...
glMaterialfv(...)

//подключаю текстуру
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, curr_mtl[part_fire_tex_bind].diff_map);

//для простоты включаю установку материала через цвет
glEnable(GL_COLOR_MATERIAL);

for i:=0 to "всего партиклов" do
 begin

//устанавливаю положение объекта
...glTranslated(), glRotated(), glRotated()...

//в зависимости от того, какой тип партикла устанавливаем его цвет
case ogl_Particle_list[i].typ of
 pt_eng_part: glColor3d(1,0.5+random*0.4,random*0.5); //random для большей "живости" огня
 pt_ship_expl: glColor3d(0.8,0.2,0.2);
...
end;

//выводим партикл (внутри только glVertex и glTexCoord)
glBegin(GL_TRIANGLE_STRIP);
 ...
glEnd;

 end;


в результате получаю на одной и той же текстуре (белой) партиклы совершенно разного цвета. (для сомневающихся, см. мою демку)

---
бритва Оккама: 'Не создавайте сущности сверх необходимого'


NailMan   (2004-06-10 14:46:00) [3]

А если точечный источник света или лайтмапом?

---
WBR, NailMan aka 2:5020/3337.13


wiz   (2004-06-10 14:42:00) [4]

2 VitGun: честно говоря не смотрел демку (и вообще не ставил себе GLScene), но...

в opengl треугольник ресуется с использованием текущего значения glColor (если установлен бит GL_COLOR_MATERIAL) или только на основе текущих значений glMaterial(gl_diffuse/gl_ambient/...).
если ты накладываешь текстуру, то для каждой точки её цвет получается из смешения цветов материала свёрнутого с картой текстуры (умножение).

таким образом, если ты будешь рисовать один и тот-же объект с одной и той же текстурой , но с разными значениями glColor(...) (если установишь glEnable(GL_COLOR_MATERIAL)) или с разными значениями glMaterial(...), то результат получишь разный.

что тебе и нужно.

(к посту [3]: см. origin)

---
бритва Оккама: 'Не создавайте сущности сверх необходимого'


kerby   (2004-06-10 14:02:00) [5]

можно попробовать написать шейдер


VitGun   (2004-06-09 22:56:00) [6]

>kas-t

Ну в общем я так и думал...Чтож будем рисовать...


kas-t   (2004-06-09 22:41:00) [7]

Как я понял из демки этой, там меняется цвет объекта. Так что текстурированные объекты, наверное, таким способом подсвечивать не удастся, придется рисовать отдельную текстуру.


Наверх

Титульная страница Поиск, карта сайта Написать письмо