20 Мая 2024, 06:12:53
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Quest3D > Программирование > Динамическая загрузка
Динамическая загрузка
(Прочитано 16051 раз)
  [1] 2
Печать
Denil-Tornado | **** | Старожил | Сообщений: 313 | « 28 Мая 2012, 00:23:24 »
Динамическая загрузка |
0
Привет народ, давно не виделись! Ну собственно по существу.

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

Как работает 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 уведомляет что объект загрузился, а проблема собственно в чём, как теперь эту загруженную текстуру скажем на плоскость натянуть.
« Последнее редактирование: 04 Июня 2012, 18:25:39 от Denil-Tornado »
Denil-Tornado | **** | Старожил | Сообщений: 313 | «Ответ #1 30 Мая 2012, 19:56:18 »
Re: Как работает Load ChannelGroup |
1
Так ладно с одним мы разобрались.

Так, группу мы загрузили. Теперь вопрос в другом. Как загрузить канал из этой группы. Перетягивание из двойного окна мне не подходит. Мне нужно построить алгоритм автоматической загрузки канала.
dfx | ** | Пользователь | Сообщений: 95 | «Ответ #2 03 Июня 2012, 00:20:31 »
Re: Как работает Load ChannelGroup |
2
Если я правильно понял, надо загрузить в память группу из папки и подцепить паблик-канал.

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

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

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 будет содержать результат


Как сделать без луа, к сожалению, не знаю.
Egor | * | Новичок | Сообщений: 23 | «Ответ #3 03 Июня 2012, 17:42:26 »
Re: Как работает Load ChannelGroup |
3
Вот пример загрузки текстуры, возможные для подгрузки форматы bmp, jpg, tga, ppm, dds, png, hdr,загрузка производится Load ChannelGroup каналом.
* TEST_LOAD_TEXTURE.rar (311.23 Кб - загружено 685 раз.)
Denil-Tornado | **** | Старожил | Сообщений: 313 | «Ответ #4 03 Июня 2012, 23:06:57 »
Re: Как работает Load ChannelGroup |
4
Спасибо большое! Будем пробовать.

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

Но продолжая тему Динамической загрузки, столкнулся я с такой проблемой. Есть сцена (присутствует в архиве) динамически загружаю МедияТекстуру, в квесте всё работает безупречно. Но при публикации шиш, но если я ввожу полный путь к файлу, то и там и там всё работает безупречно. Но мне не хотелось бы указывать полный путь к файлу, а чтобы сама программа искала файл от корневой папки.
* test.rar (4.89 Кб - загружено 665 раз.)
« Последнее редактирование: 04 Июня 2012, 18:27:10 от Denil-Tornado »
dfx | ** | Пользователь | Сообщений: 95 | «Ответ #5 06 Июня 2012, 16:49:45 »
Re: Динамическая загрузка |
5
Цитировать
Но опять же работает всё от полного пути к файлу, а от корневой папки читать не хочет.

