Графическая библиотека
Инициализация и закрытие графики
Библиотека для C++, использовать только в файлах c расширением «.cpp». Подключение:
#include «graphics.h»
Внимание! Нужно ставить самым последним в списке подключаемых файлов.
int initwindow(int width, int height, const char* title=»Windows BGI», int left=0, int top=0, bool dbuf=false, bool closeall=true);
Инициализирует графическую систему (новая).
Создается окно указанного размера. Возвращается номер окна. Можно также задать заголовок окна, координаты, режим буферизации (по умолчанию не включена), поведение при нажатии кнопки X для закрытия окна (по умолчанию закрывается программа).
int getmaxx(void);
Возвращает максимальную координату экрана по x.
int getmaxy(void);
Возвращает максимальную координату экрана по y.
void closegraph();
void closegraph(int window);
Завершает работу с графической системой.
Графическое окно закрывается. По умолчанию закрываются все окна, можно указать номер окна или CURRENT_WINDOW для закрытия текущего окна.
void cleardevice(void);
Очищает графический экран. Все установки сбрасываются в начальное состояние.
int getcurrentwindow(void);
void setcurrentwindow( int window );
Позволяют выбрать текущее окно и узнать номер текущего графического окна.
void restorecrtmode(void);
Восстанавливает текстовое консольное окно и делает его текущим.
Устаревшие функции, для совместимости со старыми программами
void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);
Инициализирует графическую систему.
Для graphdriver можно указать значения DETECT, CGA, EGA, VGA и др. Для graphmode — CGAC0, CGAHI, EGALO, EGAHI, VGALO, VGAMED, VGAHI, VGAMAX и т.д. Отличия только в размерах создаваемого окна, они устанавливаются в соответствии с возможностям старых видеокарт (VGA/VGAHI — 640×480, VGA/VGALO — 640×200, VGA/VGAMAX — максимально возможный размер). В режиме DETECT — используется VGA/VGAHI. Последний параметр не используется.
Вызов:
int gd=VGA, gm=VGAMAX; initgraph(&gd,&gm,"");
Графические библиотеки для C (3D, 2D)
В общем, что на сегодняшний день релевантно в области графических библиотек (3D, 2D) для C? На данный момент щупаю OpenGL. Может стоит сначала разобраться в OpenGL, а потом переходить на какой-нибудь SDL2 (для 2D, а для 3D оставить OpenGL)

snake266 ★★
10.12.19 20:01:37 MSK
← 1 2 →

Я думаю, писать подобное на С на сегодняшний день совершенно нерелеванто. Хотя бы потому, что в случае с SDL2 придётся переизобретать на C то, что люди давно написали на плюсах в SFML (графическое API которого — плюсовая обёртка над OpenGL, те же шейдеры использовать очень удобно).
Meyer ★★★★★
( 10.12.19 20:04:05 MSK )
Последнее исправление: Meyer 10.12.19 20:05:29 MSK (всего исправлений: 1)

Зачем тебе opengl если собираешься переходить на sdl? А еще есть вулкан. Че делать то собрался? Если для изучения комп графики, забудь про sdl и прочие врапперы.
BOSS-NIGGER ☆
( 10.12.19 20:08:06 MSK )

Может стоит сначала разобраться в OpenGL, а потом переходить на какой-нибудь SDL2
SDL2 можно освоить за вечер, а OpenGL это любовь на всю жизнь 🙂
cvv ★★★★★
( 10.12.19 20:09:05 MSK )
Ответ на: комментарий от cvv 10.12.19 20:09:05 MSK

Любовь с первого взгляда?
snake266 ★★
( 10.12.19 20:09:47 MSK ) автор топика
Ответ на: комментарий от BOSS-NIGGER 10.12.19 20:08:06 MSK

Ну интерес у меня больше академический, чем практический
snake266 ★★
( 10.12.19 20:10:31 MSK ) автор топика
Ответ на: комментарий от Meyer 10.12.19 20:04:05 MSK

У меня скорее академический интерес, поэтому что то переизобретать я не боюсь
snake266 ★★
( 10.12.19 20:12:05 MSK ) автор топика
Ответ на: комментарий от snake266 10.12.19 20:09:47 MSK

