Доброго всем времени суток. Возникла следующуя проблема.Накладываю текстуру,как описывал Tyler Durden в своей статье.Там используется некий трюк с цветом,а именно усиление трёх компонентов и одновременное исключение зелёного компонента: Код (Text): ;изменим цвет объекта (нулевое значение уберет зеленые компоненты текстуры, большее значение увеличит яркость красных и синих, а также альфа-компоненту) invoke glColor4f,10.0,0.0,10.0,10.0 Всё работает как положено. Но проблема в том,что если я потом прорисовываю какую-то другую фигуру и хочу указать ей иной цвет,например: Код (Text): invoke glColor4ub, 153, 255, 255, 255 ...то цвет новой фигуры вообще никак не меняется -- он всё время получается какого-то тёмно-малинового цвета -- словно бы мы и не вызываем никакой функции по установке цвета. Почему так получается?И как исправить положение?
ты знаешь, я тоже маялся с этим байтным вариантом, но безуспешно. только у меня это было из-за математики целых величин, цифра просто терялась, в каком ты её порядке ни поставь.. исправить было можно, но по коду выходит себе дороже.. так что лучше юзай флоат, и не парьсо -)
Comer_ Использовал я и float тоже,например: Код (Text): invoke glColor4f, 0.0, 1.0, 0.0, 1.0 Но вместо того,чтобы моя новая фигура приняла зелёный цвет,она всё равно остаётся этого тёмно-малинового цвета. Можно ли как-то сбросить текущий цвет,т.е. тот,который был устаноавлен выше функцией: Код (Text): invoke glColor4f,10.0,0.0,10.0,10.0 ?? Просто может тут получается какой-то нестандартный вариант с использованием вещественного числа 10.0... EDIT. Сейчас попробовал сохранить все аттрибуты с помощью функции: Код (Text): invoke glPushAttrib, GL_ALL_ATTRIB_BITS Вроде бы малиновый цвет исчез,но теперь я всё равно не могу придать текстуре цвет,какой хочу.Она отображается чёрно-белой(она такая и есть)... И вот вопрос: как вызвать функцию glPushAttrib,чтобы не сохранять все биты,а сохранить только те,которые опеределяют цвет?
invoke glColor4f,10.0,0.0,10.0,10.0 бгг, надо писать 1.0, ибо в флоат версии оно именно так: от 1.0 до 0.0(как 255 до 0) и посмотри размещение: цвет должен задаваться перед прорисовкой полигона.
...знаю,но у Тулера было именно так,и это даёт реальный результат: усиливает яркость соответствующего компонента. ...так и есть. EDIT. Атас! Я почему-то думал,что для правильного смешивания для второй фигуры необходимо отключать GL_COLOR_MATERIAL...Оказывается,что не нужно было.Теперь цвет нормально изменяется. Но вопрос остаётся открытым: какие параметры передать функции glPushAttrib,чтобы она сохранила состояние текущего цвета??А то иначе приходится сохранять всё,чтобы не промахнутся... EDIT. В общем,решение следующее: Код (Text): ; /* Сохраняем текущее состояние цвета */ invoke glPushAttrib, GL_CURRENT_BIT ... ; /* Усиливаем красный,синий и альфа-компоненты,а также исключаем зелёный компонент */ invoke glColor4f, 10.0, 0.0, 10.0, 10.0 ... ; /* Восстанавливаем состояние цвета */ invoke glPopAttrib ... ; /* Задаём другой цвет (например, зелёный) */ invoke glColor4f, 0.0, 1.0, 0.0, 1.0
А почему бы не перенести отрисовку геометрии с цветом <glColor4f, 0.0, 1.0, 0.0, 1.0> в самое начало, до задания странного цвета из десяток? Тогда Push-/PopAttrib окажется вообще ненужным...
до кучи, еще одна проблемка по сабжу: Код (Text): начало цикла glClear GL_COLOR_BUFFER_BIT || GL_DEPTH_BUFFER_BIT тут чтото рисуется - квадратик какой-нибудь (с текстурой или без, не важно) glColor3f 1.0f, 1.0f, 0.0f тут текст заданным выще цветом и SwapBuffer конец цикла прикол в том что квадратик тоже желтым рисуется... что за дела такие=( а как же glClear GL_COLOR_BUFFER_BIT ???
так цикл же. Надо перед квадратиком задавать цвет квадратика, потом перед текстом цвет текста. Иначе Итерация 0: (экран очищен, цвет неопределен) - белый квадрат - желтый текст Итерация 1: (экран очищен) - желтый квадрат - желтый текст ... и т.д. glClear не меняет текущий цвет, а всего лишь устанавливает (в данном случае) буфер цвета в значения, ранее заданные функцией glClearColor (т.е. очищает буфер цвета). Цвет, которым рисуются примитивы, остается = последнему установленному функцией glColor