Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: partikelsystem => EAccessViolation
BeitragVerfasst: Mo Aug 09, 2004 00:37 
Offline
DGL Member

Registriert: Fr Jul 02, 2004 14:26
Beiträge: 32
Code:
  1. unit partikel;
  2.  
  3. interface
  4. uses opengl,glaux,windows;
  5.  
  6. var
  7.  timerfrequency,timetemp:int64;
  8.  quad: gluint;
  9.  emitcooldown:integer;
  10. type vector = record
  11.  x: single;
  12.  y: single;
  13.  z: single;
  14. end;
  15.  
  16. type color = record
  17.  r: single;
  18.  g: single;
  19.  b: single;
  20. end;
  21.  
  22. type particle = record
  23.  position: vector;
  24.  richtung: vector;
  25.  farbe: color;
  26.  alpha: single;
  27.  life: single;
  28.  fade: single;
  29.  groesse: single;
  30.  dichte: single;
  31.  gewicht: single;
  32. end;
  33.  
  34. type gravitationspunkt = record
  35.  position: vector;
  36.  g: single;
  37. end;
  38.  
  39. type emitter = class(TObject)
  40.  private
  41.   glist: array of gravitationspunkt;
  42.  public
  43.   aktiv: boolean;
  44.   emissionspan: array[0..1] of integer;
  45.   fadespan: array[0..1] of single;
  46.   colorspan: array[0..1] of color;
  47.   skalierung: vector;
  48.   position: vector;
  49.   richtung: vector;
  50.   streuung: vector;
  51.   frequenz: real;
  52.   textur: gluint;
  53.   partikel: array of particle;
  54.   constructor Create(active:boolean; espanstart: integer; espanend: integer; fadespstart: single; fadespend: single
  55.                    ; cspanstart: color; cspanend: color; pos: vector; head: vector; streu: vector; scale: vector; freq: single; tex:gluint);
  56.   procedure AddG(Punkt: gravitationspunkt);
  57.   procedure DelG(Punkt: integer);
  58.   procedure DoIt(timefactor:real);
  59. end;
  60. procedure initparticles;
  61. procedure emit(emi:emitter;timefactor:real);
  62. procedure partbewegen(emi:emitter;timefactor:real);
  63. PROCEDURE glBindTexture(target: GLenum; texture: GLuint);  STDCALL; EXTERNAL opengl32;
  64. implementation
  65.  
  66. constructor emitter.Create(active:boolean; espanstart: integer; espanend: integer; fadespstart: single; fadespend: single
  67.                       ; cspanstart: color; cspanend: color; pos: vector; head: vector; streu: vector; scale: vector; freq: single; tex:gluint);
  68. begin
  69.  inherited create;
  70.  aktiv:=active;              //<==hier zeigt delphi hin nach der fehlermeldung!!
  71.  emissionspan[0]:=espanstart;
  72.  emissionspan[1]:=espanend;
  73.  fadespan[0]:=fadespstart;
  74.  fadespan[1]:=fadespend;
  75.  colorspan[0]:=cspanstart;
  76.  colorspan[1]:=cspanend;
  77.  position:=pos;
  78.  richtung:=head;
  79.  streuung:=streu;
  80.  frequenz:=freq;
  81.  skalierung:=scale;
  82.  textur:=tex;
  83. end;
  84.  
  85. {...}
  86.  
  87. end.
  88.  


Sorry für den undokumentierten code, aber ich glaub man kann ihn noch einigermaßen verstehen.
Hiermit initialisiere ich:
Code:
  1. initparticles;
  2.   party.Create(TRUE, 1,10,0.1,0.1,color2,color1,vec1,vec2,vec3,vec4,1000,tex[8]);


und das steht in meiner zeichenmethode:
Code:
  1. party.DoIt(timefactor);


party ist ein objekt der klasse emitter

und sobald ich es starte kommt EAccessViolation

ich nehme an es liegt an der deklaration der klasse, kenne mich mit den dingern nicht so aus...
weiss einer was man da machen könnte??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 09, 2004 02:40 
Offline
DGL Member

Registriert: Fr Jul 02, 2004 14:26
Beiträge: 32
ok, ich hab den code jetzt ein bissl verändert:
der wichtigste fehler war in der zeile
Code:
  1. party.Create(TRUE, 1,10,0.1,0.1,color2,color1,vec1,vec2,vec3,vec4,1000,tex[8]);

das hab ich jetzt geändert in
Code:
  1. party:=emitter.Create;

und entsprechend auch die prozeduren so dass ich nichts als parameter übergeben muss
desweiteren folgt
Code:
  1. with party do
  2.    begin
  3.     aktiv:=true;
  4.     emissionspan[0]:=1;
  5.     emissionspan[1]:=10;
  6.     fadespan[0]:=0.1;
  7.     fadespan[1]:=0.1;
  8.     colorspan[0]:=color2;
  9.     colorspan[1]:=color1;
  10.     skalierung:=vec4;
  11.     position:=vec1;
  12.     richtung:=vec2;
  13.     streuung:=vec3;
  14.     frequenz:=1000;
  15.     textur:=tex[8];
  16.    end;


und da kommt ein EAccessViolate, aber ein anderer.
das problem ist, dass das objekt nicht im speicher ist und somit die variablen aus dem WITH teil garnicht existieren, aber warum nciht, ich hab das objekt "create"ed
:?: :?: :?: :?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 09, 2004 03:05 
Offline
DGL Member

Registriert: Fr Jul 02, 2004 14:26
Beiträge: 32
ok, ich hab noch einen fehler gefunden und korrigiert, der sich in der emit prozedur befand, er hat einfach auf die variable partikel[-1] zugegriffen, nun hab ich aber einen rangeerror...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 09, 2004 08:44 
Offline
DGL Member

Registriert: Fr Jul 02, 2004 14:26
Beiträge: 32
nun hab ich noch eine frage: wie stelle ich das an dass meine partikel meine blickrichtung zum lot haben, wie in diesem prog hier : http://www.delphigl.com/forum/viewtopic.php?t=1515&highlight=glgetfloatv

es hat wohl was mit dem holen der modelmatrix zu tun, aber wie stelle ich das an?? hab hier alles mögliche gelesen und komm net drauf :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 09, 2004 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ein Partikelsystem realisiert man über Billboards, die immer Bildschirm ausgerichtet sind, also immer nur von vorne sichtbar sind. Die muss man dann entgegengesetzt der Szenenrotation rotieren, dazu muss man aber nicht unbedingt die Modelansichtsmatrix zurückholen :

Code:
  1. // Szene normal rotieren und verschieben
  2. glRotatef(X, 1,0,0);
  3. glRotatef(Y, 0,1,0);
  4. glTranslatef(...);
  5. Scene.Render;
  6. ...
  7. // Partikel ausgerichtet rendern
  8. glTranslatef(Particle.Position...);
  9. glRotatef(Y, 0,-1,0);
  10. glRotatef(X, -1,0,0);
  11. Particle.Render;

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]