Динамическое создание элементов массива(обьектов)? 3Д-движок

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Plastic
Сообщения: 16
Зарегистрирован: 06 дек 2005, 10:41
Контактная информация:

Добрый день. Ситуация следующая: я пишу графический 3д движок,
у меня есть класс CEngine, и есть класс CXObject массив которых должен быть внутри CEngine.
class CEngine{
CXObject *XObject;
...
}
XObject[] должен быть динамическим массивом.
И есть необходимость добовлять и убирать элементы массива(XObject) по ходу программы. Тоесть должна быть функция для добавления обьектов

CEngine.AddXObject {
??????
}
-что надо написать в процедуре???
я уже что только не пробовал... :(

З.Ы. Массив XObject[] служит для загружаемых из файлов 3Д моделей.
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Рекомендую ознакомиться с STL. Там есть класс vector. Ты можешь сделать что-то типа

Код: Выделить всё

std :: vector <XObject *> a;

XObject *obj = new XObject....
a.push_back( obj );
а потом как к массиву обращаешься
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Plastic
Сообщения: 16
Зарегистрирован: 06 дек 2005, 10:41
Контактная информация:

Спасибо, я попробую.. :)
Только DeeJayC, ты помоему перепутал название типа (CXObject) и массива (XObject)... ну да ладно, разберусь. :)
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Вообще-то, кто работал с 3D-графикой, знает, что объекты организуются в определённой иерархии, поэтому правильнее было бы использовать не вектор, а бинарное дерево.
Plastic
Сообщения: 16
Зарегистрирован: 06 дек 2005, 10:41
Контактная информация:

to WINMAIN: Не подскажешь, как?? :)
Plastic
Сообщения: 16
Зарегистрирован: 06 дек 2005, 10:41
Контактная информация:

DeeJayC: Сделал приблизно как ты написал:

// CEngine - класс движка, в котором содержатся модели
// CXObject - сложный класс, описывающий считанную из файла модель
// XObject - массив этих моделей

// file CEngine.h
CEngine{
...
std :: vector <CXObject *> XObject;
...
}

// file CEngine.cpp
CEngine::AddXObject(char*xfname){

CXObject Obj_temp = new CXObject;

Obj_temp->Load(xfname);

XObject.push_back(Obj_temp);

}

// file Game.cpp
CEngine Engine;

CGame::Loop(){

Engine.Camera.SetPosition(0.0f, 0.0f, 2.0f);

Engine.AddXObject("test.x");

Engine.XObject[0]->SetPosition(0.0f, 5.0f, 0.0f);
}

Все вроде работает, спасибо!! :)
Но смущает одна мелочь: доступ к функциям остальных обьектов в сцене (той же камеры) идет через ".", а доступ к функциям XObject-ов идет через "->"...
Как-то нелогично :) и некрасиво...
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Ну, это уже... дело гламурности :) Гламурность исходного кода - у нас есть топик - флейм, наверное....
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Ответить