Autor Beitrag
MariaMaria
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 12.07.05 21:35 
Hallo Leute!

Ich habe ein Problem: Habe in OpenGl eine 3D-Ansicht einer Karte für ein Spiel entwickelt, möchte aber gerne Wissen, welcher Koordinate auf dem Spielfeld es entspricht wenn ich auf dem Bildschirm an eine bestimmte Position klicke.

Meine Karte sieht folgendermaßen aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type TGameMap = class
       public
       Field : array[-1..MAXMAPSIZEX,-1..MAXMAPSIZEY] of record
           Height: Smallint;
         end;
       MapSizeX, MapSizeY : Byte;
       Camera : record
           x,y,z : single;
           xa,ya,za : single;
         end;
     end;


Field.Height speichert die Höhen jedes Eckpunktes
MapSizeX/Y Ist die aktuelle Größe der Karte
Camera speichert die aktuelle Kameraposition (x,y,z) und den Blickwinkel auf das Spielfeld (xa,ya,za)

Wie kann ich bei einem Mausklick ermitteln wo auf dem Spielfeld geklickt wurde?

ich benutze folgende Perspektive:

ausblenden Delphi-Quelltext
1:
gluPerspective(60, ClientWidth/ClientHeight, 0.01, 512);					


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Phobeus
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1280

Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
BeitragVerfasst: Mi 13.07.05 08:48 
Ich werfe Dir einfach mal ganz faul zwei URLs an den Kopf ;)
1. www.delphigl.com/scr...lection&action=2 Tutorial für Selections
2. wiki.delphigl.com/index.php/GluUnProject gluUnProject zum umwandeln von Fenster in Mauskoordinaten

_________________
"Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."
MariaMaria Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 15.07.05 22:41 
user profile iconPhobeus hat folgendes geschrieben:
Ich werfe Dir einfach mal ganz faul zwei URLs an den Kopf ;)
1. www.delphigl.com/scr...lection&action=2 Tutorial für Selections
2. wiki.delphigl.com/index.php/GluUnProject gluUnProject zum umwandeln von Fenster in Mauskoordinaten


Leider funktioniert das ganze nicht wie es sollte... was mach ich falsch?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TMainForm.Render;
var MouseZ : GLDouble;
    modelMatrix, projMatrix : tglmatrixd4;
    viewport : tglvectori4;
begin
glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  glViewPort(0, 0, ClientWidth, ClientHeight);
  gluPerspective(60, ClientWidth/ClientHeight, 0.01, 512);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  Map.DrawMap; // Eine procedur die die szene verschiebt, dreht und rendert...
  glReadPixels(MouseX, ClientHeight-MouseY,1,1,GL_DEPTH_COMPONENT, GL_DOUBLE,@MouseZ);
  glGetDoublev(GL_MODELVIEW_MATRIX,@modelMatrix);
  glGetDoublev(GL_PROJECTION_MATRIX,@projMatrix);
  glGetIntegerv(GL_VIEWPORT,@viewport);
  gluUnProject(MouseX,ClientHeight-MouseY,MouseZ,modelMatrix,projMatrix,Viewport,posx,posy,posz)
// Anschließend Funktion zum Mauszeiger Rendern...


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.