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

Quest3D => Программирование => Тема начата: fanil от 07 Октября 2010, 15:25:03



Название: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 07 Октября 2010, 15:25:03
Приветствую!

Перерыл весь форум, но ничего похожего не нашел нигде.

Подскажите как лучше реализовать динамическую цену? Задачи цены:

1. Получение списка всех 3D объектов и их свойства из mySQL(Тут все ясно)

2. Исходя из данных загрузка объектов с сервера и построение исходя из свойств(позиция размер).

!Сложности возникли именно с тем, что для каждого загружаемого объекта необходим контейнер.


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Deepl от 10 Октября 2010, 10:37:16
Что имеется ввиду под контейнером?


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 10 Октября 2010, 10:40:16
Контейнер = Канал. А динамически создавать каналы не известно как. Только я так понял гонять в цикле?


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Ruslan от 10 Октября 2010, 13:30:03
Без LUA, но смысл тот же..
http://guest3d.wohlnet.ru/forum/index.php?topic=1468.0
Здесь, готовый LUA Dynamic Web Loader, для того,что бы его скачать, нужна регистрация:
http://quest.ovos.at/browse/detail/53


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Deepl от 28 Октября 2010, 11:07:09
Воспользуйтесь массивами или ОО системой, куда будете складывать данные из базы.

Кстати, в каком виде в базе хранится такие вещи как VertexData и т.д? Или в базе просто ссылка на файл? Тогда вам нужен ColladaImport )


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 28 Октября 2010, 11:20:30
Столкнулся проблемой. в массивы не сохраняется кириллица. после записи преобразуется в ?? ? ??? ??. Может есть решение?

Ссылка на файл только файл будет храниться на сервере. и текстурки тоже. и + нужно некий класс приписывать ко всем загружаемым файлам с параметрами из базы. чтобы на сцене они отрисовывались исходя из полученных данных(позиция скайл) ибыли активными т.е. прогонять через collisionRayCheck/ и мне почему то кажется, что в квесте такой функционал не реализовать.


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Ruslan от 28 Октября 2010, 11:28:28
http://guest3d.wohlnet.ru/forum/index.php?topic=1468.0
не подошел загрузчик?  ;)


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Deepl от 28 Октября 2010, 11:29:58
1. Загрузка объекта из базы - не знаю, не пробовал. Но должно работать.
2. То что загружается - это группа, или то, что можно преобразовать в группу - работает ColladaImport. Просто в нужные параметры вписываются не данные из файла модели(там ведь они тоже есть), а данные из запроса к базе.
3. По поводу активности - мне кажется, что тебе может помочь следующая тема: http://guest3d.wohlnet.ru/forum/index.php?topic=1577.0
Принцип-то тот же.

Квест нереально мощный. Мне иногда кажется, что все упирается в соображалку.


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 28 Октября 2010, 11:39:16
to Ruslan - > Не открылся файл у меня 4.0 может поэтому и проект начал в нем(

Deepl - > Спасибо покапаю в той стороне. если интересно могу отписываться, что получается)

Проект виртуальный музей. Хочу чтобы все объекты хранились на сервере и всегда были свежие сцены. 3дху всю уже сделал осталось разобраться с импортом) конечно можно было бы и сделать все просто закинув в сцену, но так не интересно:) раньше работал с directX/


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: Deepl от 28 Октября 2010, 21:37:55
Да, интересно. Сейчас сам работаю над программой для формирования помещений. Так что будем делиться опытом )


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 29 Октября 2010, 08:49:21
у меня допустим есть ссылка на .cgr файл в котором только 3DObjectData. как мне с помощью ОО добавить это в динамический объект в котором уже матрица и материалы? аналогично по текстуре.
и походу все накрывается медным тазом из за того что Text не понимает значения в Кирилице и опции юникода я не нашел в OO  хотя для обычного текст есть галочка.


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 29 Октября 2010, 16:52:28
Ура!. Посидев немного почитав мануалы по ОО родил наконец то что хотел. Что может сцена:

- динамическая загрузка файлов .cgr в сцену (только 3DObjectData)

- отрисовка их исходя из данных(все матрицы движения размеров задаем)

- определение каждого файла мышкой, вывод информации на экран о текущем объекте

Что планирую делать дальше:
- разобраться с кириллицей. некорректное отображение
- получать данные с MSQL сервера и структурировать их



Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 06 Ноября 2010, 18:14:47
Есть ряд вопросов по продолжению этой темы. помогите гуру!!:

Я с помощью ОО 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. И как записывать какую нибудь глобальную переменную в ОО? и читать ее после?

