Добавление цветов в cocos2d для iOS

Я пытаюсь сделать что-то вроде круга RGB, используя cocos2d:

введите здесь описание изображения

У меня есть подвижные круги (один для R, другой для B и другой для G), и я хотел бы автоматически вычислять цвета пересекающихся кругов (без создания чего-либо над определенной областью с новым цветом - это решение, которое я использую ).

Есть ли способ добавить цвета автоматически?

Что я сейчас делаю?

В настоящее время я использую пустой png 1x1 (как текстуру) в CCSprite, а затем я меняю цвет CCSprite (sprite.color = ccc3(r, g, b) для каждого круга).

Что я пробовал?

Я пытался использовать разные режимы наложения в своих спрайтах, используя mySprite.blendFunc = (ccBlendFunc) { GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA };, и даже добавлял некоторую непрозрачность (как непосредственно в спрайт, так и в текстуру, используя режим [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]), но я не могу добиться желаемого эффекта.

Я пытался найти комбинацию на с несколькими режимами наложения, но не нашел комбинация, которая сработала.


person Community    schedule 10.09.2012    source источник


Ответы (1)


Не рекомендуется использовать текстуры размером 1x1 пиксель. Я думаю, что старые устройства даже не будут их отображать. Используйте по крайней мере 2x2 или лучше 4x4. Не уверен, что это минимум.

Если вы собираетесь иметь один спрайт на пиксель, имейте в виду, что каждый спрайт занимает около 400 байт (зависит от версии cocos2d). Это означает, что заполнение всего экрана 320x480 спрайт-пикселями потребовало бы почти 60 МБ памяти!

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

Поскольку вы можете применить режим наложения только ко всему спрайту (в данном случае к кругу), режим наложения может быть правильным для одного пересечения, но он также будет смешиваться с фоном, что вам не нужно. Я не уверен на 100%, но я думаю, что есть техническая причина, по которой это добавление цвета RGB не работает только с режимами наложения. Может быть, кто-то с лучшим техническим пониманием рендеринга OpenGL ES может помочь.

person LearnCocos2D    schedule 10.09.2012
comment
Спасибо за информацию о спрайтах. Тем не менее, я заполняю свой спрайт текстурой (извините, если я не ясно выразился), поэтому ваш комментарий все еще актуален? Также я уже пробовал режимы наложения и играл с непрозрачностью, но не смог добиться желаемого результата. - person Tiago Almeida; 11.09.2012