Registriert seit: 5. Okt 2013
19 Beiträge
|
AW: Problem bei SetLength()
19. Aug 2015, 16:23
Der Code ist an sich eigentlich relativ simple, es wird nur eine Datei eingelesen:
Wie schon gesagt, lade ich eine Datei, funktioniert der Code ohne Probleme, lade ich jedoch später eine neue (kleinere, d.h. kleinere Array-länge) Datei, gibt es den Fehler mit SetLength()
Delphi-Quellcode:
var
MTL: array of record //only editable values :)
Name: String;
MatClass: array[0..3] of word;
Diffuse, Ambient, Specular, Reflect2: TColor;
XDiffuse, XSpecular, Specular2: TColor;
TexName:String;
Transparency:Byte;
SpecProbs, Fresnel: array[0..2] of word;
FallOff: array[0..1] of word; end;
procedure LoadMTL(a:String);
var f:Textfile;
s:String;
i:Integer;
begin
SetLength(MTL, TRXHead.Materials); {Fehler beim zweiten Laden}
AssignFile(f,a);
Reset(f);
ReadLn(f,s); //ColSetInf
for i:=0 to TRXHead.Materials-1 do begin
ReadLn(f,s); //Empty line
ReadLn(f,s); MTL[i].Name:=s;
ReadLn(f,s); Delete(s,1,9); MTL[i].MatClass[0]:=StrToInt(s[1]+s[2]); MTL[i].MatClass[1]:=StrToInt(s[4]+s[5]); MTL[i].MatClass[2]:=StrToInt(s[7]+s[8]); MTL[i].MatClass[3]:=StrToInt(s[10]+s[11]);
ReadLn(f,s); MTL[i].Diffuse:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].Ambient:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].Specular:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].Reflect2:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].Specular2:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].XDiffuse:=ReadColorFromLine(s);
ReadLn(f,s); MTL[i].XSpecular:=ReadColorFromLine(s);
ReadLn(f,s); SetLength(s, Length(s)-1); Delete(s, 1, 10); MTL[i].TexName:=s;
ReadLn(f,s); //Tex2
ReadLn(f,s); //Tex3
ReadLn(f,s); //TexFlags
ReadLn(f,s); //TexOffset
ReadLn(f,s); //TexScale
ReadLn(f,s); //TexAngle
ReadLn(f,s); Delete(s,1,6); MTL[i].Transparency:=StrToInt(s);
ReadLn(f,s); Delete(s,1,10); MTL[i].SpecProbs[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].SpecProbs[1]:=StrToInt(s[5]+s[6]+s[7]);MTL[i].SpecProbs[2]:=StrToInt(s[9]+s[10]+s[11]);
ReadLn(f,s); Delete(s,1,8); MTL[i].Fresnel[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].Fresnel[1]:=StrToInt(s[5]+s[6]+s[7]);MTL[i].Fresnel[2]:=StrToInt(s[9]+s[10]+s[11]);
ReadLn(f,s); Delete(s,1,8); MTL[i].FallOff[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].FallOff[1]:=StrToInt(s[5]+s[6]+s[7]);
end;
CloseFile(f);
end;
Geändert von the3dcloser (19. Aug 2015 um 16:25 Uhr)
|