...


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: DimiS от 08 Ноября 2010, 12:57:25
1 я так понял ты пробуешь использовать индекс в ченелгруппе, я не пробовал так делать, но у меня прекрасно работает если создавать разные ченелгруппы для разных цгр файлов. Ещё я посмотрел твой предыдущий пост и пример оттуда, ты там вызываешь обжект дату, просто создав ссылку на паблик ченел и приконектив её к сюрфейсу. Я понял, что мысль в том чтобы сделать эту ссылку рабочей для динамически подгруженного туда паблик ченела, но скорее всего индекс ченелгруппы(который ты меняешь для каждого цгр файла) не учитывается, или прописан там намертво и динамически его не поменять. Могу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д. Таким образом проинициализировав обжект даты всем своим объектам потом рендерь их используя эти обжект даты. Копирование обжект даты можно сделать с помощью ченела CommandNewInterface. Но это всё как то слишком сложно, обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.

2 для хранения в текстовом поле интерфейса юникода, создай поле таким образом Add Member -> Channel -> Text , потом в свойствах этого ченела поставь галочку юникод

3 вообще не очень понял вопрос, мне кажется ты всё связанное с луа считаешь динамическим, и соответственно всё не связанное с луа не динамическим))

4 тоже не понял, так же как и обычную переменную


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 09 Ноября 2010, 10:38:53
Цитировать
Могу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д

Не совсем понял как это реализовать

Цитировать
обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.

если я так сделаю то как я буду менять свойства у объекта если нет к ним доступа, размер, позиция, текстура.

ты говоришь создавать каналы куда грузить изначально, а если я не знаю сколько объектов заранее?


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: DimiS от 09 Ноября 2010, 21:58:43
Цитировать
Могу посоветовать грузить каждый цгр в один и тот же ченелгрупп по 0 индексу, и потом просто копировать обжект дату в отдельное поле своего объекта. А после этого грузить следующий, и т.д

Не совсем понял как это реализовать
ну вот у тебя есть линка на паблик ченел с определённым именем из определённой ченелгруппы
ты подгружаешь цгр, в которой объявлен такой паблик ченел с таким именем и при подгрузке называешь ченнелгруппу именно так чтоб заработала твоя линка (и отот второй параметр ставишь 0, я ниразу не видел чтоб кто то когда то использовал там какое то другое значение)
используя ченнел Command New Interface -> Misc -> Add object data копируешь обжект дату из твоей линки в нужное тебе место(поле класса который будет создаваться динамически)
удаляешь ченелгруппу
повторяешь со следующей цгр

(я не уверен что это всё в итоге заработает, но это то что я хотел предложить в качестве усовершенствования твоего метода)

Цитировать
обычно достаточно возможности вызвать 3дОбжект из подгруженной цгр чтоб он сам себя полностью нарисовал и всё.

если я так сделаю то как я буду менять свойства у объекта если нет к ним доступа, размер, позиция, текстура.

вот это другой метод, которым пользуются обычно
если тебе например надо управлять позицией объекта из цгр, ты в какой то своей статической ченелгруппе объявляешь паблик ченел типа матрица, называешь его например CgrObjectMotion. В той цгр, которую ты будешь динамически подгружать, подключаешь этот паблик ченел к моушену 3дОбжекта. Когда рендериш каждую из подгруженных и подготовленных таким образом цгр перед вызовом 3дОбжекта меняешь значение CgrObjectMotion на то которое должно быть у этого 3дОбжекта

ты говоришь создавать каналы куда грузить изначально, а если я не знаю сколько объектов заранее?

я не очень понял что ты тут спрашивал, но если ты о том что для каждого объекта нужно создавать отдельную ченелгруппу, то это не проблема, им надо просто давать разные имена, по имени цгр файла например


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 11 Ноября 2010, 14:12:08
А можно как то на реальном примере показать как динамически создавать каналы? Теорию я понял с практикой туговато.


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: DimiS от 11 Ноября 2010, 17:10:50
какие каналы? чёто я тебя опять не очень понимаю


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: fanil от 11 Ноября 2010, 17:20:58
объекты=каналы. в моем понимании) ChannelCaller/ при мпорте в цене появляется объект не сохраненный типа. вот я про это и говорю


Название: Re: LUA Динамическая подгрузка 1000 разных объектов
Отправлено: DimiS от 12 Ноября 2010, 12:34:52
Описываешь ОО класс, у которого есть поле 3DObjectData (наверняка и какие то другие поля на твоё усмотрение), создаёшь какой то OO Class Instances List, в котором будешь хранить экземпляры этого класа, юзаешь OO InterfaceCommand -> Add new class to container, получаешь при этом Result Index, с помощью этого индекса и ченела OO Instance Ref Item From Container можешь обращаться к только что созданному экземпляру класса(и его полям  ;) )

думаю это то о чём ты спрашивал?