Хочу видеорежим 1280*1024*24bit !

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Trojan Bot
новенький
Сообщения: 10
Зарегистрирован: 11.01.2010 14:17:34

Хочу видеорежим 1280*1024*24bit !

Сообщение Trojan Bot »

Хотелось бы иметь доступ к полноэкранному видеорежиму с высоким разрешением и глубиной цвета как минимум 16bit, и вожможность просто выводить цветные пиксели в координатах xy. Как это можно сделать в Opengl? Есть ли какие-нибудь статьи, проливающие свет на видеопамять и прочие нюансы? Помогите пожалуйста, а то 320*200*8bit мне уже ВО где...
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Именно в OpenGL? Тогда Вам нужно найти книгу Михаила Краснова "OpenGL. Графика в проектах Delphi ". Там об этом всё написано.
Trojan Bot
новенький
Сообщения: 10
Зарегистрирован: 11.01.2010 14:17:34

Сообщение Trojan Bot »

Delphi - это не мое. я читал статьи "FPC и Opengl" - вроде все понятно, но там сразу переходят на примитивы, объекты, освещение... А как сделать самый народный Putpixel там не упоминается (возможно). Хотелось бы сначала самому поюзать 2D, а потом уже переходить на библиотечную графику.
Как сделать Putpixel в Opengl?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Trojan Bot писал(а):Delphi - это не мое.

Так я и не предлагаю Вам на Delphi переходить, Вы уж меня так страшно не позорьте перед людьми. :D
Вы книжку просто почитайте. Ведь ни для кого не секрет, что FreePascal и Delphi - это, практически, близнецы-братья. И там и там используется практически один и тот же код при написании своего приложения.
А вот на счёт пикселей, боюсь Вы не туда смотрите. OpenGL как раз и создавался в расчёте на работу с объектами и тем, что Вы называете примитивами. Если просто хотите покидать на экран пикселы, то подойдёт обычная графическая библиотека FP или WinAPI. Зачем для этого использовать OpenGL, смысл то какой?
Если Вы непременно настаиваете на точках в OpenGL ( ;) ), то надо в программные скобки добавить специальную константу - GL_POINTS:

Код: Выделить всё

glPointSize (30);   // размер точки в пикселях
glColor3f (1.0, 0.0, 0.5);   //Цвет точки в RGB
glBegin(GL_POINTS)
  glVertex2f(X, Y);   //Координаты точки
glEnd;
SwapBuffers(ХэндлПоверхностиКудаРисовать);

Если сравнить с WinAPI, то строчек кода для такой простой операции получается больше.
Trojan Bot
новенький
Сообщения: 10
Зарегистрирован: 11.01.2010 14:17:34

Сообщение Trojan Bot »

Спасибо, буду шарить WinApi. Хотелось бы посмотреть на аналогичный код для WinApi... Не подскажешь ли нужную функцию? :roll:
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Спасибо, буду шарить WinApi. Хотелось бы посмотреть на аналогичный код для WinApi... Не подскажешь ли нужную функцию? :roll:

WinApi не нужен. :roll:
Лучше используй кроссплатформенный код. Обьект TCanvas тебе в помощь. Поставить точку на экране проще простого:

Код: Выделить всё

Canvas.Pixels[x,y]:=clGreen;

Причём под виндой это всё-равно обёртка над WinApi , только проще и кроссплатформенней.
Это раз. А во-вторых, на будущее забудь про попиксельную обработку графики - так никто не делает (разве-что в крайних случаях и не через "поставить точку на экране", а через что-то вроде "сперва попиксельно обработать буфер, а затем его целиком вывести на экран" или "обработать каждый пиксел специальной программой прямо в видеопамяти").
ПС. Посмотри демки из lazarus\examples.
ПС2. А если для серьёзных вещей графика нужна, то всё-равно надо будет OpenGL/DirectX изучать, только опять таки про попиксельный вывод примитивов забудь, разве-что почитай про шейдеры.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Trojan Bot
Безобразничаем на рабочем столе. :)

Код: Выделить всё

Uses Windows;
...
Randomize;
DC:=GetDC(0);  //Получим контекст устройства рабочего стола
For i:=0 To 999 Do
  SetPixel(DC, Random(Кол-во пикселей по горизонтали), Random(Кол-во пикселей по вертикали), RGB(R, G, B));

Здесь я специально ввёл несколько генераторов чисел, чтобы точки появлялись в разных случайных местах экрана. Вместо функции RGB() можно подставить конкретное число цвета.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Trojan Bot
glDrawPixels
Trojan Bot
новенький
Сообщения: 10
Зарегистрирован: 11.01.2010 14:17:34

Сообщение Trojan Bot »

Спасибо всем! :D Все же буду юзать Opengl, потому как хочу делать игры. Щас читаю книгу Краснова.

P.S.
Над десктопом весело поиздевался :mrgreen: :mrgreen: :mrgreen:
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Почему не SDL, если нужно только 2D?

..bw
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Потому что стандартный SDL в 2D это под виндой тот же самый старый и медленный DirectDraw. Его уже для игр никто не использует. А если SDL и используеться, то только для создания окна (таймеров, инпута и пр. мелких вещей), а для рисования всё-равно используют OpenGL.
Ответить