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

Aktuelle Zeit: Sa Jul 05, 2025 17:09

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Steuerung via Mausbewegung
BeitragVerfasst: Sa Jun 20, 2009 16:48 
Offline
DGL Member

Registriert: Sa Jun 20, 2009 16:05
Beiträge: 4
Wohnort: Cottbus
Hi,

Ich arbeite noch nicht lange mit OpenGl bin aber schon davon begeistert. Ich habe angfangen ein 3D Pin Pong zu schreiben was auch ganz gut funktioniert. Ich scheitere nur daran mein "Schläger" an dem der Ball abbrallen soll mit der Maus zu bewegen. Ich möchte das sich mein Schläger immer an der Position von meiner Maus befindet. Dazu hab ich wollte ich das OnMousemove Ereignis nutzen und die Mauspostion, welche in Pixeln angegeben wird, in die Koordinaten von meiner "Openglwelt" umrechnen. dazu habe ich mir die Funktion gluUnProject herausgesucht und wollte sie verwenden. leide gibt es immer Zugriffsverletzungen, wenn ich diese Aufrufe. Daher wollte ich fragen woran es liegt könnte bzw. ob es vll eine besser geeignete Möglichkeit zum bewegen meines Schlägers gibt.
Hier zu nöchst meine Quellcode:
Code:
  1.  
  2. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  3.   Y: Integer);
  4. var
  5.   viewport  : TViewPortarray;
  6.   modelview : T16dArray;
  7.   projection: T16dArray;
  8.   xo,yo,zo: PGLdouble;
  9.   Y_new: real;
  10. begin
  11.   glGetDoublev(GL_MODELVIEW_MATRIX, @modelview );
  12.   glGetDoublev(GL_PROJECTION_MATRIX, @projection );
  13.   glGetIntegerv(GL_VIEWPORT, @viewport );
  14.   gluUnProject(X,Y,5,modelview,projection,viewport,xo,yo,zo);
  15.  
  16. end;
  17.  


So verbleibe ich in der Hoffnung das ihr mir helfen könnt.
Schon mal danke im voraus.

MfG
lalex


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 20, 2009 17:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Wird daran liegen, dass xo,yo,zo: PGLdouble; zwar Pointer sind, aber ungültig sind. Mann muss einfach ganz normale doubles deklarieren und die dann mit @ ansprechen.
Abgesehen davon nimmst du als Z-Wert immer 5 an, was (ich kenne dein Programm nicht) zu Fehlern führen kann. Schaue dir einfach mal den Beitrag im Wiki an, da ist auch ein Beispiel dabei.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 21, 2009 13:24 
Offline
DGL Member

Registriert: Sa Jun 20, 2009 16:05
Beiträge: 4
Wohnort: Cottbus
Ja danke das mit dem @ funtktioniert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 21, 2009 17:04 
Offline
DGL Member

Registriert: Sa Jun 20, 2009 16:05
Beiträge: 4
Wohnort: Cottbus
Ich habe jetzt ein weiteres Problem. Die Berechnung des Z-Wertes erfolgt grundsätzlich positiv. Ich möchte meinen Schläger auf der Z-Position -8 in X- und Y-Richtung bewegen können. Gezeichnet wird allerdings auf +7...

Code:
  1.  
  2. procedure Schlaegerzeichnen(s_x,s_y,s_z,a:real);
  3. var
  4.   viewport  : TViewPortarray;
  5.   modelview : T16dArray;
  6.   projection: T16dArray;
  7.   xo,yo,zo,Z: double;
  8.   Y_new: integer;
  9. begin
  10.   glGetDoublev(GL_MODELVIEW_MATRIX, @modelview ); //Aktuelle Modelview Matrix in einer Variable ablegen
  11.   glGetDoublev(GL_PROJECTION_MATRIX, @projection ); //Aktuelle Projection[s] Matrix in einer Variable ablegen
  12.   glGetIntegerv(GL_VIEWPORT, @viewport ); // Aktuellen Viewport in einer Variable ablegen
  13.   Y_new := viewport[3] - Round(s_y); // In OpenGL steigt Y von unten (0) nach oben
  14.  
  15.   // Auslesen des Tiefenpuffers an der Position (X/Y_new)
  16.   glReadPixels(Round(s_x), Y_new,0, 0, GL_DEPTH_COMPONENT, GL_FLOAT, @Z );
  17.   glu.gluUnProject(Round(s_x),Y_new,Z,modelview,projection,viewport,@xo,@yo,@zo);
  18.  
  19.   glpushmatrix;
  20.     glColor4f(0.5,0.1, 0,a );
  21.     glTranslatef(xo,yo,zo);
  22.     glBegin(GL_QUADS);
  23.       glVertex3f(0.3,0.3, 0);
  24.       glVertex3f(0.3, -0.3, 0);
  25.       glVertex3f(-0.3, -0.3, 0);
  26.       glVertex3f(-0.3,0.3, 0);
  27.     glEnd();
  28.   glpopmatrix;
  29. end;
  30.  


danke schonmal


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]