Ну это дело вкуса
cvv ★★★★★
( 10.12.19 20:12:28 MSK )
SDL2 изучай, тебе все равно окно для OpenGL создавать чем то надо. Хотя я хз зачем тебе такие низкоуровневые либы.
insw
( 10.12.19 20:13:28 MSK )
Последнее исправление: insw 10.12.19 20:14:39 MSK (всего исправлений: 1)
Ответ на: комментарий от snake266 10.12.19 20:12:05 MSK

Ну в таком случае, с помощью OpenGL можно и всякие двухмерные вещи рисовать без каких-либо проблем. А на SDL2 переложить создание окна, OpenGL контекста, обработку ввода, кроссплатформенный I/O и т.д.
Meyer ★★★★★
( 10.12.19 20:15:25 MSK )
Ответ на: комментарий от snake266 10.12.19 20:10:31 MSK

Значит смотри на 10-15 лет вперед. Я серьезно. Ray tracing, алгоритмы, развитие железа, там много направлений. Дохрена чего. Убить кучу времени на опенжеле ты всегда успеешь. Получишь незабываемых впечатлений, это да. Конечно, может и стоит немного времени на это потратить, но не зацикливайся.
А sdl это спрайты двигать, утилитарщина одним словом.
BOSS-NIGGER ☆
( 10.12.19 20:18:50 MSK )
Ответ на: комментарий от insw 10.12.19 20:13:28 MSK

SDL2 изучай, тебе все равно окно для OpenGL создавать чем то надо.
Я пока использовал GLUT для создания окон.
Хотя я хз зачем тебе такие низкоуровневые либы.
Узнать как все это работает под капотом. Чтобы понимать, как устроен sdl
snake266 ★★
( 10.12.19 20:19:02 MSK ) автор топика

Взгляни на Corange. Ничто не мешает использовать SDL как просто инициализатор контекста, а всё остальное делать без призязок к нему.
Изучай OpenGL спокойно, а SDL используй просто как упрощение своей жизни. Открыть окно, получать эвенты, всё то что к OpenGL отношения не имеет, но также всё то что делает изучение удобнее. Ты же хочешь вывести квадратик на экран и двигать его мышкой? Ну так выводит через OpenGL, а двигай через SDL. Это два API которые дополняют друг друга, а не заменяют. И да можешь смело просто не использовать функции типа SDL_GLblablabla это всё опционально и не обязывает ни к чему.
LINUX-ORG-RU ★★★★★
( 10.12.19 20:22:48 MSK )
Ответ на: комментарий от BOSS-NIGGER 10.12.19 20:18:50 MSK

Хм, да, надо будет почитать про это на досуге.
snake266 ★★
( 10.12.19 20:25:28 MSK ) автор топика
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 20:22:48 MSK

Спасибо за такой развернутый ответ. А что можете сказать про Vulkan? Стоит его трогать?
P.S. Если честно, ждал вашего ответа, так как иногда видел ваши работы и удивлялся им. Можно ли где-то найти ссылку на ваш гитхаб? Было бы очень интересно посмотреть на ваш код.
snake266 ★★
( 10.12.19 20:34:02 MSK ) автор топика
Ответ на: комментарий от snake266 10.12.19 20:25:28 MSK

Если задача не только движки для игрушек делать, то ещё взгляни на физически корректный рендеринг.
Вот известный материал по этому. (pdf).
Весьма интересно, но помимо этого нужно оптику осилить, если профессионально заниматься решишь.
Artamudo ★★★★
( 10.12.19 20:34:57 MSK )
Ответ на: комментарий от Artamudo 10.12.19 20:34:57 MSK

Выглядит очень интересно. За пдфку спасибо, будет что почитать скучными вечерами.
snake266 ★★
( 10.12.19 20:38:49 MSK ) автор топика
Ответ на: комментарий от BOSS-NIGGER 10.12.19 20:18:50 MSK

