Форум: "Игры";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизПодсветка объектов. GLScene. Найти похожие ветки
← →
VitGun (2004-06-09 22:31) [0]С GLScene поставляется демка \Demos\Interface\Pick там показано как можно подсвечивать объекты при наведении на них указателея мыши. Вопрос: можно ли таким же образом подсвечивать ТЕКСТУРИРОВАННЫЕ объекты (неправильной формы), или прийдеться рисовать для каждого отдельную текстуру?
← →
kas-t (2004-06-09 22:41) [1]Как я понял из демки этой, там меняется цвет объекта. Так что текстурированные объекты, наверное, таким способом подсвечивать не удастся, придется рисовать отдельную текстуру.
← →
VitGun (2004-06-09 22:56) [2]>kas-t
Ну в общем я так и думал...Чтож будем рисовать...
← →
kerby © (2004-06-10 14:02) [3]можно попробовать написать шейдер
← →
wiz © (2004-06-10 14:42) [4]2 VitGun: честно говоря не смотрел демку (и вообще не ставил себе GLScene), но...
в opengl треугольник ресуется с использованием текущего значения glColor (если установлен бит GL_COLOR_MATERIAL) или только на основе текущих значений glMaterial(gl_diffuse/gl_ambient/...).
если ты накладываешь текстуру, то для каждой точки её цвет получается из смешения цветов материала свёрнутого с картой текстуры (умножение).
таким образом, если ты будешь рисовать один и тот-же объект с одной и той же текстурой , но с разными значениями glColor(...) (если установишь glEnable(GL_COLOR_MATERIAL)) или с разными значениями glMaterial(...), то результат получишь разный.
что тебе и нужно.
(к посту [3]: см. origin)
---
бритва Оккама: "Не создавайте сущности сверх необходимого"
← →
NailMan © (2004-06-10 14:46) [5]А если точечный источник света или лайтмапом?
---
WBR, NailMan aka 2:5020/3337.13
← →
wiz © (2004-06-10 15:15) [6]можно и так, как предложил 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;
в результате получаю на одной и той же текстуре (белой) партиклы совершенно разного цвета. (для сомневающихся, см. мою демку)
---
бритва Оккама: "Не создавайте сущности сверх необходимого"
← →
DeadMeat © (2004-06-10 17:46) [7]> VitGun
Укажи в свойствах текстуры TextureMode в tmModulate
---
...Death Is Only The Begining...
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c