Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразовать изображение, выводимое DirectX, наложить дополнительные фильры 
:(
    Опции темы
Ibragim
Дата 11.2.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



Всем вечер добрый. 
Вот стоит такая задача.
Условие (это уже есть и работает как надо): Изображение выводится в окно средствами DirectX. Cтроится достаточно сложная фигура, на которую "натягивается" текстура. Выглядит схематически так:

Код

  MakePoly;  // строит полином d3dvex: IDirect3DVertexBuffer9;
  MakeTexture;  // создает текстуру d3dtex: IDirect3DTexture9

  d3ddev.Clear(0, nil, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 0, 0);
  d3ddev.BeginScene;
  d3ddev.SetTexture(0, d3dtex);
  d3ddev.SetStreamSource( 0, d3dvex, 0, sizeof(TVertex) );
  d3ddev.DrawPrimitive(D3DPT_TRIANGLELIST, 0, Sectors*2);
  d3ddev.EndScene;
  d3ddev.Present(nil, nil, 0, nil);


Все это выводится в окно pnlRender: TPanel (задано еще в начале программы)
Код

  // объявлены переменные d3d    : IDirect3D9;  d3ddev : IDirect3DDevice9; d3dpp : D3DPRESENT_PARAMETERS;
  d3dpp.Windowed := True;
  d3dpp.hDeviceWindow := pnlRender.Handle;
  d3d.CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @d3dpp, d3ddev);


А теперь собственно задача: надо на уже готовое, выведенное изображение наложить фильтры - медианный фильтр, фильтр подчеркивания границ, посмотрим - может еще какие-то. Соответственно два вопроса:
1. Как получить доступ к сформированному изображению? То есть как вручную подправить выводимое изображение, уже преобразованное (помните, там же "натяжение" на сложную геометрическую фигуру, соотвественно текстуру адаптер деформировал до неузнаваемости smile ), но еще не выведенное на экран? Такое вообще возможно? Может можно как-то не показывать ЭТОТ рисунок на экране, а использовать его как исходную текстуру для последующих преобразований? 
2. Как быстро провести несложное целочисленное преобразование над таким изображением (фактически матрицу 9x9 посчитать)? Есть ли возможность сделать свою "подпрограмму" адаптеру, чтобы выполнялось в реальном времени?

Я понимаю, что вопросы достаточно объемные и не решаются в 2 строчки кода, поэтому буду благодарен также за теоретическое описание или ссылку на ресурс. 
PM MAIL   Вверх
Qu1nt
Дата 11.2.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Шейдеры.
PM MAIL   Вверх
virtul
  Дата 4.5.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Люди я новичок в 3D  програмирование.
я делаю игру на делфи.
свеобраздый 3D Mahjong.
я сделал три де модели в 3Ds Max я их перевёл в  X формат
мне бы хоть как их в ФОРМЕ ОТОБРАЗИТЬ!
помогите!!!
 smile 
PM MAIL WWW   Вверх
Qu1nt
Дата 4.5.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Какая GAPI? DirectX?! Вместе с SDK идут примеры.
PM MAIL   Вверх
virtul
Дата 5.5.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



У меня чето нето со своей SDK .
к ней ваобще ничего нет.
Слушай помоги хоть как на фому вывести 3D обьекты.
подскажи чё там нужно сделать и как сделать манипуляцию этими обьектами.
мне хоть OpenGL хоть DirectX чё угодно подскажи.
я самоучка(мне 13 лет). smile 
а то без триде я игру могу сделать, но есть желание сделать триде! 
я уже везде искал точного примера и ответа нигде нет! smile 

PM MAIL WWW   Вверх
Qu1nt
Дата 6.5.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Для того, чтобы написать 3D-игру нужно, как минимум: 
- хорошее знание языка, например Delphi
- умение работать с каким-нибудь GAPI
- отличное от нуля знание математики
- время, терпение, желание
Хотя, второй пункт и можно частично обойти используя готовые графические движки, я бы посоветовал начинать с более легких вещей.
Вот так вот.



PM MAIL   Вверх
virtul
Дата 6.5.2008, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



я знаю DELPHI неплохо.
просто подскажи мне как мне реализовать отображение трёхмерных обьектов в  ЛЮБОМ ФОРМАТЕ  в своей проге.

Добавлено через 4 минуты и 8 секунд
кстати я с GAPI не работал(совсем нечего об этом незнаю (можешь вкратце обьяснить!))
взанее спасибо!
PM MAIL WWW   Вверх
Qu1nt
Дата 6.5.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



GAPI - DirectX/OpenGL.
Вот тебе статья, где показано как экспортировать анимированные модели из 3ds max. Внизу странички - пример.
http://xproger.mirgames.ru/?id=1&page=2&doc=anim3d
PM MAIL   Вверх
virtul
Дата 6.5.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



СПАСИБО Qu1nt!
Я думаю мне это поможет!
 smile 

PM MAIL WWW   Вверх
virtul
Дата 7.5.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Qu1nt!
я с экспортом моделей из 3Ds Max в Delphi разобрался. Спасибо за информацию! smile 
Но прежде чем приступить к разработке проги в общем я хотел бы уточнить:= как управлять обьектами в проге с помощью мышки?
потому что идея игрухи такова:
- на экране пирамида из блоков
- нужно правильно разобрать пирамиду, находя одинаковые блоки