Не надо недооценивать SDL. Про спрайтодвигатель это вообще лол. Он просто даёт тебе аппаратно ускоренное API для 2D графики, а что ты будешь там рисовать дело десятое хоть спрайты хоть всю десткопную графику выводить.
Ида это фундаментальная «утилитарщина» именно благодаря которой можно удобно и практично изучать алгоритмы, развитие железа и рейтрейсинг (тебя маркетологи покусали? ахах, это вещи которым 100 лет уже)
На OpenGL вообще зацикливатся не надо. Текстуры, буферы, шейдеры в удобных обёртках под себя и вуаля рисуй что хочешь и как хочешь. Весь OpenGL знать не надо. Надо только то чем ты будешь пользоваться, а это чаще всего лишь десяток функций и десяток констант и всё.
Ты как то завуалировано предлагаешь ему использовать готовые движки.
LINUX-ORG-RU ★★★★★
( 10.12.19 20:39:23 MSK )
Ответ на: комментарий от snake266 10.12.19 20:38:49 MSK

За вечер такое вряд ли осилишь (или кто-то осилит вообще), но я видел примеры самописных движков у которых получалось.
UPD: Ещё интересно выглядит Lisp в компьютерной графике, за счёт того что можно писать красивые анимации в красивом коде IMHO. Вот примеры 1, 2.
И ещё потому что программа изменяется прямо на ходу без перезапуска.
Поскольку у тебя Haskell и Emacs в подписанных тегах, то тебе это будет весьма занимательно.
Artamudo ★★★★
( 10.12.19 20:42:12 MSK )
Последнее исправление: Artamudo 10.12.19 20:54:04 MSK (всего исправлений: 2)
Ответ на: комментарий от snake266 10.12.19 20:34:02 MSK
Нубские туториалы по графике есть только для опенжоеля/d3d. Но для «Узнать как все это работает под капотом» очевидно курят и вулкан, да и после вкуривания опенжоеля 3+ особого труда не составит.
anonymous
( 10.12.19 20:44:28 MSK )
Ничего адекватного для 3D нет. Для 2D хоть отбавляй.
anonymous
( 10.12.19 20:51:21 MSK )
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 20:39:23 MSK

ро спрайтодвигатель это вообще лол.
man образное выражение
Ты как то завуалировано предлагаешь ему использовать готовые движки.
Я ему завуалировано предлагаю забить на opengl и sdl (что рано или поздно произойдет и так, если он не собирается быть граф программистом), и вместо этого просто посмотреть на перспективы. Скорее всего он просто не знает что делать (исходя из ОП). Втыкание в экран на котором плавает треугольник эту проблему не решит. А интерес, как он написал у него академический. Но т.к. он скорее всего школьник или первокурсник, то я даже ванговать не буду что он сделает в конце концов.
удобно и практично изучать алгоритмы, развитие железа и рейтрейсинг
да, особенно развитие железа : ) но скажем так, пользы их я и нигде не отрицал
BOSS-NIGGER ☆
( 10.12.19 20:59:46 MSK )
Ответ на: комментарий от snake266 10.12.19 20:34:02 MSK

Если первое — твоё железо и дрова его могут и второе — если ты готов смирится что твой код не будет работать на железе 5ти летней давности и свободных дровах. Ну то есть у меня Radeon HD 6850 я катаю в csgo (OpenGL версию нативную) но не смогу даже с проприетарными дровами запустить ничего на Vulkan ибо там сделанно всё что бы сделать железо прошлых поколений просто нерабочим причём намеренно. Но Vulkan позволит тебе то что OpenGL делает за тебя делать руками. Ну например в OpenGL ты говоришь вот тебе массив вершин вот тебе шейдер и вот тебе текстуры -> рисуй. В вулкане ты говоришь вот тебе массив вершин вот блок текстур вот индекс вот устройство вот последовательность рисвоваания вот тебе банк памяти (ещё пяток всего при полном контроле) -> рисуй. Короче то что в OpenGL делает драйвер в вулкане это делается руками. Если у тебя супералгоритм какой то да ты более свободен. Если тебе нужно как и всегда было нужно рисовать по правилам которые ты установил в шейдере и всё и тебя не заботит как будет видеокарта с памятью разруливать траблы то OpenGL.
Это на ютубчике чтоль? =)
Ну на гитхабе у меня пусто считай я по сути сам учился на коде Corange https://github.com/orangeduck/Corange можешь там issue и пул-реквесты глянуть (fedor-elizarov это я там) закрытые я туда пару демок пропихнул в том числе некоторое которое есть на ютубчике. Возьми к примеру демку с чайником, там по сути всё в одном. Даже основной рендер не используется. А в демке parallax типа продвинутые шейдеры и ты можешь с ними играться как угодно (например вот тебе задачка взять эффект из shadertoy и запустить его на corange =))
Клонируй Corange запускай демки и смотри как они работают. Потрать время и разберёшься. А потом либо чисто своё начнёшь либо просто за основу коранж можно взять.
Что бы просто не терятся в терминах и не грузится лишним можно глянуть сюда https://learnopengl.com/ на хабре есть переводы
сюда http://steps3d.narod.ru/articles.html на gamedev.ru статьи посмотреть. Не что бы зазубривать ТООООННЫ иныф нененене. Просто ради интереса и фана поглазеть (даже если нихрена не поймёшь оно уже будет на слуху и не будет пугать)
Не старайся заучивать всё прям изучааать там. Практика и только она и лучший способ это взять готовое и глянуть как оно работает чтобы избежать всяких непоняток.
Лично я OpenGL знаю нуууу 1% где то. Но лично мне этого хватит чтобы отрисовать что угодно как угодно и на чём угодно с расчётами хоть на CPU хоть на GPU. Да и программистом я не являюсь. Чисто любитель.
И да, ещё раз читай всякие статьи. Обычно их пишут в весёлой манере. Но это лично из своего опыта что бы подогревать интерес и не пугаться непонятных слов которые в сути своей являются как оказывается вполне обычными вещами.
Ну, а так. Бури и кодируй. Создал окно. Узнал как получить тектуру, узнал как загрузить буфер вершин, узнал как написать шейдер и потом как запустить всё это вместе и это 99% фундаментального кода которое ты опишешь 1 раз а потом только разве что коректировать будешь.
Короче дерзай. Главное практируй что-бы видеть результаты и радваца что квадратик рисуется, пусть маленький пусть кривой, пусть непонятно чё с ним делать но он твой бляха муха цикатуха! и всё тут. Короче играйся больше с кодом.
LINUX-ORG-RU ★★★★★
( 10.12.19 21:13:54 MSK )
Ответ на: комментарий от Artamudo 10.12.19 20:34:57 MSK

PBR не стоит упоминать на ранних этапах обучения графике. Он реализуется при должных знаниях за 1 день в 1 шейдере. Да и если честно PBR это эмммм. Это тупо хайп. Внезапно появившаяся философия того что надо рисовать как в жизни. Типа тренд. А в сообществе игровых движков сразу типа — «Нет пайплайна для PBR ты лох и твой ивиг тоже лох, фуууу днищеее» и всё такое.
Настоящий PBR в том виде который он должен быть никто включая юнриал, юнити,крайтеки не используют ибо это красивое в теории да на словах. А на деле памяти под это всё надо до жопы поэтопу все делают так что результат как в PBR а на деле подходы разные.
И ваще это больше к созданию контента, всё дело в текстурах, если раньше дифуз + нормаль ну и ещё моожет быть спекуляр и всё то сейчас минимум 6 текстурных карт на объект. Да их упаковывают но всё же.
Хотя просто почитать про это всё интересно. Это да.
LINUX-ORG-RU ★★★★★
( 10.12.19 21:24:04 MSK )
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 21:24:04 MSK

Так для игр его и не стоит применять, это для фильмов, и для 3d анимации. Если ты смотрел Короля Льва 2019 года, то там эта технология реализована. Лучше графики чем в нём, ещё не видел.
Artamudo ★★★★
( 10.12.19 21:28:35 MSK )
Ответ на: комментарий от Artamudo 10.12.19 21:28:35 MSK
Не стоит применять? Это наибольший реальный буст к графонию в игорях, по сравнению ним все остальные графические фичи говно полное, чисто греющее видеокарту впустую.
anonymous
( 10.12.19 21:35:21 MSK )
Ответ на: комментарий от anonymous 10.12.19 21:35:21 MSK

Вот когда твоя видеокарта будет тянуть его в Real-Time, то ради Б-га. А так на современных видеокартах только недавно Ray Tracing начали внедрять.
Artamudo ★★★★
( 10.12.19 21:38:49 MSK )
Ответ на: комментарий от BOSS-NIGGER 10.12.19 20:59:46 MSK

