Кстати, сама задача отображения шарика c использованием OpenGL-кода на разных устройствах нетривиальна сама по себе. Некоторые использовали текстуру, которая при увеличении размеров экрана теряла наглядность; некоторые рисовали шарик программно. Кстати, будем рады услышать комментарии небезраличных хабражителей на эту тему: как бы вы нарисовали OpenGL-шарик без учета первого ограничения (инвариантности геймплея)?
(Имеется в виду шарик в игре Арканоид)
1 шарик я бы рисовал так же, как и 10000000 — пиксельным шейдером через GL_POINTS с записью в буфер глубины.
Скорее всего сгенерил бы текстурку шарика с учётом разрешения экрана.
рисовал бы квады и дискардил бы углы по текстурным координатам в ps.
FROL
А на мобильных девайсах? Слышал, что там с этим есть проблемы.
Это тз?
Signed distance field же.
Варианты:
1. Подготовил бы несколько наборов текстур под разные разрешения.
2. Рисовал бы как 3д модель, треугольниками.
Зависит от арта.
Зависит от того, как должен выглядеть шарик. Например можно шейдером вот так сделать:
#version 120 varying vec2 uv; varying vec4 color; void main() { // [0,1] to [-1,1] vec2 v = uv * 2.0 - vec2( 1.0, 1.0); float d = dot( v, v); float c = 1.0 - d; float a = 1.0 - pow( d, 10.0); gl_FragColor = vec4( color.xyz * c, color.w * a); }
Нарисовав квад соответственно с этим шейдером.
Executor
> Например можно шейдером вот так сделать:
Суслик правильно сказал - point sprite надо юзать.
Не знаю как на мобилках, но на ПК point sprites это прошлый век.
В D3D10 (2006 год) его уже нету.
Если он есть в мобилках, то очень странно, технологии 10+ лет давности.
Sergio
> Суслик правильно сказал - point sprite надо юзать.
Он сказал - GL_POINTS
Executor
> Зависит от того, как должен выглядеть шарик.
Допустим шарик это текстурка в виде смеющегося колобка.
Executor
> Не знаю как на мобилках, но на ПК point sprites это прошлый век.
> В D3D10 (2006 год) его уже нету.
> Если он есть в мобилках, то очень странно, технологии 10+ лет давности.
А с чего ты решил, что это устарело? Если это выкинули из DX10, это не значит, что это устарело. Оно даже в Vulkan'е есть, а значит и в железе тоже должно быть. Просто взяли и сделали большую точку - квадрат с текстурными координатами. Идея простейшая, есть много ограничений, но есть много применений, где эти ограничения уместны. Но работает быстрее, чем на геометрических шейдерах раза в 2. Так что зря их выкинули из DX10.
Executor
> Не знаю как на мобилках, но на ПК point sprites это прошлый век.
> В D3D10 (2006 год) его уже нету.
> Если он есть в мобилках, то очень странно, технологии 10+ лет давности.
саму геометрию из 4 вертексов можно сгенерить как угодно — хоть геометрическим шейдером, хоть через gl_PointSize, но второе на современном железе всё ещё работает быстрее. основная идея здесь в том, чтобы полученный квад рендерить во фрагментном шейдере, считая пересечение с аналитической сферой и discard'я ненужное.
Suslik
но я слышал, что discard на мобилах работает медленнее, чем просто alpha blend с 0 альфой.
Тема в архиве.