Quest3D - Русскоязычное сообщество

Quest3D => Программирование => Тема начата: Denil-Tornado от 28 Мая 2012, 00:23:24



Название: Динамическая загрузка
Отправлено: Denil-Tornado от 28 Мая 2012, 00:23:24
Привет народ, давно не виделись! Ну собственно по существу.

Вопрос Дурацкий но всё же спрошу.

Как работает Load ChannelGroup, я хочу динамически подгрузить канал, но в итоге квест выдаёт ошибку,
Цитировать
A Group Loader and a Buffer channel are both linked to Load ChannelGroup channel, the Buffer channel will be used to load the group, when it contains data.
но как я понял это ругается канал буфера, отключая его загрузка всё равно не идёт.

В общем я пытаю реализовать такую идею: У меня есть два файла CGR. В первом я реализую динамическую подгрузку второго и чтобы первый подгружал второй так, чтобы он не входил в компиляцию всего проекта.

О_о М да сайт походу дело вымирает... Нехорошо!
Или просто все Quest3D 5 взялись за изучение?

Ну объясните хотя бы как Group Loader работает. Скажем так: Мне нужно загрузить текстуру или видео из корневой папки. Так вот путь я прописал и Group Loader Status уведомляет что объект загрузился, а проблема собственно в чём, как теперь эту загруженную текстуру скажем на плоскость натянуть.


Название: Re: Как работает Load ChannelGroup
Отправлено: Denil-Tornado от 30 Мая 2012, 19:56:18
Так ладно с одним мы разобрались.

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


Название: Re: Как работает Load ChannelGroup
Отправлено: dfx от 03 Июня 2012, 00:20:31
Если я правильно понял, надо загрузить в память группу из папки и подцепить паблик-канал.

Загрузка файла с группой в файл -

Сздаем луа-канал и в нем пишем (кстати есть в мануале)-

function CallChannel()
   local filename = channel.GetChild(0) //путь к файлу
   local poolname= channel.GetChild(1) //Имя группы в проекте
   local index = channel.GetChild(2) // индекс
   local progress = channel.GetChild(3)    //статус загрузки
   
   q.LoadChannelGroupDQ(filename:GetText(),poolname:GetText(),index:GetValue(),poolname:GetText())
   progress:SetValue(q.GetDQProgress(poolname:GetText()))

end

Цепляем паблик-канал из загруженной группы-
создаем луа-канал и в нем пишем-

function CallChannel()
local groupName = channel.GetChild(0); //Имя группы в проекте (то что указывали при загрузке)
local channelName = channel.GetChild(1); //Имя паблик-канала к которому хотим обратиться.

  object =  channel.GetPublicFromGroup(groupName:GetText(), channelName:GetText()); // присваем ссылку на наш паблик-канал по имени группы и имени
  if object ~= nil then //если ссылка верная
    object:CallChannel(); //обращаемся к нему
  end
end

Если нужно получить значение или текст, то используем соответственно
local myValue =object:GetValue(); //переменная myValue будет содержать результат
и
local myText =object:GetText();//переменная myText будет содержать результат


Как сделать без луа, к сожалению, не знаю.


Название: Re: Как работает Load ChannelGroup
Отправлено: Egor от 03 Июня 2012, 17:42:26
Вот пример загрузки текстуры, возможные для подгрузки форматы bmp, jpg, tga, ppm, dds, png, hdr,загрузка производится Load ChannelGroup каналом.


Название: Re: Как работает Load ChannelGroup
Отправлено: Denil-Tornado от 03 Июня 2012, 23:06:57
Спасибо большое! Будем пробовать.

Действительно всё работает. Но опять же работает всё от полного пути к файлу, а от корневой папки читать не хочет.

Но продолжая тему Динамической загрузки, столкнулся я с такой проблемой. Есть сцена (присутствует в архиве) динамически загружаю МедияТекстуру, в квесте всё работает безупречно. Но при публикации шиш, но если я ввожу полный путь к файлу, то и там и там всё работает безупречно. Но мне не хотелось бы указывать полный путь к файлу, а чтобы сама программа искала файл от корневой папки.


