Xtreme3D 2.1

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Xtreme3D: разработка движка / Xtreme3D 2.1

Страницы: << Prev 1 2 3 4  новая тема

Автор Сообщение

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 29-08-2011 18:13
Собственно, не появляюсь здесь, только потому, что форум, цитирую "Запрошеный Вами информационный материал признан решением суда как экстремистский. Федеральный список экстремистских материалов - http://www.minjust.ru/ru/activity/nko/fedspisok/."

Хмм... Нашел в этом списке только ныне несуществующий www.offtop.ru/punkskin/. Наверняка домен offtop.ru тупо блокируется провайдером, советую пожаловаться.

Насчет GLSL: процедуру можно встроить в саму DLL, и в ней передавать параметры для шейдера, текст которого тоже встроен в DLL (такой подход у стандартных шейдеров GLScene). Таким образом, теоретически, можно просто насоздавать в движке много встроенных эффектов на все случаи жизни, но тогда теряется основная суть шейдеров - программируемость.
Другой выход - вообще запретить uniform-параметры. По своему опыту знаю: можно реализовать очень много разных эффектов и моделей освещения, ограничившись стандартными атрибутами OpenGL (gl_Normal, gl_LightSource, gl_FrontMaterial и и т.д.) Единственное, для чего реально нужны параметры - это текстуры. Но их как раз-таки можно передавать во встроенной процедуре - я лично так и делаю. Можно, скажем, ограничиться восемью текстурными слоями, и просто передавать их во все фрагментные шейдеры как gl_Texture0, gl_Texture1, gl_Texture2 и т.д.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 05-09-2011 21:13
Нашел в этом списке только ныне несуществующий www.offtop.ru/punkskin/. Наверняка домен offtop.ru тупо блокируется провайдером, советую пожаловаться.

Да, наверное так и сделаем.

такой подход у стандартных шейдеров GLScene

Да, я глядел как реализовано, например, размытие в GLSLPostBlurShader, но пока не брался за разбор и переделку, а занялся более простыми вещами, которые решить куда важнее. Но потом вернусь к шейдерам естественно.

суть шейдеров - программируемость

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

Другой выход - вообще запретить uniform-параметры

Хорошая идея, спасибо. Возьму на заметку

P.S А можете вспомнить, с какими неразрешимыми проблемами вы столкнулись, при написании Xtreme? Хотелось бы узнать на будущее.
И кстати, какими проектами сейчас заняты или чем интересным?

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 05-09-2011 22:32
А можете вспомнить, с какими неразрешимыми проблемами вы столкнулись, при написании Xtreme?

В основном, с проблемами при реализации тех или иных возможностей GLScene в виде интерфейса, понятного для GM. Исходников оригинального Xtreme нет, и как Xception реализовал, например, тот же блюр (равно как и множество других специфических вещей: ODE, DCE и т.д.), для меня оставалось загадкой. Сказалось отсутствие опыта работы с Delphi.

какими проектами сейчас заняты или чем интересным?

Понемногу пишу игровой движок на D. Собираюсь на днях сделать небольшой сайт по теме (fpsmag.zymichost.com/d), выложить свои наработки.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 03-12-2011 23:46
Исходников оригинального Xtreme нет, и как Xception реализовал, например, тот же блюр (равно как и множество других специфических вещей: ODE, DCE и т.д.), для меня оставалось загадкой

Скорее всего, практического применения нижеприведенного кода для вас нет, но, думаю, интересно все же, как реализуется Blur.

function BlurCreate: real; stdcall;
var
GLBlur1: TGLBlur;
begin
try
GLBlur1 := TGLBlur.CreateAsChild(SceneDummycube);
//В этой строчке все дело
GLBlur1.TargetObject := Scene.Objects;
GLBlur1.Width := 256;
GLBlur1.Height := 256;
GLBlur1.Preset := pBeastView;
Result := Integer(GLBlur1);
except
on E: Exception do
begin
MessageBox(0, PAnsiChar(E.Message), 'Xtreme3D Error...', MB_OK + MB_ICONWARNING + MB_TASKMODAL);
Result := 0;
Exit;
end;
end;
end;

Я не уверен, что все работает так, как надо. Там еще с контекстом веселье какое-то, но то, что эффект есть - факт.

А DCE я как-то писал, там все просто:

//Manager
function DceManagerCreate: real; stdcall;
var
DCEManager : TGLDCEManager;
begin
DCEManager := TGLDCEManager.Create(SceneNode);
Result := Integer(DCEManager);
end;

//Dynamic
function DceDynamicSetManager(const obj, man: real): real; stdcall;
begin
GetOrCreateDCEDynamic(TGLBaseSceneObject(Trunc(obj))).Manager := TGLDCEManager(Trunc(man));
Result := 1;
end;

Единственное, что в DCE я не реализовал, так это информация о столкновении: получение нормали и т.п А известная проблема с автогравитацией решается установкой значения этой самой гравитации в коде.

Все, как всегда, просто
Что-то вы затихли совсем, хочется посмотреть на ваши работы какие-нибудь, кроме журнала естественно!

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 04-12-2011 21:07
хочется посмотреть на ваши работы какие-нибудь, кроме журнала естественно!

Скоро все выложу, как и обещал. Правда, ничего сенсационного там нет - просто эдакая кодовая база, которая скапливается у любого программиста-любителя. Есть, например, программа-просмотровщик шейдеров на GLSL (использую ее для "обкатки" различных BRDF), прототип графического редактора на основе узлов-фильтров, игровой движок на ранней стадии разработки и еще разные мелочи.
Еще у меня была попытка написать ядро ОС на D - правда, пока только на уровне "Hello World"