Ну, одну две недельки поковыряется и решит. Да я остаюсь на C+SDL2+OpenGL2/3/4 или Нет мне надо что-то повыше уровнем.
В любом случае зайди на любой форум где люди делают игры и прочее с графикой, очень часто даже используя движки они вынуждены спускаться на уровень чистого OPENGL или узнавать что-то о SDL который как подсистема встроен почти во все AAA даже движки как прослойка. Работает жрать не просит. Вон Gamedev_ru тему начинают как префаб в юнити использовать, а заканчивают какой уровень мипмапа устанавливать для новой текстуры и какую разрядность установить для Depth текструры Gбуфера 😀 Что по итогу к юнити никакого прямого отношения не имеет в плане интерфейсов, но даёт понимание почему жрётся память и то или иное возможно или невозможо. Короче вреда он точно не получит.
LINUX-ORG-RU ★★★★★
( 10.12.19 21:38:50 MSK )
Ответ на: комментарий от Artamudo 10.12.19 21:28:35 MSK

А ну да. Тогда ок.
LINUX-ORG-RU ★★★★★
( 10.12.19 21:40:13 MSK )
Ответ на: комментарий от anonymous 10.12.19 21:35:21 MSK

Я тебе открою тайну PBR использовали ещё до появления термина как такового. Сразу же как только позволила видеопамять. Ещё во времена первых крузисов =) Просто тогда это не выделяли в нечто отдельное и применялось только к оружке и подобному что в глаза тыкается =)
LINUX-ORG-RU ★★★★★
( 10.12.19 21:43:11 MSK )
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 21:38:50 MSK

Нашёл твой канал но YouTube и весьма заинтересовался EGNAROC. На гите у тебя репозитория не нашёл.
Artamudo ★★★★
( 10.12.19 22:17:07 MSK )
Ответ на: комментарий от Meyer 10.12.19 20:04:05 MSK

Ууууу, да нифига подобного. Посмотри любой доклад по геймдеву начинают за блюпринты и мышевозие заканчивают про ручной заход солнца с побитовыми манипуляциями памяти и бенчмарками фандаментальных вызовов графических API с сотней нюансов и хаков =) шобы пропихнуть графон в лимит филрейта видюхи. И по итогу для общих случаев да выбирают готовые обёртки, а для 90% всего остального выбор либо топать в библиотеку ассетов где всё додумали заместо тебя и выложить доллары денег либо опускаться в фундаментальщину и писать всё самим что чаще всего и делают. И тут внезапно надо уметь знать как оно там работает в реальности. Потому что в ряде случаев надо под свои потребности сам SDL править =) Да и часто если выбирают для графона C++ то пишут по итогу всё равно на С потому что плюшки плюшками, а кадр 16 мс и выкручивайся как хочешь. А сейчас ваще по хорошему над на кадр 7мс надо ибо у людей герцовка и они требуют, я уж молчу про экшоны где на кадр в идеале хотят ~3-5мс а в игре 10 подсистем и на каждую бюджет уже наносекунд по итогу. И сидишь такой. Смотришь на все эти менстрим технологии десктопо строения и плакаешь от зависти — как же они счастливы можно целую секунду думать после нажатия кнопки в интерфейсе! 😀
LINUX-ORG-RU ★★★★★
( 10.12.19 22:32:11 MSK )
Ответ на: комментарий от Artamudo 10.12.19 22:17:07 MSK

