|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
|
Написание программ на C с выводом графики на postscript29.08.2017, 19:10. Показов 2357. Ответов 15
Метки нет (Все метки)
Вопрос навеян этой темой Нужна литература по работе с графикой.
Пробовал ли кто-нибудь из вас писать на языке postscript? Если да, то каковы впечатления от этого языка? Пригоден ли он для графического ввода-вывода и создания графических интерфейсов? Можно ли, допустим, программу писать на C, а графику создавать в ней, посылая команды на postscript'е в поток stdout? Понятно, что стандартный поток вывода должен быть в этом случае связан с каким-то postscript-терминалом или графической (иксовой, виндовой) программой, исполняющей код на postscript'е и рисующей текст и графику в окошке. Добавлено через 23 часа 23 минуты И всё же, у кого какие мысли есть?
0
|
|
| 29.08.2017, 19:10 | |
|
Ответы с готовыми решениями:
15
Проблема с выводом графики
Написание программ в С++ |
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
|
|
| 29.08.2017, 19:19 | |
|
а почему такие "экзотичные" варианты рисования?
0
|
|
| 29.08.2017, 20:21 | |
|
Если интересуют Cшные либы для такого рисования - стоит посмотреть в сторону TeX/LaTeX - эти пакеты умеют делать выхлоп в DVI, PDF и PS. Есть в них tex2ps, предполагаю, что это только оболочка к к-нить либе.
Наверняка есть и другие библиотеки, не связанные с TeX. Добавлено через 10 минут О, нашёл прикольную весЧь GL2PS : http://www.geuz.org/gl2ps/ - библиотека, позволяющая рендерить картинку, реализованную на OpenGL в PS,EPS,PDF и SVG
1
|
|
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
||
| 29.08.2017, 21:35 [ТС] | ||
|
2. Меня в последнее время заинтересовали способы, как уйти от оконной графики и того способа программирования, который она навязывает, а именно, непременно существующий цикл обработки сообщений, обязательная обработка таких специфических событий, как изменение размера окна и т. п. Как уйти от громоздких рисовальных функций оконного API с кучей параметров, вплоть до указания графического контекста (в Windows он, кажется, называется пером), будь то Xlib, Win32 API, GTK+, QT и т. п. Возникает мысль, а нельзя ли вернуться к традиционному потоковому вводу/выводу на терминал в том виде, в каком он существует в Unix-подобных операционных системах. Только там он позволяет выполнять лишь символьный вывод. Я же подумал, а нельзя ли эту идею потокового вывода расширить и распространить на случай графики, хотя бы двумерной. Язык postscript, может, и не лучший, но всё же возможный вариант реализовать эту идею.
0
|
||
| 30.08.2017, 17:07 | ||
|
Оконный интерфейс требует цикл обработки не для рисования, а для общения с юзером (отслеживать мышу/клаву). Возможно от цикла в привычном виде можно уйти при однооконной работе. Активное окошко и обрабатывает клаву/мышу, если ловит "клик за пределами"/комбинацию)клавиш - самостоятельно перекидывает управление на стек других окошек/виджетов. Нечто вроде "консолидированной многозадачности Вынь 3.*" - правда там цикл тоже существовал...... Когда-то рисовал "окошки" под ДОС-ом, пришлось делать базовый класс с обработчиком событий и цикл в майн. Как ни старался уйти от пути TurboVision - не смог, сдался и основа была похожа на TV, но зато остальное сделал проще и понятнее(а сколько багов было - с год вылавливал. Прога уже в цеху стоит и работает без сбоев, а баги в либе в другом проекте лезут и лезут...
1
|
||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
||
| 30.08.2017, 23:22 [ТС] | ||
|
Но мне сейчас интересно другое. Можно ли идею потокового терминального ввода-вывода, который существовал в Unix, но только для текстовой алфавитно-цифровой информации, распространить на графический случай, на графический вывод. Т. е. уйти от вызова кучи рисовальных функций, которые существуют в любой GUI-библиотеке (которые рисуют отрезки, окружности, дуги, прямоугольники, точки, кривые Безье, позволяют вывести растровую картинку в нужное место окна и т. п.), а вместо этого в файл устройства (в тот же stdout) засылать поток символов, который будет правильно пониматься и интерпретироваться устройством (или драйвером) и заставлять устройство выводить графику на экран. Причём использовать для этой цели можно было бы самые обычные функции стандартной библиотеки языка C для вывода текста в файл вроде puts(), printf() и т. п. Главное, чтобы выводимый этими puts(), printf() и прочими функциями поток символов на устройство представлял собой сам по себе какой-то текст на языке, понятном устройству, а не символьную абракадабру. Мысль моя понятна? Т. е. я думаю сейчас о том, как идеологию графического ввода-вывода на компьютере, в рамках ОС, можно было бы упростить, причём сделать это красиво. И я думаю, какой бы язык подошёл в качестве языка графического устройства, в качестве языка, понимаемого и интерпретируемого этим устройством. И я задумался, является ли postscript хорошим кандидатом на эту роль, или же это постфиксный язык, он сложен и неудобен для обычного программиста, и если уж эту идею как-то и реализовывать, то на роль такого языка надо выбирать что-то другое, что-то более простое и понятное для человека, чем postscript, но при этом примерно с такой же функциональностью. Я и хотел спросить у форумчан мнение об этом языке. Приходилось ли кому-то с ним работать и вручную на нём писать графические файлы и программки? И если да, то какое мнение у вас об этом языке, какое он оставил о себе впечатление?
0
|
||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||
| 05.09.2017, 11:08 | |||
|
Вы может не до конца предназначение этого языка понимаете? Это по сути набор инструкций для принтера. Для печати каких-нибудь доков пойдёт. А для графики приложений лучше использовать что-то другое (апишное рисование окон, OpenGL, ...) Хотя всё зависит от задачи. Вы вот не до конца свою описали.
1
|
|||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
|||
| 09.09.2017, 22:45 [ТС] | |||
|
При этом, насколько я понял, язык postscript ни в коем случае не является языком разметки вроде языка системы groff, html, TeX и т. п. Он для этой цели слишком низкоуровневый, он по сравнению с языками разметки слишком детализирует процесс вывода текста и графики. Использовать его в качестве замены языка разметки в общем-то можно было бы, но это слишком неудобно. С другой стороны, возможности postscript'а по части описания вида страницы или образа экрана неизмеримо выше, чем возможности любого языка разметки. На нём можно создать самые невероятные графические и текстовые образы, для чего у языка разметки, скорее всего, просто не хватит средств.
Добавлено через 18 минут Выводом сырого текста, как это сделано в текстовом терминале Unix, тут уже не обойдёшься. Поэтому для того, чтобы соорудить подобную штуку, необходим специальный язык, который такая графическая консоль или такой графический терминал бы понимал, правильно интерпретировал и выводил согласно его инструкциям и указаниям на экран картинку. Я и хотел спросить, разбирался ли кто из вас с postscript'ом? Можно ли по вашему мнению этот язык считать хорошим кандидатом на роль языка такого графического терминала? Или с ним работать, на ваш взгляд, напрямую сложно и неудобно, и это был бы плохой выбор? Добавлено через 7 минут MrGluck, я эту идею изложил ещё в своих предыдущих постах в этой ветке (см. пост №1, №4 и №6). Посмотри все эти посты, чтобы лучше понять, что я имел в виду.
0
|
|||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||
| 11.09.2017, 18:28 | ||
|
Дабы не цитировать большую часть текста выше, напишу без выделения. Но эти слова относятся к первой части сообщения.
Я целиком и полностью согласен с вашими высказываниями. Более того, мне кажется, что ваши познания данного языка могут быть даже выше моих т.к. я в него не углублялся. Лишь поигрался с генерацией вывода. Касаемо вашей идеи - а сколько человек захочет нынче использовать графику в консоли в замен иксам? Возможно это влияние майкрософт, а возможно требования используемого софта, но люди привыкли к графике, которую предоставляют DE вроде KDE или Gnome, которые, в свою очередь, вертятся на иксах. На самом деле, я лишь немного баловался с графикой в консоли. Но разве libsdl не делает то, что ваш нужно? Возможно, логичнее будет написать обёртку вокруг него?
1
|
||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
||||
| 15.09.2017, 03:12 [ТС] | ||||
|
В этом и заключается суть моей идеи. Вместо использования специальных графических библиотек и рисования объектов на экране путём вызова функций этих библиотек посылать в консоль или терминал поток символов на специальном языке, позволяющем описывать графику. Язык должен быть прост, лаконичен, выразителен, понятен человеку (а не только терминалу) и удобен. Если PS удовлетворяет всем этим требованиям, его можно использовать для осуществления этого подхода. Если же нет, и у этого языка слишком сложный, неудобный и специфический синтаксис, то для этой цели стоит найти другой, более удобный, простой и понятный человеку язык, не уступающий PS по качеству и своим возможностям (или придумать такой язык). Главное, чтобы графика была реализована в виде потокового файлового вывода. Во-первых, есть куча инженеров и учёных, которые, не являясь профессиональными программистами, знают один или несколько популярных языков программирования (С, C++, Паскаль и т. д.), с удовольствием бы использовали компьютер в своей работе и писали бы на нём программки для решения своих задач. Но изучать современные графические интерфейсы вроде GTK+, QT, wxWidgets, Xlib или Win32 API не все из них хотели бы — все эти библиотеки достаточно сложны, и изучение любой из них потребовало бы уйму времени, которого у них, как правило, нет, да и голова занята совсем другими вещами — знаниями и навыками, касающимися их непосредственной профессии. Во-вторых, идея возможно бы понравилась многим профессиональным программистам. Не случайно, немало программ пишется для консоли даже сейчас, потому что это проще, позволяет сконцентрироваться на решаемой задаче и не отвлекаться особо на инфраструктуру программы, несмотря на то что возможности текстовой консоли по организации человеко-машинного интерфейса крайне ограничены и нет никакой наглядности выводимой информации. Если бы удалось реализовать графику в консоли таким путём, о котором я говорю, это бы, возможно, очень упростило работу как непрофессиональным, так и профессиональным программистам. Создание графических программ было бы ненамного сложнее написания программ консольных. А что касается пользователей, думаю, нашлось бы немало и среди них людей, кому идея бы понравилась и они бы с удовольствием работали с такими программами и в такой среде. Ведь в Unix-подобных ОС (Linux, FreeBSD) текстовая консоль и консольные программы до сих пор очень популярны среди пользователей. А то что я предлагаю, это развитие идеи текстовой консоли и её обобщение на графический случай. А потом, идеи всех пересаживать с оконной графики и "рабочих столов" на консольную графику у меня нет. Хорошо было бы, если бы развивались оба подхода. Какой из них лучше (или оба плохи), может показать лишь время. Сам подход имеет некоторые преимущества и на системном уровне. Поскольку PS — язык многих принтеров (прежде всего, конечно, достаточно дорогих моделей в наше время), он бы позволил унифицировать экранный вывод и печать на принтере. PS — язык многих документов, а значит, вывод информации на экран можно было бы объединить с выходным форматом документов и добиться этим замечательной простоты. Т. к. графика имела бы потоковый вид (т. е. она реализовывалась бы путём записи текста в поток), вывод программы можно было бы перенаправить в файл и сохранить в нём. По сути дела, мы бы получили весь вывод программы в виде документа на postscript'е. Т. е. мы бы сделали то же самое, что делают программисты и пользователи Unix/Linux, когда перенаправляют вывод консольных программ в файл, а потом смотрят его в виде текста в каком-нибудь текстовом редакторе (или при помощи программы cat или more/less). В некоторых случаях такая возможность очень удобна, просто бесценна. И дело тут даже не в языке postscript как таковом. Язык для этого можно выбрать любой, главное, чтобы он обладал всеми необходимыми свойствами. Важнее сама идея. И да, ещё одна вещь, о которой нельзя умолчать. Такой подход более абстрактный и математичный, что для вычислительных систем является преимуществом. Графические библиотеки и окна — это более гуманитарный, что ли, подход. Итого, мы имеем следующие преимущества данного пути: простота + унификация + гибкость.
0
|
||||
| 15.09.2017, 17:18 | ||
|
PS можно использовать, если нам надо отрисовать одну сцену(чертёж, картинку и т.п), но для интерактивного общения всё будет упираться в связку PS->DVI(отдельная прога) + DVI->device(прога+видеодрайвер). Для примера, возьмите тот же принтак HP с каким нить АРМ-процем в 1ГГц частотой. Замерьте, сколько времени проходит от момента выполнения cat simple_test_page.ps > /dev/ulpt0 и моментом, когда лазерный принтак начнёт раскручивать полигон лазера или крутить картридж. А ведь в прошиве АРМа принтера весьма оптимизированный закрытый софт, а не универсальная прога, задача которой работать под всеми ОС, под всеми CPU, с поддержкой формата, собранного по крупицам, и наверняка неполной информации.... То же самое можно сказать про DVI и PCL, про PDF тихо промолчу...
0
|
||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
|||
| 18.09.2017, 06:18 [ТС] | |||
|
Но главное не в этом. Я не понимаю, почему рендеринг изображения, записанного на постскрипте, должен занимать существенно больше времени, чем рендеринг такого же изображения, полученного путём последовательного вызова функций какого-то графического API, будь то Win32 API или Xlib (или реализованных поверх них GTK+ и QT). Postscript и все эти графические библиотеки реализуют примерно одни и те же графические примитивы — отрезки, прямоугольники, дуги, кривые Безье, заполнение области, ограниченной кривой, шрифты (растровые и векторные) и печать этими шрифтами, всё примерно то же самое. Да, PostScript — интерпретатор. Но, во-первых, он представляет собой стековый язык, а значит, интерпретировать его просто, интерпретатор не сложен, и времени на интерпретацию каждой команды уйдёт очень немного. А во-вторых, в графических библиотеках для получения каждого примитива нужно каждый раз вызывать функцию. Вызов функции с точки зрения процессорного времени дорогая операция. А учитывая, что Win32 API реализован через системные вызовы ядра, а Xlib реализована через протокол обмена между X-клиентом и X-сервером (X-протокол), надо понимать, что времени будет уходить ещё больше, поскольку системный вызов (а он и в том, и в другом случае, и в случае Windows, и в случае Unix, будет происходить) ОЧЕНЬ дорогая операция с точки зрения процессорного времени. Т. е. мне кажется, что рендеринг изображения, заданного похожим образом на Postscript и через какую-то графическую библиотеку, займёт и в том и в другом случае примерно одно и то же время. Если изображение нормально успевает обработаться средствами графической библиотеки, то никакого слайд-шоу не будет и на Postscript'е. Добавлено через 30 минут PostScript — язык с полностью открытой общедоступной спецификацией. Скачать эти спецификации может каждый с сайта Adobe и с других ресурсов, по которым эти файлы расползлись. Никакой тайны и know how он не составляет, чтобы понять, как он работает, не надо колупать программы и хакерским путём выяснять, что же его команды делают. Всего было выпущено три версии стандарта Postscript'а — Level 1, Level 2, Level 3, все их при желании можно найти. Плюс того, по этому формату написано несколько вроде неплохих учебников, но все они на английском языке, на русский ничего не переводилось. Да, формат собственнический, за использование этого языка в печатающих аппаратах вроде принтеров или плоттеров, как я понял, нужно платить лицензионные отчисления фирме Adobe. Но он отнюдь не закрытый. Ну и конечно же заявление о слайд-шоу нахожу совершенно необоснованным. Тут ничего личного, просто не согласен.
0
|
|||
| 18.09.2017, 12:45 | ||
|
0
|
||
|
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
|
|
| 18.09.2017, 13:21 [ТС] | |
|
Лексический разбор у такого несложного языка не займёт много времени. А работа с системным видеодрайвером будет и в том, и в другом случае. По быстродействию, мне кажется, оба решения, что PS, что графическая библиотека, примерно одинаковы.
И кстати, живой пример. В начале 1980-ых годов существовало по меньшей мере 2 графические системы, в которых PS был взят за основу. Это система NextStep, и система SunOS от Sun Microsystems. Правда, Sun Microsystems вскоре отказалась от этой системы в пользу иксов. А система Aqua от Apple не уверен, но не исключаю, что что-то подобное имеет на нижнем уровне своей графической подсистемы. Те две системы, у NextStep и у SunOS правда, были не консольные, а оконные, но они были обе основаны на PS. Думаю, если б это было так сложно, требовало таких громадных вычислений, с этим бы никто не стал связываться, тем более тогда, когда мощность персоналок и рабочих станций была смехотворна по нынешним временам. Так что мне кажется, что проблемы быстродействия здесь просто не существует.
0
|
|
|
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
|
||||
| 21.09.2017, 03:42 | ||||
|
Даже часто создается впечатление, что графическая программа, открывает свой EPS (Encapsulated PostScript), в реальности, просто в комментарии в EPS добавляет свой формат и открывает его. Представьте что проще написать, программу которая генерирует HTML-код, или программу которая его визуализирует. А PS будет на порядок сложнее.
1
|
||||
| 21.09.2017, 03:42 | |
|
Помогаю со студенческими работами здесь
16
написание программ написание программ на C Написание программ! Написание программ Написание программ на Qt Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|