Название: Re: Динамическая загрузка
Отправлено: dfx от 06 Июня 2012, 16:49:45
Цитировать
Но опять же работает всё от полного пути к файлу, а от корневой папки читать не хочет.

Проект локальный или web? Экспорт в exe? С web я не работал. С локальными проектами все работает, если использовать относительный путь ".\" Для некоторых каналов требуется полный путь, его можно получить, пропустив относительный через канал "text operator".
Если паблишь в exe, то тут все сложнее - сам exe-файл представляет собой архив с файлами проекта и quest3d-плеером. Т.е. при запуске все это дело распаковывается в temp и запускается оттуда, следовательно и относительный путь будет строится не от папки с exe, а от temp-директории.


Название: Re: Динамическая загрузка
Отправлено: Denil-Tornado от 06 Июня 2012, 18:48:03
Локальный. Действительно я что-то не подумал, если другие cgr'ки в компиляцию не входят то при запуске они остаются на месте, а вот с exe проблемы. Тогда мне интересно текстуры она грузит нормально, хотя данные об загрузки текстур лежат в exe, а вот cgr'ку она не хочет хммм....


Название: Re: Динамическая загрузка
Отправлено: Ruslan от 07 Июня 2012, 00:35:27
Denil-Tornado
также нужно было получить полный путь, решили так:
собирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
жесть да )) но другого способа мы не нашли, походу его и нету..
Очень разочаровался в квесте, сожалею, что потратил время на знакомство с ним, нужно было изначально изучать DX, к тому же С++ уже знал, хоть освоить его можно довольно быстро.
Вот такие дела)


Название: Re: Динамическая загрузка
Отправлено: Egor от 08 Июня 2012, 01:32:35
Cgr тоже грузится нормально, просто добавляй во все предпологаемо - подгружаемые cgr, один общий паблик канал, который существует во всех приложениях использующих одни и теже cgr-ки, ну это подойдёт если подгружать cgr по однуму, брать из них данные и отгружать из пула, а если ты хочешь одномоментно погружать в пул унлиметед cgr-рок, ну тогда да, это проблема...


Название: Re: Динамическая загрузка
Отправлено: Ruslan от 08 Июня 2012, 02:50:13
Проблема не только с cgr, а еще в том, что проект может содержать еще много различных ресурсов, которые нет возможности добавить при сборке.


Название: Re: Динамическая загрузка
Отправлено: Egor от 08 Июня 2012, 17:26:10
С какими ресурсами проблемы возникают?   


Название: Re: Динамическая загрузка
Отправлено: Ruslan от 08 Июня 2012, 18:31:03
Цитировать
С какими ресурсами проблемы возникают?
Например меши в своем собственном формате, dx шейдера, бинарные файлы со служебной информацией и так далее.
В целом это любые файлы не относящиеся напрямую к квестовому проекту.
Если вы не пишите свои каналы с помощью SDK, а используете только стандартные квестовые, то возможно и сможете обойтись только CGR, но в таком случае пользы от квеста вообще нет никакой, так как создать сложный проект только лишь стандартными каналами это жуткий гемор.

p.s. впринципе, для меня это уже не проблема, так-как перешел на DX + (C++)


Название: Re: Динамическая загрузка
Отправлено: Egor от 08 Июня 2012, 20:51:44
Пишим свои каналы плюс куплено приличное колличество каналов которые пишут и продают люди, и проэкт довольно серьёзный, в него входяд много сетевых приложений изготовленных исключительно на квесте,к примеру одно из приложений своя(ну квестовская в основе) база данных в которой хранятся любые ресурсы или ссылки на ресурсы, всё работает, юзаются любые ресурсы, подключена куча разношорстных всяких девайсов. Просто квест очень целесообразен если его использывать не для игр в чистом виде, а для других более выгодных затей. То что можно сделать на квесте за месяц(для определённыз задач) в два человека, на любом другом движке не возможно(или очень сложно) и нужна серьёзная команда, а если начать с++ и тд вообще зароешься. Кароче квест не для игр, так что целесообразность зависит от поставленны задача. ;)


Название: Re: Динамическая загрузка
Отправлено: Ruslan от 08 Июня 2012, 21:37:14
Egor
Все познается в сравнении  ;)


Название: Re: Динамическая загрузка
Отправлено: Sqwer от 09 Июня 2012, 12:11:31
@ Egor
Цитировать
Пишим свои каналы
А вот теперь честно, положив руку на сердце. Нрвится ли вам дебажить свои каналы? Ждать пока слинкуются куча депендансных либ? Ждать пока загрузится квест? (да , это секунды, но они меня порядочно раздражали)

Потом,  если есть каналы, касающиеся графки с многопоточностью - то тут совсем мрак. (Квест кидает инвалидэйт по самым мелким причинам, которые в реале даже не являются следствием лост девайса). + Депендансы D3DX либ. кроме своей новой, приходится таскать квестовую старую.

Менеджера звука в квесте,даже самого примитивного - нет.
Физика косая кривая.

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

как только свой фрейворк/двиг/врапер   уже имеет всё это,  квест становится бесполезным. Какой человек станет терпеть все эти подлужные ямы Квеста ...

... наверное тот,  у кого сформирована огромная кодовая база специально для квеста, и перелопачивать её   нет ни времени, ни желания.


Название: Re: Динамическая загрузка
Отправлено: Egor от 09 Июня 2012, 14:35:30
Sqwer
как только свой фрейворк/двиг/врапер   уже имеет всё это
В том то и дело что свой двиг есть не у всех.. А начинали именно с написания двига, человек потратил больше года, и в результате можно было только наблюдать чайники с кирпичной текстурой и тп с отсутсвием эдитора итд и тп. После этого я перебрал несколько десятков движков под нашу задачу, в результате остался единствееный вариант Quest3d, который пока успешно с ней справляется. Еслиб я имел возможность написать свой двиг, причём который был бы лутше квеста, то думаю я так бы и сделал..


Название: Re: Динамическая загрузка
Отправлено: Denil-Tornado от 19 Июня 2012, 16:49:29
Прогать свой движок, задача не из лёгких. Я как-то начал его делать, (собственно почему меня долго и не было на форуме) прочитал 6 книг и облазил все популярные сайты по программированию, да что-то получалось, строить простенькие сцены, но как дело дошло для реализации компиляции проекта, собственно разработать эту функцию, то на этом великое моё вдохновение исчерпалось и забил на всё. Хотя вот недавно я лазил по сайту Майкрософта сообщество программистов и наткнулся на такую вещь, что установив Windows SDK, можно использовать чего-то там и внедрить в свой проект уже заложенный в "ОКНАХ" стандартный компилятор. Мож кто сталкивался с этим? А писать игру чисто на коде на мой взгляд это самоубийство.
Цитировать
собирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
В прицепе это вариант запрогать небольшое консольное приложение, которое могла бы выслеживать путь. Относительно эта идея мне самому в голову пришла недавно, до прочтения вашего поста, но я надеялся что это реализовать можно проще. Я просто встречал один квестовский проект, помойму даже где-то на оф. сайте скачивал, там проект хоть и с внешними файлами, но запускался без каких либо вмешательств других приложений и неважно в какой директории его распокавали.


Название: Re: Динамическая загрузка
Отправлено: Ruslan от 19 Июня 2012, 17:30:39
Denil-Tornado
Можно к своему движку подключить lua script или angelscript, управлять менеджерами через скрипты, тем самым не придется вообще, что либо перекомпилировать.
В качестве редактора мы использовали непосредственно 3dsMax, написав свою утилиту-экспортер на maxScript, получилось очень удобно, так как нет необходимости что-то куда то тягать, строишь сцену в максе, назначаешь dx-материалы, настраиваешь лоды, меняешь настройки различные в утилите, затем жмешь на экспорт и все готово( все текстуры автоматически собираются в папку сцены и так далее)

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


Название: Re: Динамическая загрузка
Отправлено: Sqwer от 19 Июня 2012, 18:04:07
Цитировать
собирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
жесть да )) но другого способа мы не нашли, походу его и нету..


эээ, было немного не так.

была создана ЛАУНЧЕР .exe, котороя  прежде всего создавала текстовый файл (содержащий путь к проекту) в "моих документах"   а далее запускала ехе самого квествого проекта.

PS. файл в моих документах  можно былоб заменить на  запись в реестре, но т.к. я не любитель захламлять систему  выбрал всё же файл.

Собственно, в чём профит:

1. Открывается поддержка для своих форматов всего и вся (от мешей, текстур  до  настроек и служебной инфы)
да, есть способ сохранять  в каналах квеста любую бинарную информацию канал "БУФФЕР", но почему мы от этого отказались  написано в след подпункте.

2. БЫСТРАЯ замена контента, захотел заказчик поставить новый домик, или заменить один на другой - пожалуйста! Мы просто  перезаписываем файлик с моделью в папке сцены. без всяких там перекомпиляций проекта. А если проект гигантский - это уже весьма существенно.
есть способ  компиляции отдельных файлов cgr, но каждая компиляция проекта  изменяет набор используемых dll. Ничего в проекте не менешь, просто  перекомпилируешь  и уже другой набор длл, что весьма странно.

3. Свой формат предполагает минимизацию лишней информации. - Проект худеет, как в оперативке так и на винте.


Важно знать, что  ехе лаунчер  должен находиться в одной папке с ехе квестового проекта
попытка запуска лаунчера из другой папки  не даст  запустить квестовое приложение
оно сругнётся



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


Название: Re: Динамическая загрузка
Отправлено: mike от 13 Ноября 2012, 11:47:11
Привет народ, давно не виделись! Ну собственно по существу.

Вопрос Дурацкий но всё же спрошу.

Как работает Load ChannelGroup, я хочу динамически подгрузить канал, но в итоге квест выдаёт ошибку,
Цитировать
A Group Loader and a Buffer channel are both linked to Load ChannelGroup channel, the Buffer channel will be used to load the group, when it contains data.
но как я понял это ругается канал буфера, отключая его загрузка всё равно не идёт.

В общем я пытаю реализовать такую идею: У меня есть два файла CGR. В первом я реализую динамическую подгрузку второго и чтобы первый подгружал второй так, чтобы он не входил в компиляцию всего проекта.

О_о М да сайт походу дело вымирает... Нехорошо!
Или просто все Quest3D 5 взялись за изучение?

Ну объясните хотя бы как Group Loader работает. Скажем так: Мне нужно загрузить текстуру или видео из корневой папки. Так вот путь я прописал и Group Loader Status уведомляет что объект загрузился, а проблема собственно в чём, как теперь эту загруженную текстуру скажем на плоскость натянуть.

Привет, всё проще.
Пример создания экрана загрузки при помощи Lua script

http://quest3d.ru/wp-content/uploads/quesr3d_ru_loading_screen_01.jpg

http://quest3d.ru/wp-content/uploads/quesr3d_ru_loading_screen_04.jpg

http://quest3d.ru/wp-content/uploads/quesr3d_ru_loading_screen_03.jpg

http://quest3d.ru/wp-content/uploads/quesr3d_ru_loading_screen_02.jpg

Скачать урок можно тут http://narod.ru/disk/62315523001.52fc61640737596815146795ea9733b8/loading.rar.html

Ссылка на статью http://quest3d.ru/?page_id=690&mingleforumaction=viewtopic&t=2

Новый форум Quest3D http://quest3d.ru/?page_id=690 (http://quest3d.ru/?page_id=690)