бывалый
Группа: Участники
Сообщений: 49
Добавлено: 05-12-2011 19:26
Еще у меня была попытка написать ядро ОС на D - правда, пока только на уровне "Hello World"

Что значит была попытка? Получилось? А то я сомневаюсь, что на языке с такой громоздкой библиотекой, от которой нельзя избавиться, можно написать ядро ОС. В этой библиотеке наверняка полно вызовов взаимодействия с ОС. Хотя слышал, что есть ещё Kosmos - операционная система на C#.

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 06-12-2011 15:51
На D можно написать ядро, но не с DMD - придется использовать GDC. Я взял GDC под Linux, скомпилировал объектные файлы в ELF (разумеется, без обращений к рантайму и Phobos), написал загрузочный код на ассемблере и слинковал при помощи LD. Все получилось, мое "ядро" запускается и работает на эмуляторе (VirtualBox). Правда, оно пока умеет только выводить текст на экран.
В принципе, все то же самое можно сделать на обычном C - на который D и становится похож, если не использовать рантайм. Но ведь ничто не мешает постепенно написать свой рантайм, без системных вызовов. А там, глядишь, и Phobos можно адаптировать.
Кстати, по системному программированию есть отличный ресурс wiki.osdev.org. Собственно, там как раз есть статья по написанию ядра на D.

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 06-12-2011 16:41
Кстати, по поводу GCC мне не ответили на вопрос из этой темы: http://offtop.ru/xtreme3d/view.php?part=16&t=678301. Он выдаёт Hello, World'ы по мегабайту и тестовая программа ещё медленнее, чем в DMD. Может, там всё-таки как-нибудь оптимизацию можно включить? А то не верится, что такой распространённый компилятор такой плохой.

Интересно, как под него рантайм написать. Это наверное посложнее, чем для C++, потому что куча функциональности в языке отваливается и он не так распространён. Хотя и для C++ я так и не смог написать полноценный рантайм. Не смог сделать поддержку исключений и чисел с плавающей запятой. Исключений нет ни в одном исходнике CRT. Вторую проблему я бы решил, если бы из-за первой не передумал писать свою CRT.

написал загрузочный код на ассемблере

Встраиваемом или отдельном?

запускается и работает на эмуляторе

А без эмулятора запускал?

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 06-12-2011 18:40
Кстати, по поводу GCC

Он выдаёт Hello, World'ы по мегабайту

Судя по этому треду на stackoverflow.com, под Windows это вроде бы считается нормальным. MinGW статически линкует с программой стандартную библиотеку C++, поскольку по умолчанию не использует майкрософтовский рантайм. Под Linux нет такой проблемы, там libstdc++ - динамический.
Но я особо не вникал в проблему, на C++ давно уже не пишу.

Встраиваемом или отдельном?

На отдельном. NASM.

А без эмулятора запускал?

Нет, но должно работать: ядро пока предельно простое, в нем даже нет поддержки IRQ.

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 06-12-2011 21:43
MinGW статически линкует с программой стандартную библиотеку C++, поскольку по умолчанию не использует майкрософтовский рантайм. Под Linux нет такой проблемы, там libstdc++ - динамический.

Он линкует только C-Runtime или ещё и STL? STL ведь вся inline и на шаблонах, в ней нечего линковать. В Visual C++ CRT можно тоже статически линковать, и там исполняемые файлы во много раз меньше.

Если вдруг у меня будет куча свободного времени, я протестирую GCC на производительность (ведь GDC основан на нём?) и, если она меня устроит, буду переписывать рантайм языка D. Стандартная библиотека мне не нужна, свою напишу, у меня уже есть опыт этого в C++. Я не использую STL. Написал свой класс строки, очень быстрый - быстрее, чем в STL. И возможностей у него побольше. Ещё написал свой класс массивов. Они поддерживают добавление в начало с той же скоростью, что и в конец. В свои классы я перенёс некоторые фишки языка D. Самая интересная - это оператор $:

String file="image.jpg";
String ext=file($-4, $);

ext=".jpg" причём нет никакого копирования и выделения памяти, так как используется счётчик ссылок
То же самое работает и с массивами.

D мне не подошёл по размерам exe и производительности, поэтому буду ностальгировать по нему на C++.

А что такое IRQ?

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 06-12-2011 23:09
В Visual C++ CRT можно тоже статически линковать, и там исполняемые файлы во много раз меньше.

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

IRQ (Interrupt Request) - это прерывание, специальный сигнал процессору от оборудования, сообщающий о каком-либо событии. Например, о нажатии клавиши. Ядро должно на него реагировать - приостановить (прервать) текущий код и должным образом обработать сигнал.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 12-12-2011 19:53
Что-то вы уже далеко от темы ушли, господа...
Хочется посмотреть работы, в особенности заинтересовал просмотрщик шейдеров на GLSL.
И все-таки, есть какой-то проект, реализация которого задумана дойти до финала? Пробовали ли вы, Gecko, работает ли Blur или этот этап уже пройден давно?

Big Boss
Группа: Администраторы
Сообщений: 661
Добавлено: 14-12-2011 20:31
Пробовали ли вы, Gecko, работает ли Blur или этот этап уже пройден давно?

У меня сейчас нет установленного Delphi, поэтому не могу попробовать. А ставить только ради этого - как-то не хочется.

Страницы: << Prev 1 2 3 4  новая тема
Раздел: 
Форум движка Xtreme3D / Xtreme3D: разработка движка / Xtreme3D 2.1

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU