Приветствую!
Перерыл весь форум, но ничего похожего не нашел нигде.
Подскажите как лучше реализовать динамическую цену? Задачи цены:
1. Получение списка всех 3D объектов и их свойства из mySQL(Тут все ясно)
2. Исходя из данных загрузка объектов с сервера и построение исходя из свойств(позиция размер).
!Сложности возникли именно с тем, что для каждого загружаемого объекта необходим контейнер.
Что имеется ввиду под контейнером?
Контейнер = Канал. А динамически создавать каналы не известно как. Только я так понял гонять в цикле?
Без LUA, но смысл тот же..
https://guest3d.wohlnet.ru/forum/index.php?topic=1468.0
Здесь, готовый LUA Dynamic Web Loader, для того,что бы его скачать, нужна регистрация:
http://quest.ovos.at/browse/detail/53
Воспользуйтесь массивами или ОО системой, куда будете складывать данные из базы.
Кстати, в каком виде в базе хранится такие вещи как VertexData и т.д? Или в базе просто ссылка на файл? Тогда вам нужен ColladaImport )
Столкнулся проблемой. в массивы не сохраняется кириллица. после записи преобразуется в ?? ? ??? ??. Может есть решение?
Ссылка на файл только файл будет храниться на сервере. и текстурки тоже. и + нужно некий класс приписывать ко всем загружаемым файлам с параметрами из базы. чтобы на сцене они отрисовывались исходя из полученных данных(позиция скайл) ибыли активными т.е. прогонять через collisionRayCheck/ и мне почему то кажется, что в квесте такой функционал не реализовать.
https://guest3d.wohlnet.ru/forum/index.php?topic=1468.0
не подошел загрузчик? ;)
1. Загрузка объекта из базы - не знаю, не пробовал. Но должно работать.
2. То что загружается - это группа, или то, что можно преобразовать в группу - работает ColladaImport. Просто в нужные параметры вписываются не данные из файла модели(там ведь они тоже есть), а данные из запроса к базе.
3. По поводу активности - мне кажется, что тебе может помочь следующая тема: https://guest3d.wohlnet.ru/forum/index.php?topic=1577.0
Принцип-то тот же.
Квест нереально мощный. Мне иногда кажется, что все упирается в соображалку.
to Ruslan - > Не открылся файл у меня 4.0 может поэтому и проект начал в нем(
Deepl - > Спасибо покапаю в той стороне. если интересно могу отписываться, что получается)
Проект виртуальный музей. Хочу чтобы все объекты хранились на сервере и всегда были свежие сцены. 3дху всю уже сделал осталось разобраться с импортом) конечно можно было бы и сделать все просто закинув в сцену, но так не интересно:) раньше работал с directX/
Да, интересно. Сейчас сам работаю над программой для формирования помещений. Так что будем делиться опытом )
у меня допустим есть ссылка на .cgr файл в котором только 3DObjectData. как мне с помощью ОО добавить это в динамический объект в котором уже матрица и материалы? аналогично по текстуре.
и походу все накрывается медным тазом из за того что Text не понимает значения в Кирилице и опции юникода я не нашел в OO хотя для обычного текст есть галочка.
Ура!. Посидев немного почитав мануалы по ОО родил наконец то что хотел. Что может сцена:
- динамическая загрузка файлов .cgr в сцену (только 3DObjectData)
- отрисовка их исходя из данных(все матрицы движения размеров задаем)
- определение каждого файла мышкой, вывод информации на экран о текущем объекте
Что планирую делать дальше:
- разобраться с кириллицей. некорректное отображение
- получать данные с MSQL сервера и структурировать их
Есть ряд вопросов по продолжению этой темы. помогите гуру!!:
Я с помощью ОО Class Instances описал 5 объектов. одним из параметров в нем это 3DObjectData, ссылка на файл который надо загрузить .cgr
1. При прохождении цикла LUA Script грузит 3DObjectData полученную из пришедшего параметра в виде пути к файлу. В Канал "object":
local nameChannel = channel.GetChild(0)
local someText = nameChannel:GetText()
local idChannel = channel.GetChild(1)
local idValue = idChannel:GetValue()
q.RemoveChannelGroup("object", idValue)
q.LoadChannelGroupDQ(someText, "object", idValue, "model")
проблема в том, что после первой обработки LUA, грузятся данные(например из файла box.cgr) и идут в заранее созданный канал "object"
при второй обработке уже создан этот объект и отображается тот же самый box.cgr, а параметр пришел sphere.cgr!!
Вопрос: как решить эту проблему? и грузить в сцену динамчески например хоть сколько каналов а не 1 object?
2. Вопрос кирилицы. Кто нибудь в квесте решил проблему с хранением в массивах или классах текста в юникоде? если есть галочка в обычном канале текста "Юникод" то должно же быть где то и решение для массивов и классов?
3. Как можно динамически заносить данные в ОО Class Instances? например из массива туда все? в LUA описана только работа с массивами.
4. И как записывать какую нибудь глобальную переменную в ОО? и читать ее после?
...
1 я так понял ты пробуешь использовать индекс в ченелгруппе, я не пробовал так делать, но у меня прекрасно работает если создавать разные ченелгруппы для разных цгр файлов. Ещё я посмотрел твой предыдущий пост и пример оттуда, ты там вызываешь обжект дату, просто создав ссылку на паблик ченел и приконектив её к сюрфейсу. Я понял, что мысль в том чтобы сделать эту ссылку рабочей для динамически подгруженного туда паблик ченела, но скорее всего индекс ченелгруппы(который ты меняешь для каждого цгр файла) не учитывается, или прописан там намертво и динамически его не поменять. Могу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д. Таким образом проинициализировав обжект даты всем своим объектам потом рендерь их используя эти обжект даты. Копирование обжект даты можно сделать с помощью ченела CommandNewInterface. Но это всё как то слишком сложно, обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.
2 для хранения в текстовом поле интерфейса юникода, создай поле таким образом Add Member -> Channel -> Text , потом в свойствах этого ченела поставь галочку юникод
3 вообще не очень понял вопрос, мне кажется ты всё связанное с луа считаешь динамическим, и соответственно всё не связанное с луа не динамическим))
4 тоже не понял, так же как и обычную переменную
ЦитироватьМогу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д
Не совсем понял как это реализовать
Цитировать
обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.
если я так сделаю то как я буду менять свойства у объекта если нет к ним доступа, размер, позиция, текстура.
ты говоришь создавать каналы куда грузить изначально, а если я не знаю сколько объектов заранее?
Цитата: fanil от 09 ноября 2010, 10:38:53
ЦитироватьМогу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д
Не совсем понял как это реализовать
ну вот у тебя есть линка на паблик ченел с определённым именем из определённой ченелгруппы
ты подгружаешь цгр, в которой объявлен такой паблик ченел с таким именем и при подгрузке называешь ченнелгруппу именно так чтоб заработала твоя линка (и отот второй параметр ставишь 0, я ниразу не видел чтоб кто то когда то использовал там какое то другое значение)
используя ченнел Command New Interface -> Misc -> Add object data копируешь обжект дату из твоей линки в нужное тебе место(поле класса который будет создаваться динамически)
удаляешь ченелгруппу
повторяешь со следующей цгр
(я не уверен что это всё в итоге заработает, но это то что я хотел предложить в качестве усовершенствования твоего метода)
Цитата: fanil от 09 ноября 2010, 10:38:53
Цитировать
обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.
если я так сделаю то как я буду менять свойства у объекта если нет к ним доступа, размер, позиция, текстура.
вот это другой метод, которым пользуются обычно
если тебе например надо управлять позицией объекта из цгр, ты в какой то своей статической ченелгруппе объявляешь паблик ченел типа матрица, называешь его например CgrObjectMotion. В той цгр, которую ты будешь динамически подгружать, подключаешь этот паблик ченел к моушену 3дОбжекта. Когда рендериш каждую из подгруженных и подготовленных таким образом цгр перед вызовом 3дОбжекта меняешь значение CgrObjectMotion на то которое должно быть у этого 3дОбжекта
Цитата: fanil от 09 ноября 2010, 10:38:53
ты говоришь создавать каналы куда грузить изначально, а если я не знаю сколько объектов заранее?
я не очень понял что ты тут спрашивал, но если ты о том что для каждого объекта нужно создавать отдельную ченелгруппу, то это не проблема, им надо просто давать разные имена, по имени цгр файла например
А можно как то на реальном примере показать как динамически создавать каналы? Теорию я понял с практикой туговато.
какие каналы? чёто я тебя опять не очень понимаю
объекты=каналы. в моем понимании) ChannelCaller/ при мпорте в цене появляется объект не сохраненный типа. вот я про это и говорю
Описываешь ОО класс, у которого есть поле 3DObjectData (наверняка и какие то другие поля на твоё усмотрение), создаёшь какой то OO Class Instances List, в котором будешь хранить экземпляры этого класа, юзаешь OO InterfaceCommand -> Add new class to container, получаешь при этом Result Index, с помощью этого индекса и ченела OO Instance Ref Item From Container можешь обращаться к только что созданному экземпляру класса(и его полям ;) )
думаю это то о чём ты спрашивал?