В некоторых старых/обычных условиях единственный выбор для рендеринга изображения является использование функции базового чертежаНанесение изображений алгоритм компенсации
putpixel(x, y);
(помещает пиксел в х/у расположения холста)lineto(x, y);
(рисует линию от смещения к й/у расположения холста)moveto(x, y);
(двигается к смещению х/у расположения холста)setpen(r, g, b, transp, size);
Но они очень медленно, особенно если много должно быть обращено на один раз.
Я готов изобрести алгоритм компенсации, который согласовывает к этой картине я на примере:
Что она делает, как вы можете видеть это предсказать, где более целесообразно использовать lineto
вместо putpixel
чтобы сохранить итерации , В этом примере он пропускает более 50% итераций. (красная линия указывает, что это смещение не будет нарисовано с помощью putpixel, но является частью уже нарисованной линии) Решает, лучше ли вертикальная или горизонтальная линия. Будет очень тяжелая и медленная буферизация, если это нужно сделать с помощью функций sin/cosin
, чтобы определить угол?
Есть ли совет, который я могу получить, чтобы упростить эту работу (или если уже существуют аналогичные механизмы), прежде чем я начну?
Как вам нужно установить цвет для всех пикселей, почему просто рисовать горизонтальную линию неэффективно? –
Это хорошая тема для игры, но вы должны знать, что на большинстве архитектур (особенно на «старых средах») горизонтальная линия всегда является самым быстрым способом принести что-либо на экран. Большинство архитектур имеют какой-то буфер кадров, где адреса восходящей памяти соответствуют следующей координате x. Если вы достигнете правой границы, следующий адрес будет равен x = 0, y + 1. В некоторых старых архитектурах есть чередующиеся битовые плоскости, что означает, что вам нужно изменить биты в байтах, если вы хотите установить произвольные пиксели. – mfro
Линия рисования намного эффективнее, чем пусковая установка, точно. Он сохранит другой вызов 'setpen' и' putpixel' и даже всю итерацию. Вот почему .. такой алгоритм должен быть создан. Он должен быть достаточно умным, чтобы определять, где использовать и какую линию использовать. – Malina