Приобретение знаний о программировании низкокачественной графики

Мне нравится использовать библиотеку Underscore для проектов тяжелого кодирования массива / объекта ... в Underscore и Lodash, сравниваете ли вы массивы или объекты, как это выглядит:

_.isEqual(array1, array2)   // returns a boolean
_.isEqual(object1, object2) // returns a boolean

42
задан dbr 30 October 2008 в 21:23
поделиться

8 ответов

Графика Michael Abrash, Программирующая 'Черный список' , является великолепным местом для запуска. Плюс Вы может загрузить его бесплатно!

22
ответ дан Mitch Wheat 23 September 2019 в 13:52
поделиться

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

Нисходящий вопрос следующего, как действие прослеживает от операции высококачественной графики, например, нарисовать круг к аппаратным средствам. Узнайте OpenGL хорошо. Тогда источник к Мезаструктуре (свободный!) обеспечивает быстрый взгляд на то, как OpenGL может быть реализован в программном обеспечении. Источник к Xorg был бы следующим, сначала чтобы видеть, как действие идет от вызовов API до стороны клиента к X-серверу. Наконец Вы погружаетесь в драйвер устройства, который взаимодействует через интерфейс с аппаратными средствами.

Вверх дном: создайте свое собственное аппаратное обеспечение машинной графики. Думайте о способах, которыми это могло соединиться с компьютером - как обработать крупные числа пикселей через несколько регистров размера байта, как DMA будет работать. Запишите драйвер устройства и попытайтесь разработать графическую библиотеку, которая могла бы быть полезна для программистов приложения.

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

4
ответ дан DarenW 23 September 2019 в 13:52
поделиться

Если Вы действительно хотите запуститься в нижней части, тогда чертящей линию, самая основная операция. Компьютерная графика просто о заполнении пикселей на сетке (экран), таким образом, необходимо удаться, какие пиксели заполнить для получения строки, которая идет от (x0, y0) к (x1, y1).

Выезд алгоритм Bresenham для получения ощущения того, что включено.

5
ответ дан Rob Walker 23 September 2019 в 13:52
поделиться

посмотрите раздел Open GPU Documentation: http://developer.amd.com/documentation/guides/Pages/default.aspx

HTH

3
ответ дан plan9assembler 23 September 2019 в 13:52
поделиться

Самый низкий уровень был бы видеопамятью видеокарты. Когда компьютер сначала запускается, видеокарта обычно устанавливается на 80x25 символьный режим прежней версии.

можно записать текст с BIOS, обеспеченным прерывание в этой точке. Можно также изменить основной цвет и цвет фона от палитры 16 отличительных цветов. Можно использовать порты/регистры доступа для изменения режима отображения. В этой точке Вы могли сказать, загрузить различный шрифт в память дисплея и все еще использовать 80x25 режим (установки ОС обычно делают это), или можно идти вперед и включить VGA/SVGA. Это вполне сложно, это - то, для чего драйверы.

Однажды карта в 'более высоком' режиме Вы изменили бы то, что находится на экране путем доступа к с отображенной памятью на видеокарту. Это хранится горизонтально попиксельно с некоторыми 'грязными регионами' пикселей, которые не отображаются для экранирования в конце каждой строки, которую необходимо компенсировать. Но да, Вы могли скопировать пиксели изображения в памяти непосредственно на экран.

Для вещей как DirectX, OpenGL. вместо того, чтобы писать непосредственно в экран, команды отправляются на видеокарту, и это обновляет свой экран автоматически. Команды как "Эй Вы, нарисуйте это изображение, которое я загрузил в VRAM здесь, здесь и здесь" или "Тянут эти треугольники с этой матрицей преобразования...", берут часть времени по сравнению с попиксельно. ЦП поблагодарит Вас.

DirectX/OpenGL является программистом дружественная библиотека для отправки тех команд к карте со всеми функциями поддержки, чтобы помочь Вам сделать его гладко. Более прямой подход только был бы непроизводителен.

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

GDI/GDI + и система XWindow. Они специально разработаны для рисования окон. Первоначально они привлекли использование попиксельного метода (который был достаточно хорош, потому что они должны будут только перерисовать, когда кнопка была нажата или перемещенное окно, и т.д.), но теперь они используют Direct3D/OpenGL для ускоренного рисунка (и специальные эффекты). Оптимизация зависит от версий и реализаций этих библиотек.

Поэтому, если Вы хотите большую часть питания и скорости, DirectX/openGL является способом пойти. SDL, конечно, полезен для получения максимума от межплатформенной среды и интегрируется с OpenGL так или иначе. Система управления окнами является последней, но не недооценивайте ее. Особенно с материалом Microsoft, придумывающая в последнее время.

38
ответ дан Yes Fish... 23 September 2019 в 13:52
поделиться

Сразу, я сказал бы, что "Вы спрашиваете слишком много". Из того, что небольшой опыт, который я имел, я рекомендовал бы читать некоторые учебные руководства или заставить книгу или по directX или по OpenGL начинаться. Пойти немного ниже, чем это было бы довольно сложно. Большинство книг, которые я видел в OGL или DX, имеет довольно хорошие введения, которые объясняют, что делают функции/классы.

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

Или, если Вы действительно, абсолютно ДОЛЖЕН учиться, САМЫЙ НИЗКИЙ уровень... прочитал книгу в вышеупомянутом сообщении.

2
ответ дан ZCHudson 23 September 2019 в 13:52
поделиться

На MSWindows это легко: Вы используете то, что обеспечивает API, является ли это стандартом окна, программируя API или API семьи DirectX : это - то, что Вы используете, и они хорошо документируются.

В среде X-окон Вы используете любой X11-библиотеки , которые обеспечиваются. Если Вы хотите понять принципы позади работы с окнами на X, я предлагаю, чтобы Вы сделали это, nevermind, что многие другие говорят Вам не, она действительно поможет Вам понять графику и работу с окнами под X. Можно прочитать документацию относительно X-программирования (Google для него). (Это осуществление после понимания высокоуровневых библиотек!)

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

Другое сообщение упоминания Черный список Abrash - превосходный ресурс.

Редактирование: Что касается книг по программированию Linux: это - вещь сообщества, существуют многие практическое руководство вокруг; также найдите форум, присоединитесь к нему, и, пока Вы действуете цивилизованные, Вы получите всю помощь, в которой можно когда-либо нуждаться.

3
ответ дан slashmais 23 September 2019 в 13:52
поделиться

libX11 является самой низкой библиотекой уровня для X11. Я полагаю, что opengl/directx говорят с драйвером/аппаратными средствами непосредственно (или эмулируйте неподдерживаемую операцию в секунду), таким образом, они были бы самой низкой библиотекой уровня.

, Если Вы хотите запуститься с очень низкоуровневое программирование, ищите x86 ассемблерный код для VGA и разожгите копию dosbox или подобный.

2
ответ дан Draemon 23 September 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: