Графика в Delphi - примеры задач на построение графиков, а также компоненты для графики

Анимация спрайтов


Все ниже написанное относится к Delphi 5, в более старых версиях возможны отличия, а может и нет, не знаю.

Щас мы будем анимировать спрайт. Он будет состоять из 6 промежуточных фаз.

Я его выдрал из Сеговской игрушки “Asterix & Obelix” (при помощи эмулятора), а Вы, если обладаете талантом, можете его нарисовать, ну или тоже выдрать :).
Должно получиться что-то похожее на это:

Сначала сделаем без использования DXSpriteEngine:
Создадим форму MainForm
На форме создадим
DXDraw, размером где-то 150×150,
DXImageList и
DXTimer Read more »

Изменение гаммы спрайта

Для чего это нужно. Эту технологию можно использовать для выделения “юнита”, или для выделения пункта меню. Одним словом для обозначения чего-либо.
Ну что не поняли? Показываю:
стандартный спрайт : спрайт с измененной гаммой

Как это делатся. Динамически создается новый спрайт с подложкой нужного цвета (фон) и на него накладывается с использованием Альфа смешения наш спрайт. Чем больше величина Альфа, тем больше будет “проявляться” фон, соответственно, если “фон” белый - спрайт будет осветляться.
Что касается TransparentColor - если фоновый цвет спрайта будет отличаться от “подложки” создаваемого спрайта, то придется подумать как определить новый TransparentColor. Можно конечно заранее его просчитать и использовать, а можно просчитать динамически, взяв, например, цвет фоновой точки (посмотрите координаты какой нибудь из них в редакторе) в полученном спрайте.
Read more »

Опять шрифты. Нормальная процедура отображения графических шрифтов

Сразу рассмотрим плюсы и минусы помещения каждой буквы в отдельное изображение!
Плюсы :
1.Более быстрая отрисовка (так как ищется только номер картинки).
2.Буквы рисуются аккуратно, на одинаковом расстоянии друг от друга.
Минусы:
1.Много файлов (256 штук) - этот минус отпадает сам, так как я буду использовать псевдо архив.
2.Довольно медленная загрузка (надо прочитать архив и повторить процедуру загрузки картинки в память 256 раз)

Сначала нам нужны все символы от 1 до 256 в BMP формате (желательно 256 цветов) из них и будет состоять шрифт. Сейчас мы напишем программу сохраняющая ваши символы в псевдо архив fnt. Создаем проект и после слова TYPE пишем:
Read more »

DXInput

В этой статье мы рассмотрим методы управления объектами в играх с помощью клавиатуры, мыши и джойстика..
1. Клавиатура.
Опрос нажатия клавиши ведется через DXInput.States:

if <тикер> in DXInput.States then
begin
//действие
end

,где

* <тикер> есть зарезервированное слово:
* isUp - по умолчанию “стрелка вверх”
* isDown - по умолчанию “стрелка вниз”
* isRight - по умолчанию “стрелка вправо”
* isLeft - по умолчанию “стрелка влево”
* IsButton1 - по умолчанию “Space”
* IsButton2 - по умолчанию “Enter”
* IsButton3-IsButton32 - по умолчанию не определены
Read more »

Collision

Итак, у нас есть спрайты. Они рисуются, двигаются, но не взаимодействуют друг с другом. И вот для того, что бы мячики отскакивали, пули попадали во врага, а герои не проваливались сквозь пол, в DelphiX есть замечательная вещь как проверка на столкновение, которая в большинстве случаев поможет избежать написание собственного движка.
Есть два метода определение столкновений.
1. Проверка столкновения рамок: Простой тип, слежение идет за взаимным положением рамок спрайтов. При обнаружении пересечения координат, ябъявляется событие “столкновение”
2. Проверка столкновения точек: Сложный тип. Слежение ведется не только за взаимным положением рамок спрайтов, но и за взаимным положением самих изображений. Событие “столкновение” объявляется при обнаружении пересечения точек изображений.
Read more »

Система рационального создания спрайтов

B примере мы рассмотрим Четыре способа создания спрайтов:
1. Аркадный
2. Нерациональный
3. Рациональный
4. Рациональный два
Итак способ первый - Аркадный. Его смысл заключается в том, что процедура создания спрайта описывается в коде заранее, а значит параметры спрайта определены ещё до его появления. Вот пример:
Read more »

Как заставить работать DelphiX и UnDelphiX под Delphi6

Введение

Эта статья расскажет вам как откомпилировать известные библиотеки DelphiX и UnDelphiX под Delphi 6.0. Весь процесс займет не больше 15-20 минут, кроме того вы изучите общие приемы, которые могут помочь в аналогичных ситуациях. Почему это статья, а не, скажем, патч или дополнение к Delphi? Есть две причины:

1) По соглашению об использовании библиотеки (”TERMS AND CONDITIONS OF USE”), нельзя рапространять измененные части дистрибутива DelphiX.

2) Действия, которые необходимо совершить для конвертации проекта под Delphi 6.0, делают DelphiX несовместимой для использования в Delphi 3-5.

Предупреждение: пожалуйста, сохраните резервную копию всех изменяемых файлов. Методы, изложенные здесь, протестированы на Delphi 6.0 Personal, если у вас другая редакция (например, Professional), могут возникнуть непредвиденные проблемы.
Итак, перекомпиляция:
Read more »

DirectX и Delphi - введение

Как обычно, начну с оговорок.
Первое – для меня большая проблема перевести некоторые термины. Поэтому я думаю может и не стоит их переводить. :-) Вот список терминов, которые вызывают у меня трудности с переводом:

* blitting - blit сокращение от “bit block transfer” пересылка блоков данных из одной области видеопамяти в другую.
* flip – переключение между буферами видеопамяти
* Surface – “поверхность” – область видеопамяти

Второе – разговор идет о использовании DirectDraw в Delphi. Для того, чтобы воспользоваться DirectX вообще и DirectDraw в частности, нужно, чтобы во-первых DirectX был установлен на компьютере (скачать его можно у Microsoft например, впрочем я не думаю, что для читателя будет проблемой его найти), во-вторых нужны файлы заголовков DirectX – их существует немало, я по-прежднему считаю компонент DelphiX от Hiroyuki Hori – превосходным , кроме того, существует официально поддерживаемые Borland’ом заголовки DirectX, составленные в рамках проекта “JEDI” – скачать их можно с (http://www.delphi-jedi.org/DelphiGraphics/).
Read more »

Обработка событий клавиш в DelphiX

Если завис компьютер, выдерни шнур, выдави стекло.

Этот урок не совсем посвящен ДельфИксу. Сейчас вы научитесь обрабатывать такие события, как, например, нажатия клавиш. Но делать мы это будем не при помощи DXInput, так как я все ещё не знаю как с ним работать, делать мы это будем при помощи трех обычных событий: onKeyDown, onKeyUp и onKeyPreesed. Эти свойства есть и у формы и у DXDraw. Я буду работать с формой, кому больше нравится - могут работать с DXDraw, это ничего не меняет. Итак, в прошлый раз у нас была тарелка, летящая по уже заданной траектории. Теперь, я думаю было бы неплохо сделать спрайт стенки квадратным и небольшим, размножить их и добавить гравитацию, чтобы можно было летать по лабиринту и избегать столкновения со стенкой. Теперь стенка будет такой:

Можно будет размножить её, зная, что её размеры 23х23 и выстроить лабиринт. Кроме того не помешает создать спрайт “посадочной площадки”, чтобы в лабиринте была цель. У меня она будет такой:
Read more »

Blitting, Спрайты и Анимация

Для тех, кто интересуется, что это за слово такое “JEDI”– выберите в Delphi 5 пункт меню Help->About и наберите слово JEDI, удерживая нажатой клавишу Alt. Вы узнаете, что JEDI – это аббревиатура, расшифровывающаяся как Join Endeavor of Delphi Innovators. (на русский это можно перевести приблизительно – Совместные Усилия Дельфийских Новаторов или еще лучше - все для Delphi, все для победы) :-).

Звучит красиво, но нам-то что до этого? На самом деле нам до этого есть дело – в рамках проекта JEDI (кстати, некоммерческого и держащегося на энтузиазме, пусть и с официальным одобрением Borland), в рамках именно этого проекта были созданы заголовочные файлы DirectX для Delphi. Так скачаем же их! (http://www.delphi-jedi.org/DelphiGraphics/)
Read more »

О DelphiX

Доктор вы лечите боязнь открытых пространств?
- Конечно.
- А закрытых?
- Естественно…
- Видите у моего сына и то, и другое…
- Ааааа Квакеров мы не лечим…

DelphiX - плагин под Дельфи, но не простой, а… нет, и не золотой, он очень нужный! Нужнее DelphiX’а есть только один другой плагин - RX Library, но о нем в другой секции. Но что же это за плагин такой? ДельфиИкс - маленький модуль для Дельфей, который позволяет работать с DirectX под Delphi. С названием разобрались, теперь надо разобраться с тем, как он работает. В состав ДельфИкса входят: DXDraw, DXDib, DXImagelist, DX3D, DXSound, DXWave, DXWaveList, DXInput, DXPlay, DXSpriteEngine, DXTimer, DXPaintBox. Теперь расскажу о каждом понемногу:
Read more »

Написание хранителя экрана

1.В файл проекта {*.DPR} добавить строку {$D SCRNSAVE <название хранителя>} после строки подключения модулей (Uses…).

2.У окна формы убрать системное меню, кнопки и придать свойству WindowState значение wsMaximize.

3.Предусмотреть выход из хранителя при нажатии на клавиши клавиатуры, мыши и при перемещении курсора мыши.

4.Проверить параметры с которым был вызван хранитель и если это /c - показать окно настройки хранителя, а иначе (можно проверять на /s, а можно и не проверять) сам хранитель. /p - для отображения в окне установок хранителя экрана.

5.Скомпилировать хранитель экрана.
Read more »

Узнать, включен ли хранитель экрана

function ScreenSaverEnabled: Boolean;
var
status: Bool;
begin
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, @status, 0);
Result := status = True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ScreenSaverEnabled then
Caption := ‘Screensaver is enabled.’
else
Caption := ‘Screensaver is disabled.’
end;

Как запустить текущий ScreenSaver

В зоопаpке pебенок, возбужденно тыча пальцем
на клетку с пpиматами (обезьянами :), кpичит:
- Мама ! Мама ! Смотpи - пpогpаммисты !
- Почему ты так pешил ?
- Они как папа ! - не мытые, лохматые и мозоль на попе !!!

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

ScreenMate

Новая игра. Казахский DOOM!
Никаких тебе лабиринтов! Голая степь!

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

p.s К сожалению вам надо позаботиться о кадрах анимации этого персонажа самим т.к рисунки я послать немогу…
Read more »

Инсталляция Screen Saver

uses
shellapi;

procedure InstallScreenSaver(const FileName: string);
begin
{ Set this screensaver as default screensaver and open the properties dialog}
ShellExecute(Application.Handle, ‘open’, PChar(’rundll32.exe’),
PChar(’desk.cpl,InstallScreenSaver ‘ + FileName), nil, SW_SHOWNORMAL);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
InstallScreenSaver(’c:\YourScreenSaverFile.scr’);
end;

Получить время задержки хранителя экрана

function GetScreenSaverTimeout: Integer;
begin
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, @Result, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetScreenSaverTimeout) + ‘ Sec.’);
end;

Как отключить хранитель экрана

Встречаются два юзера. Один другому:
- Что-то лицо мне ваше знакомо, вы в скринсейверах не снимались?

procedure TForm1.Button1Click(Sender: TObject);
begin
{Turn it off}
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);

{Turn it on}
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
end;

Пишем ScreenSaver в Delphi

Пpогpаммеpы квасят на пpиpоде. Идут pазговоpы, тpали-вали… Один pассказывает: - Познакомился тут с девушкой на дискотеке! Бесподобная деваха! И фигуpка, и мозги есть, и танцует хоpошо! Так вот, pешил pickup”нуть ее к себе домой. Пpигласил, она согласилась. Пpишли, выпили винца, поговоpили о том, о сем, музыку послушали. Потом я ее поцеловал, пpиподнял аккуpатно, посадил задницей на клавиатуpу, поднял юбку… Остальные: - Так у тебя компутеp дома стоит?!?! А какой???

В примере описывается создание простейшего скринсейвера, а так же его установка и запуск.

Для написания скринсейвера нам необходимо включить следующие процедуры:

FormShow
скрыть курсор, установка обработки сообщений, начало отображения скринсейвера
FormHide
окончание отображения скринсейвера, отображение курсора
DeactivateScrSaver
обработка сообщений, деактивирование, если нажата мышка или клавиатура
Read more »

Как преобразовать BMP в WMF

procedure ConvertBMP2WMF
(const BMPFileName, WMFFileName: TFileName);
var
MetaFile: TMetafile;
Bitmap: TBitmap;
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(BMPFileName);
with MetaFile do
begin
Height := Bitmap.Height;
Width := Bitmap.Width;
Canvas.Draw(0, 0, Bitmap);
SaveToFile(WMFFileName);
end;
finally
Bitmap.Free;
MetaFile.Free;
end;
end;

// Использование:
ConvertBMP2WMF(’c:\mypic.bmp’, ‘c:\mypic.wmf’)

Как конвертировать Bitmap в EMF (Enhanced Metafile)

function bmp2emf(const SourceFileName: TFileName): Boolean;
// Converts a Bitmap to a Enhanced Metafile (*.emf)
var
Metafile: TMetafile;
MetaCanvas: TMetafileCanvas;
Bitmap: TBitmap;
begin
Metafile := TMetaFile.Create;
try
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(SourceFileName);
Metafile.Height := Bitmap.Height;
Metafile.Width := Bitmap.Width;
MetaCanvas := TMetafileCanvas.Create(Metafile, 0);
try
MetaCanvas.Draw(0, 0, Bitmap);
finally
MetaCanvas.Free;
end;
finally
Bitmap.Free;
end;
Metafile.SaveToFile(ChangeFileExt(SourceFileName, ‘.emf’));
finally
Metafile.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
bmp2emf(’C:\TestBitmap.bmp’);
end;

Как поместить Bitmap в Metafile

В кои-то веки программер идет домой засветло. Все вокруг красиво, деревья, птички, облачка… Останавливается он и говорит:
- Вот ведь блин, и ведь БЕЗ ВСЯКОГО OpenGL!!!

procedure TForm1.Button1Click(Sender: TObject);
var
m : TmetaFile;
mc : TmetaFileCanvas;
b : tbitmap;
begin
m := TMetaFile.Create;
b := TBitmap.create;
b.LoadFromFile(’C:.bmp’);
m.Height := b.Height;
m.Width := b.Width;
mc := TMetafileCanvas.Create(m, 0);
mc.Draw(0, 0, b);
mc.Free;
b.Free;
m.SaveToFile(’C:.emf’);
m.Free;
Image1.Picture.LoadFromFile(’C:.emf’);
end;

Канва для метафайлов

В: Мне необходимо нарисовать Windows-метафайл. Delphi непосредственно это не поддерживает, поэтому для создания нового метафайла я использую функции Windows API. При создании метафайла мне возвращается его THandle, являющийся дескриптором контекста устройства Windows (DC).

Как мне в Delphi использовать возвращаемый THandle для получения или создания канвы (Canvas) для рисования?

О: несколько дней назад я задавал аналогичный вопрос, но не получил ответа, поэтому пришлось искать решение самому. Вот код (надеюсь это то, что нужно):

unit Metaform;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)
Panel1: TPanel;
BitBtn1: TBitBtn;
Image1: TImage;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var

Form1: TForm1;

implementation

{$R *.DFM}

type

TMetafileCanvas = class(TCanvas)
private
FClipboardHandle: THandle;
FMetafileHandle: HMetafile;
FRect: TRect;
protected
procedure CreateHandle; override;
function GetMetafileHandle: HMetafile;
public
constructor Create;
destructor Destroy; override;
property Rect: TRect read FRect write FRect;
property MetafileHandle: HMetafile read GetMetafileHandle;
end;

constructor TMetafileCanvas.Create;
begin

inherited Create;
FClipboardHandle := GlobalAlloc(
GMEM_SHARE or GMEM_ZEROINIT, SizeOf(TMetafilePict));
end;

destructor TMetafileCanvas.Destroy;
begin

DeleteMetafile(CloseMetafile(Handle));
if Bool(FClipboardHandle) then
GlobalFree(FClipboardHandle);
if Bool(FMetafileHandle) then
DeleteMetafile(FMetafileHandle);
inherited Destroy;
end;

procedure TMetafileCanvas.CreateHandle;
var

MetafileDC: HDC;
begin

{ Создаем в памяти DC метафайла }
MetafileDC := CreateMetaFile(nil);
if Bool(MetafileDC) then
begin
{ Совмещаем верхний левый угол отображаемого прямоугольника с левым верхним углом
контекста устройства. Создаем границу шириной 10 логических единиц вокруг изображения. }
with FRect do
SetWindowOrg(MetafileDC, Left - 10, Top - 10);
{ Устанавливаем размер изображения с бордюром, имеющим ширину 10 логических единиц. }
with FRect do
SetWindowExt(MetafileDC, Right - Left + 20, Bottom - Top + 20);
{ Задаем корректное содержание данному метафайлу. }
if Bool(FMetafileHandle) then
begin
PlayMetafile(MetafileDC, FMetafileHandle);
end;
end;
Handle := MetafileDC;
end;

function TMetafileCanvas.GetMetafileHandle: HMetafile;
var

MetafilePict: PMetafilePict;
IC: HDC;
ExtRect: TRect;
begin

if Bool(FMetafileHandle) then
DeleteMetafile(FMetafileHandle);
FMetafileHandle := CloseMetafile(Handle);
Handle := 0;
{ Подготавливаем метафайл для показа в буфере обмена. }
MetafilePict := GlobalLock(FClipboardHandle);
MetafilePict^.mm := mm_AnIsoTropic;
IC := CreateIC(’DISPLAY’, nil, nil, nil);
SetMapMode(IC, mm_HiMetric);
ExtRect := FRect;
DPtoLP(IC, ExtRect, 2);
DeleteDC(IC);
MetafilePict^.xExt := ExtRect.Right - ExtRect.Left;
MetafilePict^.yExt := ExtRect.Top - ExtRect.Bottom;
MetafilePict^.HMF := FMetafileHandle;
GlobalUnlock(FClipboardHandle);
{ Передаем дескриптор в качестве результата выполнения функции. }
Result := FClipboardHandle;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var

MetafileCanvas: TMetafileCanvas;
begin

MetafileCanvas := TMetafileCanvas.Create;
MetafileCanvas.Rect := Rect(0, 0, 500, 500);
MetafileCanvas.Ellipse(10, 10, 400, 400);
Image1.Picture.Metafile.LoadFromClipboardFormat(
cf_MetafilePict, MetafileCanvas.MetafileHandle, 0);
MetafileCanvas.Free;
end;

end.

TMetaFile - ошибка при работе с памятью

Компьютер - это устройство для упорядочивания, ускорения и автоматизации человеческих ошибок.

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

Я долго экспериментировал и пришел к выводу, что все эти ошибки возникают в случае, когда map mode (режим карты) использует не mm_Text. Я трассировал ошибку в TMetafile.SaveToClipboardFormat. Программа неверно использует значение по умолчанию TMetafileImage.FInch = 0. Я думаю что TMetafileImage должен иметь значение по умолчанию FInch = Screen.PixelsPerInch или программа, которая сохраняет его в буфере обмена, должна правильно использовать FInch = 0 (т.е. сделайте значение mm_Text).

Постовой:
moi-style.ru - женский блог “Мой стиль” - все о моде и стиле

Как преобразовать WMF в BMP

procedure ConvertWMF2BMP
(const WMFFileName, BMPFileName: TFileName);
var
MetaFile: TMetafile;
Bitmap: TBitmap;
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
try
MetaFile.LoadFromFile(WMFFileName);
with Bitmap do
begin
Height := Metafile.Height;
Width := Metafile.Width;
Canvas.Draw(0, 0, MetaFile);
SaveToFile(BMPFileName);
end;
finally
Bitmap.Free;
MetaFile.Free;
end;
end;

// Использование:
ConvertWMF2BMP(’c:\mypic.wmf’, ‘c:\mypic.bmp’)

Экспорт анимированных 3D персонажей из 3D STUDIO MAX 3.0 для DELPHI и OpenGL

Берегись дьявольской дыры в киберпро..в;.??/”:?;/…………..

Введение

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

Как создается двумерная анимация? Рисуется несколько кадров движения, затем поледовательно выводятся на экран и таким образом создается иллюзия движения. То же самое происходит в современных трехмерных компьютерных играх. Создается несколько 3D моделей (сеток), характеризующих фазы движения персонажа в различные моменты времени, затем поледовательно выводятся на экран, создавая иллюзию движения. Возможно, это приводит к повышенному расходу оперативной памяти, поскольку все сетки желательно хранить в памяти, но зато значительно упрощается процесс программирования и, скорее всего, увеличивается скорость работы приложения.
Read more »

Получение OpenGL расширений

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение OpenGL расширений

Зависимости: OpenGL
Автор: Gua, gua@ukr.net, ICQ:141585495, Simferopol
Copyright: Gua
Дата: 18 июля 2002 г.
***************************************************** }

function GetOGLExtensions: string;
var
DC: HDC;
hrc: HGLRC;
{Установка формата пикселей}
procedure SetDCPixelFormat;
var
DC: HDC;
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;

begin
DC := GetDC(0);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);

Result := StrPas(PChar(glGetString(GL_EXTENSIONS)));

wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(0, DC);
DeleteDC(DC);
end;

Пример использования:

MessageDlg(GetOGLExtensions,mtInformation,[mbOK],0);

Прыгающая точка

Райский сад. Всюду деревья с сочными плодами. Знаменитости прогуливаются. Ангелы всюду порхают. Музыка нежная. В общем, рай. Поднимается лифт, оттуда выползает окровавленный DOOM’ер с BFG в руках, оглядывается вокруг и орет: “ХA-A-A-A-A!!!! BONUS LEVEL!!!!!!!!”

Прежде всего, определим сначала, какие навыки нам нужны, многие из вас изучали или изучаете язык программирования Pascal, именно с его помощью мы попробуем написать несколько программ. Сейчас почти все игры разрабатываются для Windows, так что нам придётся работать со средой Delphi. Программы в среде Delphi (Delphi не язык программирования) пишутся на языке Object Pascal, специальном диалекте Паскаля. От языка Pascal этот диалект отличается тем, что он имеет большое количество дополнительных возможностей. Также вам следует уметь работать хотя бы с одним графическим редактором, хотя бы с Paint. В следующих статьях мы рассмотрим ряд других возможностей, например, как создать движущийся объект с помощью программы AutoCAD или как создать множество визуальных эффектов: тень, отражение. В данной статье мы рассмотрим несколько самых аспектов: как с помощью точек нарисовать простой движущийся объект, как управлять объектами с помощью клавиатуры.
Read more »

Основы программирования OpenGL в Borland СBuilder и Delphi - Самое начало

На кого рассчитана статья

Я рассчитываю на то, что вы знакомы с азами создания приложений в С++Builder или Delphi и совсем не знаете OpenGL.

Введение

OpenGL (Open Graphics Library) – популярная библиотека для работы с 3D графикой. Стандарт OpenGL появился в 1992 году благодаря компании Silicon Graphics и сейчас переживает годы своего самого бурного развития.

Чуть-чуть побольше узнать об OpenGL и о том, как с ним работать в VC, можно, почитав wat’а: http://www.gamedev.ru/coding/11203.shtml

Я хочу показать, как работать с этой библиотекой в таких популярных и, на мой взгляд, очень удобных средах разработки, как Delphi и С++Builder.
Read more »

Основы программирования OpenGL в Borland СBuilder и Delphi - Простейшие объекты

Часть 1. Координаты и всё, что с ними связано

Системы координат

Рассматривая какой-либо трёхмерный объект, мы всегда определяем его положение и размеры относительно некоторой привычной, и удобной в настоящий момент системы координат, связанной с реальным миром. Такая исходная система координат в компьютерной графике является правосторонней и называется мировой системой координат. Для того, чтобы можно было изобразить объект на экране, его необходимо предварительно перевести (или преобразовать) в другую систему координат, которая связана с точкой наблюдения и носит название видовой системы координат. Эта система координат является левосторонней. И, наконец, любое трёхмерное изображение мы всегда рисуем на двумерном экране, который имеет свою экранную систему координат. (Этот абзац я списал у Ю.Тихомирова).
Read more »

Powered WP Ъ скачать delphi, delphi 7, скачать delphi 7, delphi файлы, delphi, компоненты, delphi 2009, delphi программы, delphi бесплатно, delphi скачать, бесплатно работа delphi, delphi создание, delphi строки, программирования delphi, borland delphi, delphi формы