Привет народ, давно не виделись! Ну собственно по существу.
Вопрос Дурацкий но всё же спрошу.
Как работает 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 уведомляет что объект загрузился, а проблема собственно в чём, как теперь эту загруженную текстуру скажем на плоскость натянуть.
Так ладно с одним мы разобрались.
Так, группу мы загрузили. Теперь вопрос в другом. Как загрузить канал из этой группы. Перетягивание из двойного окна мне не подходит. Мне нужно построить алгоритм автоматической загрузки канала.
Если я правильно понял, надо загрузить в память группу из папки и подцепить паблик-канал.
Загрузка файла с группой в файл -
Сздаем луа-канал и в нем пишем (кстати есть в мануале)-
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 будет содержать результат
Как сделать без луа, к сожалению, не знаю.
Вот пример загрузки текстуры, возможные для подгрузки форматы bmp, jpg, tga, ppm, dds, png, hdr,загрузка производится Load ChannelGroup каналом.
Спасибо большое! Будем пробовать.
Действительно всё работает. Но опять же работает всё от полного пути к файлу, а от корневой папки читать не хочет.
Но продолжая тему Динамической загрузки, столкнулся я с такой проблемой. Есть сцена (присутствует в архиве) динамически загружаю МедияТекстуру, в квесте всё работает безупречно. Но при публикации шиш, но если я ввожу полный путь к файлу, то и там и там всё работает безупречно. Но мне не хотелось бы указывать полный путь к файлу, а чтобы сама программа искала файл от корневой папки.
ЦитироватьНо опять же работает всё от полного пути к файлу, а от корневой папки читать не хочет.
Проект локальный или web? Экспорт в exe? С web я не работал. С локальными проектами все работает, если использовать относительный путь ".\" Для некоторых каналов требуется полный путь, его можно получить, пропустив относительный через канал "text operator".
Если паблишь в exe, то тут все сложнее - сам exe-файл представляет собой архив с файлами проекта и quest3d-плеером. Т.е. при запуске все это дело распаковывается в temp и запускается оттуда, следовательно и относительный путь будет строится не от папки с exe, а от temp-директории.
Локальный. Действительно я что-то не подумал, если другие cgr'ки в компиляцию не входят то при запуске они остаются на месте, а вот с exe проблемы. Тогда мне интересно текстуры она грузит нормально, хотя данные об загрузки текстур лежат в exe, а вот cgr'ку она не хочет хммм....
Denil-Tornado
также нужно было получить полный путь, решили так:
собирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
жесть да )) но другого способа мы не нашли, походу его и нету..
Очень разочаровался в квесте, сожалею, что потратил время на знакомство с ним, нужно было изначально изучать DX, к тому же С++ уже знал, хоть освоить его можно довольно быстро.
Вот такие дела)
Cgr тоже грузится нормально, просто добавляй во все предпологаемо - подгружаемые cgr, один общий паблик канал, который существует во всех приложениях использующих одни и теже cgr-ки, ну это подойдёт если подгружать cgr по однуму, брать из них данные и отгружать из пула, а если ты хочешь одномоментно погружать в пул унлиметед cgr-рок, ну тогда да, это проблема...
Проблема не только с cgr, а еще в том, что проект может содержать еще много различных ресурсов, которые нет возможности добавить при сборке.
С какими ресурсами проблемы возникают?
ЦитироватьС какими ресурсами проблемы возникают?
Например меши в своем собственном формате, dx шейдера, бинарные файлы со служебной информацией и так далее.
В целом это любые файлы не относящиеся напрямую к квестовому проекту.
Если вы не пишите свои каналы с помощью SDK, а используете только стандартные квестовые, то возможно и сможете обойтись только CGR, но в таком случае пользы от квеста вообще нет никакой, так как создать сложный проект только лишь стандартными каналами это жуткий гемор.
p.s. впринципе, для меня это уже не проблема, так-как перешел на DX + (C++)
Пишим свои каналы плюс куплено приличное колличество каналов которые пишут и продают люди, и проэкт довольно серьёзный, в него входяд много сетевых приложений изготовленных исключительно на квесте,к примеру одно из приложений своя(ну квестовская в основе) база данных в которой хранятся любые ресурсы или ссылки на ресурсы, всё работает, юзаются любые ресурсы, подключена куча разношорстных всяких девайсов. Просто квест очень целесообразен если его использывать не для игр в чистом виде, а для других более выгодных затей. То что можно сделать на квесте за месяц(для определённыз задач) в два человека, на любом другом движке не возможно(или очень сложно) и нужна серьёзная команда, а если начать с++ и тд вообще зароешься. Кароче квест не для игр, так что целесообразность зависит от поставленны задача. ;)
Egor
Все познается в сравнении ;)
@ EgorЦитироватьПишим свои каналы
А вот теперь честно, положив руку на сердце. Нрвится ли вам дебажить свои каналы? Ждать пока слинкуются куча депендансных либ? Ждать пока загрузится квест? (да , это секунды, но они меня порядочно раздражали)
Потом, если есть каналы, касающиеся графки с многопоточностью - то тут совсем мрак. (Квест кидает инвалидэйт по самым мелким причинам, которые в реале даже не являются следствием лост девайса). + Депендансы D3DX либ. кроме своей новой, приходится таскать квестовую старую.
Менеджера звука в квесте,даже самого примитивного - нет.
Физика косая кривая.
Выгода использования квеста лишь в этом:
- менеджер шейдеров
- квестовый визуальный IDE успешно заменяет скрипты
- независимая разработка (кто-то пишет каналы - заглушки, второй в это время делает прототип. далее следующая итерация, каналы заглушки накапливают логику, а кто-то в квесте уже собирает рабочую модель. Всё сводится к простому копированию dll в папку каналов )
как только свой фрейворк/двиг/врапер уже имеет всё это, квест становится бесполезным. Какой человек станет терпеть все эти подлужные ямы Квеста ...
... наверное тот, у кого сформирована огромная кодовая база специально для квеста, и перелопачивать её нет ни времени, ни желания.
Цитата: Sqwer от 09 июня 2012, 13:11:31
Sqwer
как только свой фрейворк/двиг/врапер уже имеет всё это
В том то и дело что свой двиг есть не у всех.. А начинали именно с написания двига, человек потратил больше года, и в результате можно было только наблюдать чайники с кирпичной текстурой и тп с отсутсвием эдитора итд и тп. После этого я перебрал несколько десятков движков под нашу задачу, в результате остался единствееный вариант Quest3d, который пока успешно с ней справляется. Еслиб я имел возможность написать свой двиг, причём который был бы лутше квеста, то думаю я так бы и сделал..
Прогать свой движок, задача не из лёгких. Я как-то начал его делать, (собственно почему меня долго и не было на форуме) прочитал 6 книг и облазил все популярные сайты по программированию, да что-то получалось, строить простенькие сцены, но как дело дошло для реализации компиляции проекта, собственно разработать эту функцию, то на этом великое моё вдохновение исчерпалось и забил на всё. Хотя вот недавно я лазил по сайту Майкрософта сообщество программистов и наткнулся на такую вещь, что установив Windows SDK, можно использовать чего-то там и внедрить в свой проект уже заложенный в "ОКНАХ" стандартный компилятор. Мож кто сталкивался с этим? А писать игру чисто на коде на мой взгляд это самоубийство.
Цитироватьсобирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
В прицепе это вариант запрогать небольшое консольное приложение, которое могла бы выслеживать путь. Относительно эта идея мне самому в голову пришла недавно, до прочтения вашего поста, но я надеялся что это реализовать можно проще. Я просто встречал один квестовский проект, помойму даже где-то на оф. сайте скачивал, там проект хоть и с внешними файлами, но запускался без каких либо вмешательств других приложений и неважно в какой директории его распокавали.
Denil-TornadoМожно к своему движку подключить lua script или angelscript, управлять менеджерами через скрипты, тем самым не придется вообще, что либо перекомпилировать.
В качестве редактора мы использовали непосредственно 3dsMax, написав свою утилиту-экспортер на maxScript, получилось очень удобно, так как нет необходимости что-то куда то тягать, строишь сцену в максе, назначаешь dx-материалы, настраиваешь лоды, меняешь настройки различные в утилите, затем жмешь на экспорт и все готово( все текстуры автоматически собираются в папку сцены и так далее)
ЦитироватьЯ просто встречал один квестовский проект, помойму даже где-то на оф. сайте скачивал, там проект хоть и с внешними файлами, но запускался без каких либо вмешательств других приложений и неважно в какой директории его распокавали.
Возможно написали свой канал, который ищет папку в которую распаковался квестовый проект.. а он автоматом линкуется к проекту.
Цитироватьсобирали инсталяху с помощью "левой" приблуды(не помню как называется, но инсталляторов таких полно) после распаковки проекта, эта приблуда автоматом запускала .exe, который мы заблаговременно создали(именно этот .exe определял путь по которому он находится, далее создавал в моих документах текстовый файл, в который и записывал этот самый полный путь к проекту), ну а после старта квестового проекта, оставалось только прочесть путь из этого текстовика..
жесть да )) но другого способа мы не нашли, походу его и нету..
эээ, было немного не так.
была создана
ЛАУНЧЕР .exe, котороя прежде всего создавала текстовый файл (содержащий путь к проекту) в "моих документах" а далее запускала ехе самого квествого проекта.
PS. файл в моих документах можно былоб заменить на запись в реестре, но т.к. я не любитель захламлять систему выбрал всё же файл.
Собственно, в чём профит:
1. Открывается поддержка для своих форматов всего и вся (от мешей, текстур до настроек и служебной инфы)
да, есть способ сохранять в каналах квеста любую бинарную информацию канал "БУФФЕР", но почему мы от этого отказались написано в след подпункте.2. БЫСТРАЯ замена контента, захотел заказчик поставить новый домик, или заменить один на другой - пожалуйста! Мы просто перезаписываем файлик с моделью в папке сцены. без всяких там перекомпиляций проекта. А если проект гигантский - это уже весьма существенно.
есть способ компиляции отдельных файлов cgr, но каждая компиляция проекта изменяет набор используемых dll. Ничего в проекте не менешь, просто перекомпилируешь и уже другой набор длл, что весьма странно.3. Свой формат предполагает минимизацию лишней информации. - Проект худеет, как в оперативке так и на винте.
Важно знать, что
ехе лаунчер должен находиться в одной папке с
ехе квестового проектапопытка запуска лаунчера из другой папки не даст запустить квестовое приложение
оно сругнётся
Цитироватьоф. сайте скачивал, там проект хоть и с внешними файлами, но запускался без каких либо вмешательств других приложений и неважно в какой директории его распокавали.
у нас примерно также,
Реализуется по той схеме, что выше написал,только вместо самописного txe лаунчера можно использовать квестовый лаунчер ехе, работающий по таким же принципам.
Цитата: Denil-Tornado от 28 мая 2012, 01: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 уведомляет что объект загрузился, а проблема собственно в чём, как теперь эту загруженную текстуру скажем на плоскость натянуть.
Привет, всё проще.
Пример создания экрана загрузки при помощи 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)