- procedure DrawModel(ModelID: Integer);
- var
- n, i: integer;
- k: integer;
- usedtexture: integer;
- begin
- k := High(Models[ModelID]);
- usedtexture := Models[ModelID, 0].TextureID;
- n := 0;
- glEnable(GL_TEXTURE_2D);
- Textur[Models[ModelID, 0].TextureID].Bind;
- glBegin(GL_QUADS);
- For n := 0 to k do
- begin
- if usedtexture <> Models[ModelID, n].TextureID then
- begin
- glEnd;
- Textur[Models[ModelID, n].TextureID].Bind;
- usedtexture := Models[ModelID, n].TextureID;
- glBegin(GL_QUADS);
- end;
- glTexCoord2f(VertPos[n mod 4, 0], Vertpos[n mod 4, 1]);
- glVertex3f(Models[ModelID, n].x, Models[ModelID, n].y, Models[ModelID, n].z);
- end;
- glEnd;
- end;
- procedure CreateModel(filename: string; ModelID: Integer);
- var
- ModelData: TStringList;
- n, k: integer;
- texID: integer;
- s: string;
- checksum: integer;
- begin
- Modeldata := TStringList.Create;
- n := 0;
- ModelData.LoadFromFile(filename);
- texID := 0;
- checksum := 0;
- For k := 0 to ModelData.Count - 1 do
- if Pos('.', ModelData.Strings[k]) <> 0 then
- checksum := checksum + 1;
- SetLength(Models[ModelID], checksum);
- k := 0;
- while lowercase(ModelData.Strings[n]) <> 'eof' do
- begin
- s := ModelData.Strings[n];
- if (Pos('[', s) <> 0) or (Pos(',', s) <> 0) or (Pos('E', s) <> 0) or (Pos('e', s) <> 0) then
- begin
- if (Pos('[', s) > 0) and (Pos(']', s) > 0) then
- texID := StrToInt(copy(s, 2, Pos(']', s) - Pos('[', s) - 1))
- else
- begin
- models[ModelID, k].TextureID := texID;
- models[ModelID, k].x := StrToFloat(copy(s, 1, Pos('.', s) - 1));
- Delete(s, 1, Pos('.', s));
- models[ModelID, k].y := StrToFloat(copy(s, 1, Pos('.', s) - 1));
- Delete(s, 1, Pos('.', s));
- models[ModelID, k].z := StrToFloat(copy(s, 1, length(s)));
- k := k + 1;
- end;
- end;
- n := n + 1
- end;
- end;