Страница 1 из 1

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

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

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

З.Ы. Массив XObject[] служит для загружаемых из файлов 3Д моделей.

Добавлено: 06 дек 2005, 11:45
DeeJayC
Рекомендую ознакомиться с STL. Там есть класс vector. Ты можешь сделать что-то типа

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

std :: vector <XObject *> a;

XObject *obj = new XObject....
a.push_back( obj );
а потом как к массиву обращаешься

Добавлено: 06 дек 2005, 11:53
Plastic
Спасибо, я попробую.. :)
Только DeeJayC, ты помоему перепутал название типа (CXObject) и массива (XObject)... ну да ладно, разберусь. :)

Добавлено: 07 дек 2005, 00:03
WinMain
Вообще-то, кто работал с 3D-графикой, знает, что объекты организуются в определённой иерархии, поэтому правильнее было бы использовать не вектор, а бинарное дерево.

Добавлено: 07 дек 2005, 09:25
Plastic
to WINMAIN: Не подскажешь, как?? :)

Добавлено: 07 дек 2005, 09:43
Plastic
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-ов идет через "->"...
Как-то нелогично :) и некрасиво...

Добавлено: 07 дек 2005, 13:41
DeeJayC
Ну, это уже... дело гламурности :) Гламурность исходного кода - у нас есть топик - флейм, наверное....