------------?------------------------?------------------------?-----------------
- КАК ВЫДЕЛЯТЬ 3D объекты в проге с помощью мыши?
- чтобы при нажатии курсором на объект его можно было выделить
- И ЕЩЁ КОЕ-ЧТО. КАК СДЕЛАТЬ ТАК ЧТОБЫ ВСЕ 3D ОБЬЕКТЫ ОТОБРАЖАЛИСЬ НЕ НА ВСЕЙ ФОРМЕ А НА КОМПОНЕНТЕ ТИПО Panel или Image.
хоть на чём угодно главное чтобы это был компонент Delphi  или чётко обозначенные рамки на форме (типо где отображаться!) 
( smile Подскажи хорошую ссылку на хорошую информацию)
Заранее спасибо!

PM MAIL WWW   Вверх
Qu1nt
Дата 7.5.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Цитата(virtul @  7.5.2008,  11:30 Найти цитируемый пост)
- КАК ВЫДЕЛЯТЬ 3D объекты в проге с помощью мыши?
- чтобы при нажатии курсором на объект его можно было выделить

Как вариант:
- по координатам мышки получаем мировые координаты с помощью gluUnProject.
- строим отрезок из координат камеры к полученным координатам.
- предположим, что любой обьект в игре имеет свой BBox. Проверяем BBox`ы всех обьектов на пересечение с отрезком.
Получение мировых координат по "мышиным":
Код

function FindVector3D(X, Y: Word): TVector3f;
var
  ViewPort               : array[0..3] of GLInt;
  ModeMatrix, ProjMatrix : array[0..15] of GLDouble;
  rY         : GLint;
  wX, wY, wZ : GLdouble;
  rZ         : GLfloat;
begin
  glGetIntegerv(GL_VIEWPORT, @ViewPort);
  glGetDoublev(GL_MODELVIEW_MATRIX, @ModeMatrix);
  glGetDoublev(GL_PROJECTION_MATRIX, @ProjMatrix);
  rY := ViewPort[3] - Y - 1;
  glReadPixels(X, rY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @rZ);
  gluUnProject(X, rY, rZ, @ModeMatrix, @ProjMatrix, @ViewPort, wX, wY, wZ);
  Result := Vector(wX, wY, wZ);
end;

Пересечения ограниченной плоскости с отрезком. Так как у BBox`а 6 граней нужно проверять каждую.
Код

function LineCrossPlane(const L1, L2, P1, P2, P3: TVector3f;
                          out Cross: TVector3f): Boolean;
var
  A, B, C, D, T: Single;
begin
  Cross.X := 0;
  Cross.Y := 0;
  Cross.Z := 0;
  Result := False;
  A := P1.Y * (P2.Z - P3.Z) + P2.Y * (P3.Z - P1.Z) + P3.Y * (P1.Z - P2.Z);
  B := P1.Z * (P2.X - P3.X) + P2.Z * (P3.X - P1.X) + P3.Z * (P1.X - P2.X);
  C := P1.X * (P2.Y - P3.Y) + P2.X * (P3.Y - P1.Y) + P3.X * (P1.Y - P2.Y);
  T := A * (L2.X - L1.X) + B * (L2.Y - L1.Y) + C * (L2.Z - L1.Z);
  if T = 0 then
    Exit;
  Result := True;
  D := - (A * P1.X + B * P1.Y + C * P1.Z);
  T := - (A * L1.X + B * L1.Y + C * L1.Z + D) / T;
  Cross.X := L1.X + T * (L2.X - L1.X);
  Cross.Y := L1.Y + T * (L2.Y - L1.Y);
  Cross.Z := L1.Z + T * (L2.Z - L1.Z);
end;

TVector3f:
Код

type
  TVector3f = record
    X, Y, Z : Single;
  end;

Цитата(virtul @  7.5.2008,  11:30 Найти цитируемый пост)
- И ЕЩЁ КОЕ-ЧТО. КАК СДЕЛАТЬ ТАК ЧТОБЫ ВСЕ 3D ОБЬЕКТЫ ОТОБРАЖАЛИСЬ НЕ НА ВСЕЙ ФОРМЕ А НА КОМПОНЕНТЕ ТИПО Panel или Image.
хоть на чём угодно главное чтобы это был компонент Delphi  или чётко обозначенные рамки на форме (типо где отображаться!) 

Не рекомендую использовать VCL. Если нужны кнопочки в игре - лучше напиши их сам.

Это сообщение отредактировал(а) Qu1nt - 7.5.2008, 13:30
PM MAIL   Вверх
virtul
Дата 7.5.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



слушай а зачем все 6 граней проверать?
чё нельзя чтоли просто как обьект проверить?

Добавлено через 3 минуты и 1 секунду
тоесть никак ни на каком компоненте не смогу отобразить.
а может всёже типо на Penel можно отобразить (я это гдето видел!).
PM MAIL WWW   Вверх
Qu1nt
Дата 7.5.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Читай книжки...
PM MAIL   Вверх
virtul
Дата 12.5.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



слушай а чё ты посоветуешь.(в плане какие книги)
просто я перечитал штук 9-10 книг по делфи. даже учебники для вузов!
я везде искал книги по делфи и DirectX или OpenGL.
в книжных магазинах их нет, а в интернет-магазинах я не покупаю.

а то реально сложняк учится 3D програмированию в DELPHI по форумам.
ты незнаешь где можно какую нибуди кнужку(типо PDF (и именно книжну а не какойнибудь фиговый отрывок из укороченной версии)) скачать чтобы по 3D в DELPHI?
PM MAIL WWW   Вверх
Qu1nt
Дата 12.5.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.