Russian Qt Forum
Ноябрь 01, 2024, 08:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Шарик  (Прочитано 9408 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Декабрь 22, 2014, 09:49 »

Добрый день

Нужен просто шарик - но бросаться в пучину OpenGL совсем не хочется. А там еще мутные шейдера пойдут - вообще ховайся  Плачущий  Я конечно понимаю что будет более сложный объект - и OpenGL неизбежен. Но сейчас мне нужен всего лишь шарик, ничего более. Отделаться сохраненными картинками не удается. Как же мне нарисовать шарик простыми средствами QPainter?

Спасибо
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Декабрь 22, 2014, 10:05 »

У меня есть один на шейдерах. Код немного кривой - генерировал сам на треугольниках. Если заинтересует, то могу дать. Кстати, мой шарик не принимает нормали, а высчитывает их прямо в шейдере.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Декабрь 22, 2014, 10:10 »

вот
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #3 : Декабрь 22, 2014, 10:16 »

Делал так:
Код:
QPixmap createSphere(uchar diameter, const QColor& color) const
{
QPixmap pixmap(diameter, diameter);
pixmap.fill(Qt::transparent);

QPainter p;
p.begin(&pixmap);
p.setRenderHint(QPainter::Antialiasing, true);
p.setPen(QPen(Qt::NoPen));
qreal gx = diameter * 0.3125;
QRadialGradient gradient(gx, gx, diameter);
gradient.setColorAt(0, QColor(255, 255, 255));
gradient.setColorAt(0.5, color);
gradient.setColorAt(1, color);
p.setBrush(QBrush(gradient));
p.drawEllipse(1, 1, diameter - 2, diameter - 2);
p.end();

return pixmap;
}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 22, 2014, 10:44 »

У меня есть один на шейдерах. Код немного кривой - генерировал сам на треугольниках. Если заинтересует, то могу дать. Кстати, мой шарик не принимает нормали, а высчитывает их прямо в шейдере.
Понятно что с OpenGL это просто. Но, повторюсь, тащить эту бандуру, а тем более шейдеры, не вызывает энтузиазма. И потом - Вам не кажется это неестественным? Исходных данных у шарика аж 2: центр и радиус. А мы зачем-то создаем не одну сотню треугольников. Разве это правильно?

Делал так:
С исходным белым цветом все залито, а с др впечатление что шарик сам светится (аттач). Но понимаю что критиковать легче чем делать, спасибо за код.

 
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #5 : Декабрь 22, 2014, 10:55 »

С исходным белым цветом все залито, а с др впечатление что шарик сам светится (аттач). Но понимаю что критиковать легче чем делать, спасибо за код.
мне проще было, у меня шарик 16х16.
Можно попробовать изменить параметры градиента.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Декабрь 22, 2014, 10:55 »

А мы зачем-то создаем не одну сотню треугольников. Разве это правильно?
Тесселяция в помощь!  Улыбающийся Шучу.

Визуально на вашем скриншоте затемнения просто не хватает в правом нижнем углу. Можно подстроить градиент, чтобы переходил в бордовый.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Декабрь 22, 2014, 15:04 »

Можно подстроить градиент, чтобы переходил в бордовый.
Люди ждут на светофоре перехода, горит красный, но машин нет. Но вот стоило одному пойти - и все потянулись за ним. Никогда не замечали? Улыбающийся 

Градиент - нормальное решение, дешевое, практичное. Но это fake, т.е. "есть какое-то сходство" - но не более того. Думаю что если начать развивать/углублять этот fake - ничего доброго не выйдет, получится "система рычагов", др словами большой уродливый велосипед. А нет ли другого (принципиально другого) решения? 
Записан
Bepec
Гость
« Ответ #8 : Декабрь 22, 2014, 15:18 »

Всё что вы рисуете Opengl/painter'ом и прочими инструментами суть есть обман зрения, не более. И всё равно оно приводится к двумерной картинке.
Потому и ваш шарик и шарик на Qt одинаково правдивы, Правда в кутешном градиент подобрать чуть лучше надо.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Декабрь 22, 2014, 15:20 »

Люди ждут на светофоре перехода, горит красный, но машин нет. Но вот стоило одному пойти - и все потянулись за ним. Никогда не замечали? Улыбающийся 
Не, обычно я иду на красный первым и не оборачиваюсь Улыбающийся
Я имел в виду, что нужно подкрасить ваш существующий градиент.
Кажется, что вы слишком много хотите получить, точнее накостылить... И чего вы так с OpenGL не в ладах....

ваш шарик и шарик на Qt одинаково правдивы, Правда в кутешном градиент подобрать чуть лучше надо.
Присоединяюсь. Ваш шарик тоже имеет острые края - значит fake
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Декабрь 22, 2014, 16:57 »

Всё что вы рисуете Opengl/painter'ом и прочими инструментами суть есть обман зрения, не более. И всё равно оно приводится к двумерной картинке.
А разве в реальной Вы каким-то образом можете видеть "не-двумерную"? Улыбающийся Вряд ли т.к. человеческий глаз - та же камера, никаких принципиальных отличий нет.

И чего вы так с OpenGL не в ладах....
Возможно Вы хотели спросить почему я его не люблю. Потому что там убогость выдается за вершину инженерной мысли. В принципе это нормально, компаниям надо продать свои железки - но нельзя же верить всему на  слово

Не, обычно я иду на красный первым и не оборачиваюсь Улыбающийся
Я имел в виду, что нужно подкрасить ваш существующий градиент.
В данном случае Вы послушно идете за предложенным Johnik решением, без всяких попыток предложить свое. А между тем альтернатива довольно очевидна  Улыбающийся
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Декабрь 22, 2014, 17:10 »

Да, не обратил внимания на предложенный Johnik вариант (видимо, концентрировался на своих мыслях  Улыбающийся )
Не забывайте, что у человека две "камеры" составляют картинку и полностью обмануть этот механизм плоскостью с картинкой вряд ли удастся.
Ну, убогость - это громко. Чтож этой убогостью пользуются миллионы? Какие альтернативы можете назвать? В крайнем случае можно достигнуть своей вершины инженерной мысли  Подмигивающий
Записан
Bepec
Гость
« Ответ #12 : Декабрь 22, 2014, 18:10 »

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

А изображение на экране даёт лишь 2 картинки без глубины Улыбающийся  Opengl просто позволяет рассчитать и нарисовать картинку с нужными градиентами.
« Последнее редактирование: Декабрь 22, 2014, 18:11 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Декабрь 22, 2014, 18:31 »

У человека имеются 2 камеры, которые позволяют снять карту глубин (не помню точно как называется, но суть у человека имеется 2 картинки по которым он может составить трёхмерную модель Веселый ).
Называется стереоскопия (хотя говорят и по-простому "стерео"). Не вдаваясь в детали - этот эффект имеет какое-то значение на достаточно  близком расстоянии. Закройте один глаз и посмотрите другим на девушку с расстояния хотя бы 10 метров. Потом посмотрите другим - визуально ножки и все остальное то же самое  Улыбающийся

Ну, убогость - это громко. Чтож этой убогостью пользуются миллионы? Какие альтернативы можете назвать? В крайнем случае можно достигнуть своей вершины инженерной мысли  Подмигивающий
То есть альтернативы великому и могучему OpenGL нет - и быть не может! Даже в случае простейшего шарика - мы должны либо довольствоваться подделкой градиентами - либо запрягать по полной программе. Правильно?

Цитировать
Стало быть так-таки и нету?
Улыбающийся
Записан
Bepec
Гость
« Ответ #14 : Декабрь 22, 2014, 19:12 »

Любая поделка будет работать с градиентами Веселый Ибо все технологии подстраиваются под глаза. А наши глаза верят градиентам Улыбающийся Давным давно была статейка о наших глазах. И приведены были "обманы" мозга для создания трехмерности) Там всего около 5-7 способов, причем наипростейший это градиенты.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.