|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Форум движка Xtreme3D / Xtreme3D: разработка движка / Xtreme3D 2.1 |
Страницы: << Prev 1 2 3 4 |
Автор | Сообщение | |||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 29-08-2011 18:13 | |||
Хмм... Нашел в этом списке только ныне несуществующий www.offtop.ru/punkskin/. Наверняка домен offtop.ru тупо блокируется провайдером, советую пожаловаться. Насчет GLSL: процедуру можно встроить в саму DLL, и в ней передавать параметры для шейдера, текст которого тоже встроен в DLL (такой подход у стандартных шейдеров GLScene). Таким образом, теоретически, можно просто насоздавать в движке много встроенных эффектов на все случаи жизни, но тогда теряется основная суть шейдеров - программируемость. Другой выход - вообще запретить uniform-параметры. По своему опыту знаю: можно реализовать очень много разных эффектов и моделей освещения, ограничившись стандартными атрибутами OpenGL (gl_Normal, gl_LightSource, gl_FrontMaterial и и т.д.) Единственное, для чего реально нужны параметры - это текстуры. Но их как раз-таки можно передавать во встроенной процедуре - я лично так и делаю. Можно, скажем, ограничиться восемью текстурными слоями, и просто передавать их во все фрагментные шейдеры как gl_Texture0, gl_Texture1, gl_Texture2 и т.д. |
||||
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 05-09-2011 21:13 | |||
Да, наверное так и сделаем.
Да, я глядел как реализовано, например, размытие в GLSLPostBlurShader, но пока не брался за разбор и переделку, а занялся более простыми вещами, которые решить куда важнее. Но потом вернусь к шейдерам естественно.
Посмотрим, что можно сделать будет, но пока мне нужно изучить получше систему шейдеров и их взаимодействие с различными компонентами. Много нюансов, в которых просто плаваешь из-за отсутствия необходимой информации, приходится много времени ковыряться в исх. коде и лазать в инете.
Хорошая идея, спасибо. Возьму на заметку P.S А можете вспомнить, с какими неразрешимыми проблемами вы столкнулись, при написании Xtreme? Хотелось бы узнать на будущее. И кстати, какими проектами сейчас заняты или чем интересным? |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 05-09-2011 22:32 | |||
В основном, с проблемами при реализации тех или иных возможностей GLScene в виде интерфейса, понятного для GM. Исходников оригинального Xtreme нет, и как Xception реализовал, например, тот же блюр (равно как и множество других специфических вещей: ODE, DCE и т.д.), для меня оставалось загадкой. Сказалось отсутствие опыта работы с Delphi.
Понемногу пишу игровой движок на D. Собираюсь на днях сделать небольшой сайт по теме (fpsmag.zymichost.com/d), выложить свои наработки. |
||||
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 03-12-2011 23:46 | |||
Скорее всего, практического применения нижеприведенного кода для вас нет, но, думаю, интересно все же, как реализуется 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 я не реализовал, так это информация о столкновении: получение нормали и т.п А известная проблема с автогравитацией решается установкой значения этой самой гравитации в коде. Все, как всегда, просто Что-то вы затихли совсем, хочется посмотреть на ваши работы какие-нибудь, кроме журнала естественно! |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 04-12-2011 21:07 | |||
Скоро все выложу, как и обещал. Правда, ничего сенсационного там нет - просто эдакая кодовая база, которая скапливается у любого программиста-любителя. Есть, например, программа-просмотровщик шейдеров на GLSL (использую ее для "обкатки" различных BRDF), прототип графического редактора на основе узлов-фильтров, игровой движок на ранней стадии разработки и еще разные мелочи. Еще у меня была попытка написать ядро ОС на D - правда, пока только на уровне "Hello World" |
||||
gammaker бывалый Группа: Участники Сообщений: 49 |
Добавлено: 05-12-2011 19:26 | |||
Что значит была попытка? Получилось? А то я сомневаюсь, что на языке с такой громоздкой библиотекой, от которой нельзя избавиться, можно написать ядро ОС. В этой библиотеке наверняка полно вызовов взаимодействия с ОС. Хотя слышал, что есть ещё Kosmos - операционная система на C#. |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 06-12-2011 15:51 | |||
На D можно написать ядро, но не с DMD - придется использовать GDC. Я взял GDC под Linux, скомпилировал объектные файлы в ELF (разумеется, без обращений к рантайму и Phobos), написал загрузочный код на ассемблере и слинковал при помощи LD. Все получилось, мое "ядро" запускается и работает на эмуляторе (VirtualBox). Правда, оно пока умеет только выводить текст на экран. В принципе, все то же самое можно сделать на обычном C - на который D и становится похож, если не использовать рантайм. Но ведь ничто не мешает постепенно написать свой рантайм, без системных вызовов. А там, глядишь, и Phobos можно адаптировать. Кстати, по системному программированию есть отличный ресурс wiki.osdev.org. Собственно, там как раз есть статья по написанию ядра на D. |
||||
gammaker бывалый Группа: Участники Сообщений: 49 |
Добавлено: 06-12-2011 16:41 | |||
Кстати, по поводу GCC мне не ответили на вопрос из этой темы: http://offtop.ru/xtreme3d/view.php?part=16&t=678301. Он выдаёт Hello, World'ы по мегабайту и тестовая программа ещё медленнее, чем в DMD. Может, там всё-таки как-нибудь оптимизацию можно включить? А то не верится, что такой распространённый компилятор такой плохой. Интересно, как под него рантайм написать. Это наверное посложнее, чем для C++, потому что куча функциональности в языке отваливается и он не так распространён. Хотя и для C++ я так и не смог написать полноценный рантайм. Не смог сделать поддержку исключений и чисел с плавающей запятой. Исключений нет ни в одном исходнике CRT. Вторую проблему я бы решил, если бы из-за первой не передумал писать свою CRT.
Встраиваемом или отдельном?
А без эмулятора запускал? |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 06-12-2011 18:40 | |||
Судя по этому треду на stackoverflow.com, под Windows это вроде бы считается нормальным. MinGW статически линкует с программой стандартную библиотеку C++, поскольку по умолчанию не использует майкрософтовский рантайм. Под Linux нет такой проблемы, там libstdc++ - динамический. Но я особо не вникал в проблему, на C++ давно уже не пишу.
На отдельном. NASM.
Нет, но должно работать: ядро пока предельно простое, в нем даже нет поддержки IRQ. |
||||
gammaker бывалый Группа: Участники Сообщений: 49 |
Добавлено: 06-12-2011 21:43 | |||
Он линкует только 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? |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 06-12-2011 23:09 | |||
Я думаю, это проблема реализации библиотеки, а не компилятора/линкера - вызов одной функциии тянет за собой слишком много внутренних связей и зависимостей, и их в результате накапливается на несколько сот килобайт... IRQ (Interrupt Request) - это прерывание, специальный сигнал процессору от оборудования, сообщающий о каком-либо событии. Например, о нажатии клавиши. Ядро должно на него реагировать - приостановить (прервать) текущий код и должным образом обработать сигнал. |
||||
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 12-12-2011 19:53 | |||
Что-то вы уже далеко от темы ушли, господа... Хочется посмотреть работы, в особенности заинтересовал просмотрщик шейдеров на GLSL. И все-таки, есть какой-то проект, реализация которого задумана дойти до финала? Пробовали ли вы, Gecko, работает ли Blur или этот этап уже пройден давно? |
||||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 14-12-2011 20:31 | |||
У меня сейчас нет установленного Delphi, поэтому не могу попробовать. А ставить только ради этого - как-то не хочется. |
Страницы: << Prev 1 2 3 4 |
Форум движка Xtreme3D / Xtreme3D: разработка движка / Xtreme3D 2.1 |