У меня возникли проблемы с отображением искусства на основе пикселя (думаю, ретро-плитки и искусство) на OpenGL Es 1.1 на iPhone.OpenGL ES Pixel Art - Масштабирование
Плитки представлены с использованием 8 байт (1 байт для каждой строки) с каждым битом, представляющим пиксель, который установлен или нет.
Например плитка с числом 8:
0 0 0 0 0 0 0 0 ->
0 0 1 1 1 0 0 0 -> xxx
0 1 0 0 0 1 0 0 -> x x
0 1 0 0 0 1 0 0 -> x x
0 0 1 1 1 0 0 0 -> xxx
0 1 0 0 0 1 0 0 -> x x
0 1 0 0 0 1 0 0 -> x x
0 0 1 1 1 0 0 0 -> xxx
Преобразование это OpenGL на iPhone, используя
glDrawArrays(GL_POINTS, 0, 64);
Логика является правильным, но проблема в том, что Безразлично 't дать ретро-эффект. Я искал больше блочного/ретро-стиля. Я читал, что могу отключить сглаживание пикселей, из-за чего пиксели будут отображаться как квадраты (я думаю, что это GL_Disable (POINT_SMOOTH), но не уверен, что это влияет на ES, поскольку ничего не изменилось.)
Возможные решения, которые я нашел связанные проблемы:
- использовать буфер кадра для рендеринга с меньшим разрешением, а затем масштабировать его в буфере визуализации. Я не знаю, как это делается, или если это сработает.
- Создайте изображение из пикселей, создайте текстуру с этого изображения и, наконец, визуализируйте эту текстуру.
Возможные решения я подумал выключен:
- Для каждого пикселя, нарисуйте два пикселя, а не как по горизонтали, так и по вертикали.
- Нарисуйте каждый пиксель как квадрат с помощью треугольников.
- Использование GLPointSize - дает правильный эффект при установке на 2, но координаты затем перепутаны. Выравнивание становится сложнее.
В конце концов я хотел бы плитки, которые будут представлены:
Это больше меня понимание того, как OpenGL и пиксели работы, и я использую эмулятор GameBoy, чтобы решить эту проблему. Если кто-то думает, что правильный способ - создать графику вручную и загрузить их как текстуры, это не выполнимый ответ.
Право. Когда вы рисуете 'GL_POINTS', вы рисуете кучу отдельных частей геометрии, каждая из которых самая маленькая вещь, которая может быть освещена в буфере. Когда вы рисуете 'GL_TRIANGLES', вы рисуете непрерывную часть дисплея, гарантируя, что каждый пиксель, содержащийся в нем, получает какое-то значение. Предполагая, что то, что вам нужно, - это графика с низким разрешением, масштабируемая до более высокого разрешения с точечной выборкой, вы просто загружаете их по собственному разрешению и рисуете их в любой регион, в котором хотите представить результат, используя 'GL_NEAREST'. Все, что вы, кажется, уже выяснили! – Tommy