Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 14:54   #1
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию Градиент в OpenGL

Добрый день. Есть необходимость создать градиент в OpenGL. С OpenGL мало знаком, подскажите пожалуйста, как это можно реализовать, есть ли готовые решения. Заранее спасибо.
papos вне форума Ответить с цитированием
Старый 14.11.2010, 15:38   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

читаем http://www.programmersforum.ru/showthread.php?t=26329
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.11.2010, 16:44   #3
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

У меня нет цели полностью изучать OpenGL, а эту тему я видел Может быть, кто-то уже сталкивался с подобным или может дать совет, для этого я тему создал.
papos вне форума Ответить с цитированием
Старый 14.11.2010, 16:56   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Если не накладывать текстуру, то градиент сам создаётся - просто каждой вершине устанавливается какой-то цвет (glColor3f(1, 0, 0); )...
Только вот рекомендуют делать на всякий случай glShadeModel(GL_SMOOTH);...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 14.11.2010, 17:18   #5
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Я сейчас тоже об этом подумал, но тут задача посложнее тогда. Нужно сделать градиент радиальный Вот так вот я рисую закрашенный круг

Код:
for (int i = 0; i < 256; i++)
      {
        double angle = 2*3.14*i/256;
        glVertex2f(50*cos(angle)+50, 50*sin(angle)+50);
      }
papos вне форума Ответить с цитированием
Старый 14.11.2010, 18:38   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Вот так вот я рисую закрашенный круг
Так... А тут не видно чем вы его рисуете-то... Надеюся через GL_TRIANGLE_FAN?)
Ну тогда центральной точке например белый цвет задать, а остальным (перед циклом) - чёрный...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 14.11.2010, 19:05   #7
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Я видимо неправильно сказал - мне нужен вот такой вот градиент http://imagepost.ru/images/293/2010_11_14s14_36S.jpg )
papos вне форума Ответить с цитированием
Старый 14.11.2010, 20:07   #8
papos
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 37
По умолчанию

Разобрался, тему можно закрывать
papos вне форума Ответить с цитированием
Старый 14.11.2010, 20:22   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Хм... Это какой-то угловой/полупрозрачный там вроде..... (Типы градиентов)
Нужно пробовать... GL_QUADS наверное подойдёт...


З.Ы. Точнее GL_QUAD_STRIP (возможно плохое решение, но просто возиться с каждым треугольником чтот не хочется)... Пример к вечеру наклепаю...
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 15.11.2010 в 00:44. Причина: З.Ы.
DomiNick вне форума Ответить с цитированием
Старый 16.11.2010, 00:27   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

В общем так... Берём код из моего предыдущего примера: 21- конечная звезда

Добавляем к тому примеру глобальную переменную:
Код:
Var ..... k: Byte=0;
Дописываем в FormCreate (где-нибудь в самом конце):
Код:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
В Timer1Timer перед первым glBegin(GL_TRIANGLE_FAN) добавим:
Код:
glColor3ub(255, 255, 255);
glEnable(GL_TEXTURE_2D);
А перед SwapBuffers такое:
Код:
glLoadIdentity();
glRotatef(k/255*360, 0, 0, 1);
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBegin(GL_QUAD_STRIP);
Ang:=0;
While Ang<=360 Do
      Begin
      glColor4ub(0, 255, 0, Round(Ang/360*255));
      glVertex3f(0, 0, -1);
      glVertex3f(Cos(Ang/180*Pi), Sin(Ang/180*Pi), -1);
      Ang:=Ang+6; // количество "секторов" равно 60-ти (думаю вполне достаточно):   360 / 6 = 60
      End;
If (Ang<360+6) Then
      Begin
      glColor4ub(0, 255, 0, Round(Ang/360*255));
      glVertex3f(0, 0, -1);
      glVertex3f(Cos(Ang/180*Pi), Sin(Ang/180*Pi), -1);
      End;
glEnd;
glDisable(GL_BLEND);
Inc(k, 1);
Небольшое усовершенствование моего кошмара... %))

Всё ещё надеюсь на чью-то критику.....
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
opengl alhon Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 10.10.2013 15:02
OpenGL GBAXA Общие вопросы Delphi 2 30.07.2010 20:39
Opengl revaldo666 Общие вопросы C/C++ 12 28.07.2010 22:43
OpenGL revaldo666 Общие вопросы C/C++ 2 22.07.2010 10:39
Фон: ГРАДИЕНТ PAVEL315 HTML и CSS 2 13.03.2007 17:58