Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Opengl need help   Найти похожие ветки 

 
Chevrt   (2005-04-30 20:26) [0]

Здравствуйте. Значит такой вопрос: у кого есть  опыт в создании двигов. Каким образом и где хранить карты?
Сейчас делаю так: есть текстовый файл  следующей структуры:

№1 Здесь хранятся координаты квадратов (это у меня стены) :)
№2 Здесь координаты текстур для вышеуказанных квадратов
№3 Для каждого квадрата путь к файлу с текстурой
№4Источники света: координаты
№5 Модели:координаты на карте

Есть масса непонятных вопросов:
1. Можно ли описывать карту так, как я ее описал или нужно иначе?
2. Что нужно учесть при этом
3. Есть модель(квейковская), есть сгенерированный ландшафт по карте высот, так вот как узнать стоит модель

на земле или же нет? Каим образом сделать, чтобы модель бегала по карте?
TVector = record
   X, Y, Z: GLfloat;
 end;
   MapArr         : array of array of TVector; - вот массив описывающий карту высот, по которму генерируется

ландшафт.


 
XProger ©   (2005-04-30 21:32) [1]

Храни карту высот...

Map : array of Byte;
...
procedure SaveMap(const FileName: string);
var
F : File of Byte;
begin
AssignFile(F, "data/maps/" + FileName);
Rewrite(F);
BlockWrite(F, Map_Width, SizeOf(Map_Width));
BlockWrite(F, Map_Height, SizeOf(Map_Height));
BlockWrite(F, Map[0], Map_Width*Map_Height);
CloseFile(F);
end;
...
procedure LoadMap(const FileName: string);
var
F : File of Byte;
begin
AssignFile(F, "data/maps/" + FileName);
Reset(F);
BlockRead(F, Map_Width, SizeOf(Map_Width));
BlockRead(F, Map_Height, SizeOf(Map_Height));
SetLength(Map, Map_Width*Map_Height);
BlockRead(F, Map[0], Map_Width*Map_Height);
CloseFile(F);
// Generate Map Mesh
end;

http://delphimaster.net/view/9-1107948342/


 
Dozer   (2005-04-30 21:36) [2]

> №3 Для каждого квадрата путь к файлу с текстурой
Лучше просто номер текстуры из уже загруженного массива текстур

>    MapArr         : array of array of TVector;
Хватило бы
 of GLFloat; - высота точки(Y)
X и Z можно расчитать в реальном времени:
for i:=0 to Length(MapArr)-2 do
 for j:=0 to Length(MapArr[i])-2 do begin
   glBegin(gl_Quads);
   glVertex3f(i,j,MapArr[j,i]);
   glVertex3f(i+1,j,MapArr[j,i+1]);
   glVertex3f(i+1,j+1,MapArr[j+1,i+1]);
   glVertex3f(i,j+1,MapArr[j+1,i]);
   glEnd;
 end;
 
Расчитать примерную высоту в ландшафте в точке(xx,yy) можно достаточно просто

x:=Round(xx);
y:=Round(yy);
h:=(MapArr[x,y]*(1-xx+x)+MapArr[x+1,y]*(xx-x))*(1-yy+y)+
  (MapArr[x,y+1]*(1-xx+x)+MapArr[x+1,y+1]*(xx-x))*(yy-y);

Если высота объекта меньше высоты ландшафта, то он на нём стоит :)

Модель бегать по карте может без учёта высоты - всегда только на ландшафте, либо с учётом высоты, тогда обрабатывается инерция и условие H(объекта)>=H(ландшафта)


 
Qwertyk ©   (2005-05-01 12:04) [3]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.053 c
11-1105381064
kliff
2005-01-10 21:17
2005.08.21
Trace into и KOL


14-1122405197
Виталька2005
2005-07-26 23:13
2005.08.21
Запрос с выборкой по дате


10-1100068864
AlexGof
2004-11-10 09:41
2005.08.21
1С как OLE не работает из Web-приложения работающего на IIS ?


1-1122649544
Fedor
2005-07-29 19:05
2005.08.21
При нажатии Alt+Tab слышен противный писк Винды


4-1119960682
Ньюб
2005-06-28 16:11
2005.08.21
как выставить разрешения на папку с файлами в ntfs