EGRAROC это форк CORANGE 😀
Исходников нет, я делаю игру и затачиваю форк специально под игру. Некоторые приколюхи изредка возвращаю обратно в Corange правлю там баги и добавляю демки.
Но у меня подход к движку другой Сorange идеальный для старта затачивания под себя. Будет время предложу динамические отражения, более продвинутые частицы, анимированные текстуры, воспроизведение видео через собвственный примитивный но быстрый видеокодек, реализацию gui контейнеров для мышевозного создания ui элементов и так далее включая компиляцию в 1 файл вместе со всеми зависимостями и ресурсами игровыми. Всё это и ещё некоторое есть но находится в ужасном состоянии. Выкладывать такое стыдно. Доработаю. Доделаю игру. Выпущу в Steam. Отшлифуется предложу Даниэлю свои фичи, может примет что-то. А так у меня нет желания выкладывать EGNAROC в опенсорс во первых кроме меня он нахрен не нужен никому, он по сути полигон где я каждый день ломаю обратную совместимость с самим собой и Corange уж подавно. Я так и оставлю его чисто для себя и своей игры. А 100% рабочие вещи буду портировать обратно в Corange по возможности. Да и вообще я заболел концепцией ECS и тотальной оптимизации всего и вся и тут некоторая архитекрура уже мне не нравки, если решусь то буду делать с нуля микродвиг на тотальном ECS. Тогда просто выкину все наработки EGRAROC и забуду про него. Но пока здравый смысл меня останавливает.
Короче, всё что ты видел на ютубчике можно сделать на Corange, параллакс я уже добавил, работу с физикой тоже, работу с gui тоже,для всего этого есть демки там, в issue есть код для реализации SSLR. Ну, а остальное lua скриптинг к примеру у меня есть но на зачаточном уровне. Всё это валом на одного меня откровенного быдлокодера тяжело. Да и делается всё не по приколу а чисто для игры. Хотя… почему не по приколу, по приколу конечно =) Но сутьв том что я всеми силами стараюсь делать именно игру, а не бесконечно пилить ещё один двиг
Ахаха. Ты даже подписался =) Мама я ютуер ТЫШЬ табуреткой по голове мааааааам не бей меня мааааааам ))))))))
Через месяц пресс релиз моей игры…. Будешь ржать если увидишь ахаха. И я настолько наглый что выйду с ней в ситим Габеееен пасиба за билетики в библиотетики =)
LINUX-ORG-RU ★★★★★
( 10.12.19 22:51:04 MSK )
Последнее исправление: LINUX-ORG-RU 10.12.19 22:59:58 MSK (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 22:51:04 MSK

Ахаха. Ты даже подписался =) Мама я ютуер ТЫШЬ табуреткой по голове мааааааам не бей меня мааааааам ))))))))
Через месяц пресс релиз моей игры…. Будешь ржать если увидишь ахаха. И я настолько наглый что выйду с ней в ситим Габеееен пасиба за билетики в библиотетики =)
Разве кроме демок ещё что-то есть?
Artamudo ★★★★
( 10.12.19 23:07:10 MSK )
Ответ на: комментарий от Artamudo 10.12.19 23:07:10 MSK

Пока нету. Да я так полушутя в целом. Есть куча наработок, которые начал, но не доделал. Короче ладно фиг со всем этим.
Основная суть в том что Corange топ если хочется С/SDL/OGL то рекомендую. Благо он устроен так что можно удобно выкидывать ненужное и добавлять своё.
А видосы это просто помойка когда надо скинуть что-то разок показать не более.
LINUX-ORG-RU ★★★★★
( 10.12.19 23:15:49 MSK )
Ответ на: комментарий от snake266 10.12.19 20:34:02 MSK

К слову на этом форуме касательно этой темы лучше не на меня внимание обращать, а на EXL eagleivg i-rinat и подобных и не стесняться их кастовать по вопросам 😀 Они в отличии от меня реальные вещи делали, а не полувымышленые
LINUX-ORG-RU ★★★★★
( 10.12.19 23:38:06 MSK )
Последнее исправление: LINUX-ORG-RU 10.12.19 23:38:58 MSK (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU 10.12.19 23:38:06 MSK

Ну, не знаю почему, но ваши сообщения, в интересных для меня тредах, я видел чаще, поэтому я точно знал, что вы знаете что к чему. Ну и как-то неловко людей кастовать для такого нубского треда.
Создание графической библиотеки своими руками [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 6 лет назад .
Давно хотел попробовать с нуля создать свою простенькую графическую библиотеку типо OpenGL или там DirectX, исключительно из спортивного интереса(давно интересуюсь этой темой и как то писал простенький рендер трассировкой лучей на java, но сейчас хочу сделать отрисовку в реальном времени). может кто подсказать библиотеки для c++ ну или подскажите куда копать. Одной из целей является отрисовка вращающихся моделек формата obj. По сути, все что нужно от библиотеки-рисование точки заданного центра в заданных координатах, ну или формирование битмапа и его отрисовка целиком
Отслеживать
задан 9 апр 2017 в 17:56
53 1 1 серебряный знак 8 8 бронзовых знаков
Так написать с нуля или взять готовую?
9 апр 2017 в 18:25
9 апр 2017 в 22:12
@AlexanderPetrov Спасибо, отличная статья, но меня интересует не алгоритм визуализации, а способ рисования, в данной статье изображение выводится в файл, как я понял, а меня интересует отрисовка в реальном времени. Тем не менее мне будет полезно её почитать еще раз)
10 апр 2017 в 4:36
@Arhad Да я вроде ясно написал, что хочу написать свой велосипед с нуля, ездить я на нем не буду, а написать охота.
10 апр 2017 в 4:37
меня интересует отрисовка в реальном времени – ну так замените вывод в файл на вывод в окно с помощью BitBlt , плюс перерисовывайте минимум 24 раза в секунду. Всё равно большая часть статьи посвящена именно растеризации и проецированию.
10 апр 2017 в 6:49
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если не смотреть вглубь работы графических карт, не принимать в расчёт шейдера и прочие вещи, которые уже давно написаны и вылизаны до максимальной степени в графических библиотеках аля Direct3D / OpenGL, то можете попытаться писать на WinAPI, рисуя на контексте (HDC). ( Считай это наводкой ). Если хочешь ещё ниже к ядру оси, почитай про GDI и реализуй свой WinAPI.
Впрочем, нет смысла городить велосипеды, когда есть достаточно уже обкатанные рабочие либы, лучше воспользоваться ими. По опыту скажу, рисовал модели Maya ( это те самые *.obj ) и при помощи WinAPI, и при помощи OpenGL, на OpenGL это в разы быстрее.
Отслеживать
ответ дан 9 апр 2017 в 21:16
26 3 3 бронзовых знака
Неясно чего вы хотите, что OpenGL что DirectX не являются библиотеками, у них есть одинаковые функции, но по существу они отличаются хотя бы тем, что первый это стандарт по котору программируется графика на разных языка и кроссплатформенно, а второй — DirectX набор библиотек от майкрософта для написания мультимедийного софта.
Одной из целей является отрисовка вращающихся моделек формата obj
Для этого будет вполне достаточно использовать OpenGL 4.x например, парсить .obj файл и применять базовые функции этого API для рисования примитивов, наряду с некоторыми базовыми матричными операциями для всяких пространственных преобразований
А написание своего OpenGL или Direct3D относится к разработке собственного рендера — грубо говоря набора низкоуровневых функций позволящих например, быстро отрисовать линию по какому-нибудь алгоритму или закрасить многоугольник каким-нибудь цветом — тоесть здесь совсем другие вещи применяются, в основном мало связанные с той типичной 3D математикой с которой сталкиваешься при непосредственном использовании OpenGL или Direct3D
Подключить графическую библиотеку OpenGL в VS 2013. Ошибки=(
Error 1 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1157 1 Snake
Error 2 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1157 1 Snake
Error 3 error C2146: syntax error : missing ‘;’ before identifier ‘glAccum’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1157 1 Snake
Error 4 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1157 1 Snake
Error 5 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 6 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 7 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 8 error C2146: syntax error : missing ‘;’ before identifier ‘glAlphaFunc’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 9 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 10 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1158 1 Snake
Error 11 error C2146: syntax error : missing ‘;’ before identifier ‘GLboolean’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1159 1 Snake
Error 12 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1159 1 Snake
Error 13 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1159 1 Snake
Error 14 error C2146: syntax error : missing ‘;’ before identifier ‘glAreTexturesResident’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1159 1 Snake
Error 15 error C2371: ‘APIENTRY’ : redefinition; different basic types c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1159 1 Snake
Error 16 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 17 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 18 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 19 error C2146: syntax error : missing ‘;’ before identifier ‘glArrayElement’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 20 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 21 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1160 1 Snake
Error 22 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 23 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 24 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 25 error C2146: syntax error : missing ‘;’ before identifier ‘glBegin’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 26 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 27 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1161 1 Snake
Error 28 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 29 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 30 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 31 error C2146: syntax error : missing ‘;’ before identifier ‘glBindTexture’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 32 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 33 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1162 1 Snake
Error 34 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 35 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 36 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 37 error C2146: syntax error : missing ‘;’ before identifier ‘glBitmap’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 38 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 39 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1163 1 Snake
Error 40 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 41 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 42 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 43 error C2146: syntax error : missing ‘;’ before identifier ‘glBlendFunc’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 44 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 45 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1164 1 Snake
Error 46 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 47 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 48 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 49 error C2146: syntax error : missing ‘;’ before identifier ‘glCallList’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 50 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 51 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1165 1 Snake
Error 52 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 53 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 54 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 55 error C2146: syntax error : missing ‘;’ before identifier ‘glCallLists’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 56 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 57 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1166 1 Snake
Error 58 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 59 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 60 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 61 error C2146: syntax error : missing ‘;’ before identifier ‘glClear’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 62 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 63 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1167 1 Snake
Error 64 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 65 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 66 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 67 error C2146: syntax error : missing ‘;’ before identifier ‘glClearAccum’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 68 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 69 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1168 1 Snake
Error 70 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 71 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 72 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 73 error C2146: syntax error : missing ‘;’ before identifier ‘glClearColor’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 74 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 75 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1169 1 Snake
Error 76 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 77 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 78 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 79 error C2146: syntax error : missing ‘;’ before identifier ‘glClearDepth’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 80 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 81 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1170 1 Snake
Error 82 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 83 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 84 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 85 error C2146: syntax error : missing ‘;’ before identifier ‘glClearIndex’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 86 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 87 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1171 1 Snake
Error 88 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 89 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 90 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 91 error C2146: syntax error : missing ‘;’ before identifier ‘glClearStencil’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 92 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 93 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1172 1 Snake
Error 94 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 95 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 96 error C2086: ‘int WINGDIAPI’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 97 error C2146: syntax error : missing ‘;’ before identifier ‘glClipPlane’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 98 error C2182: ‘APIENTRY’ : illegal use of type ‘void’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 99 error C2086: ‘int APIENTRY’ : redefinition c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1173 1 Snake
Error 100 error C2144: syntax error : ‘void’ should be preceded by ‘;’ c:\program files (x86)\windows kits\8.1\include\um\gl\gl.h 1174 1 Snake
Вложения
| Errors.doc (56.5 Кб, 3 просмотров) |
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Не могу подключить графическую библиотеку страуструпа
Код: #include "Graph.h" #include "GUI.h" #include "Point.h" #include "Simple_window.h".
Как подключить библиотеку openGL?
Товарищи помогите начинающему . осваиваю графику на основе openGL компилятор жалуеться на все.

Как подключить OpenGL к Visual studio 2013?
Сделал вот так: — Скачал с официального сайта GLUT. — Скопировал папку includes & lib в.
515 / 407 / 188
Регистрация: 08.04.2013
Сообщений: 1,738
как создал проект и или просто код вставил от болды
созданный проект в крайнем случае выглядит так у 2008 VS
1 2 3 4 5
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; }
и у тебя #include «stdafx.h» должен быть подключен
и ссылочка в придачу http://pmg.org.ru/nehe/nehe01.htm
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
Сообщение от marat_miaki 
и у тебя #include «stdafx.h» должен быть подключен
Почему это он должен быть подключен? Что мешает без него создать пустой проект?
515 / 407 / 188
Регистрация: 08.04.2013
Сообщений: 1,738
просто создай пустой проект и увидишь что будет, если такой спец уже что тогда спрашиваешь
вот еще для начала http://grafika.me/node/96
ищи в инете полно инфы как начать. У тебя свои тараканы в мозгу, нам они не нужны
Добавлено через 8 минут
Ну для начала наверное надо свой инструмент VS2013 хорошенько изучить, потом основы С++, а потом уже в OpenGL лезть
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
Сообщение от marat_miaki 
просто создай пустой проект и увидишь что будет, если такой спец уже что тогда спрашиваешь
вот еще для начала http://grafika.me/node/96
ищи в инете полно инфы как начать. У тебя свои тараканы в мозгу, нам они не нужны
Добавлено через 8 минут
Ну для начала наверное надо свой инструмент VS2013 хорошенько изучить, потом основы С++, а потом уже в OpenGL лезть
Создал пустой проект, без заголовочного файла. Из гайда скопировал код.
Профит
То что в гайде пример с этим заголовком — никак на OpenGL не влияет.
Пусть TS попробует подключить не а просто или полный путь до либы прописать, предварительно файлы .lib зарегистрирует в свойствах проекта как доп. зависимости.