Проект локальный или web? Экспорт в exe? С web я не работал. С локальными проектами все работает, если использовать относительный путь ".\" Для некоторых каналов требуется полный путь, его можно получить, пропустив относительный через канал "text operator".
Если паблишь в exe, то тут все сложнее - сам exe-файл представляет собой архив с файлами проекта и quest3d-плеером. Т.е. при запуске все это дело распаковывается в temp и запускается оттуда, следовательно и относительный путь будет строится не от папки с exe, а от temp-директории.
Denil-Tornado | **** | Старожил | Сообщений: 313 | «Ответ #6 06 Июня 2012, 18:48:03 »
Re: Динамическая загрузка |
6
Локальный. Действительно я что-то не подумал, если другие cgr'ки в компиляцию не входят то при запуске они остаются на месте, а вот с exe проблемы. Тогда мне интересно текстуры она грузит нормально, хотя данные об загрузки текстур лежат в exe, а вот cgr'ку она не хочет хммм....
« Последнее редактирование: 06 Июня 2012, 18:51:40 от Denil-Tornado »
Ruslan | ***** | Ветеран | Сообщений: 664 | «Ответ #7 07 Июня 2012, 00:35:27 »
Re: Динамическая загрузка |
7
Denil-Tornado
также нужно было получить полный путь, решили так:
собирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
жесть да )) но другого способа мы не нашли, походу его и нету..
Очень разочаровался в квесте, сожалею, что потратил время на знакомство с ним, нужно было изначально изучать DX, к тому же С++ уже знал, хоть освоить его можно довольно быстро.
Вот такие дела)
Egor | * | Новичок | Сообщений: 23 | «Ответ #8 08 Июня 2012, 01:32:35 »
Re: Динамическая загрузка |
8
Cgr тоже грузится нормально, просто добавляй во все предпологаемо - подгружаемые cgr, один общий паблик канал, который существует во всех приложениях использующих одни и теже cgr-ки, ну это подойдёт если подгружать cgr по однуму, брать из них данные и отгружать из пула, а если ты хочешь одномоментно погружать в пул унлиметед cgr-рок, ну тогда да, это проблема...
Ruslan | ***** | Ветеран | Сообщений: 664 | «Ответ #9 08 Июня 2012, 02:50:13 »
Re: Динамическая загрузка |
9
Проблема не только с cgr, а еще в том, что проект может содержать еще много различных ресурсов, которые нет возможности добавить при сборке.
Egor | * | Новичок | Сообщений: 23 | «Ответ #10 08 Июня 2012, 17:26:10 »
Re: Динамическая загрузка |
10
С какими ресурсами проблемы возникают?   
Ruslan | ***** | Ветеран | Сообщений: 664 | «Ответ #11 08 Июня 2012, 18:31:03 »
Re: Динамическая загрузка |
11
Цитировать
С какими ресурсами проблемы возникают?
Например меши в своем собственном формате, dx шейдера, бинарные файлы со служебной информацией и так далее.
В целом это любые файлы не относящиеся напрямую к квестовому проекту.
Если вы не пишите свои каналы с помощью SDK, а используете только стандартные квестовые, то возможно и сможете обойтись только CGR, но в таком случае пользы от квеста вообще нет никакой, так как создать сложный проект только лишь стандартными каналами это жуткий гемор.

p.s. впринципе, для меня это уже не проблема, так-как перешел на DX + (C++)
« Последнее редактирование: 08 Июня 2012, 18:38:53 от Ruslan »
Egor | * | Новичок | Сообщений: 23 | «Ответ #12 08 Июня 2012, 20:51:44 »
Re: Динамическая загрузка |
12
Пишим свои каналы плюс куплено приличное колличество каналов которые пишут и продают люди, и проэкт довольно серьёзный, в него входяд много сетевых приложений изготовленных исключительно на квесте,к примеру одно из приложений своя(ну квестовская в основе) база данных в которой хранятся любые ресурсы или ссылки на ресурсы, всё работает, юзаются любые ресурсы, подключена куча разношорстных всяких девайсов. Просто квест очень целесообразен если его использывать не для игр в чистом виде, а для других более выгодных затей. То что можно сделать на квесте за месяц(для определённыз задач) в два человека, на любом другом движке не возможно(или очень сложно) и нужна серьёзная команда, а если начать с++ и тд вообще зароешься. Кароче квест не для игр, так что целесообразность зависит от поставленны задача. Подмигивающий
Ruslan | ***** | Ветеран | Сообщений: 664 | «Ответ #13 08 Июня 2012, 21:37:14 »
Re: Динамическая загрузка |
13
Egor
Все познается в сравнении  Подмигивающий
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #14 09 Июня 2012, 12:11:31 »
Re: Динамическая загрузка |
14
@ Egor
Цитировать
Пишим свои каналы
А вот теперь честно, положив руку на сердце. Нрвится ли вам дебажить свои каналы? Ждать пока слинкуются куча депендансных либ? Ждать пока загрузится квест? (да , это секунды, но они меня порядочно раздражали)

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

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

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

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

... наверное тот,  у кого сформирована огромная кодовая база специально для квеста, и перелопачивать её   нет ни времени, ни желания.
 
  [1] 2
Печать
 
Quest3D - Русскоязычное сообщество > Quest3D > Программирование > Динамическая загрузка
Перейти в: