Jump to content

[DELPHI]Mapa


k_argo

Recommended Posts

A wiec pisze sobie programik, danymi wejsciowymi jest lista graczy zapisana w tablicy (X, Y, Name) i szukam najbardziej optymalnego sposobu wyswietlenia mapki na ktorej zostana wyswietlone pozycje tych graczy, cos pod ten styl:

 

Obrazek

 

Aha, dodam ze wspolrzedne beda sie zmieniac w kazdej sekundzie, a graczy czasami bedzie ponad 100 wiec canvas mi odpada z taka czestotliwoscia odswiezania.

Link to comment
Share on other sites

No wiec zaczalem przygode w OpenGL, jestem zielony w tym jeszcze:D Ale poszukalem troche info na ten temat i chcialbym sobie zrobic rotacje kamery, mam taka procedure:

 

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 XRot, YRot : Integer;
begin
 if MBL then begin
   XRot := 1;
   YRot := 1;
   glMatrixMode(GL_PROJECTION);
   if LX > X then XRot := -1;
   if LY > Y then YRot := -1;
   glRotatef(Y*0.01, YRot, 0, 0);
   glRotatef(X*0.01, 0, XRot, 0);
   glMatrixMode(GL_MODELVIEW);
   LX := X;
   LY := Y;
 end;
end;

 

Wszystko ladnie pieknie kiedy np przesuwam myszke tylko po osi Y lub X, ale jak zaczynam mieszac to na poczatku jest ok, ale kilka ruchow myszka i sie rypie, nie dziala tak jak powinno:/

Link to comment
Share on other sites

Dzieki, dziala:)

 

 if MBL then begin
   if ClickY < Y then
     if LY > Y then begin
       if K2>0 then k2 := k2-1;
     end else
       if K2<90 then k2 := k2+1;

   if ClickY > Y then
     if LY < Y then begin
       if K2<90 then k2 := k2+1;
     end else
       if K2>0 then k2 := k2-1;

   if ClickX > X then
     if LX < X then
       k := k+1 else k := k-1;

   if ClickX < X then
     if LX > X then
       k := k-1 else k := k+1;

   LX := X;
   LY := Y;
 end;łĘWŚ~r8śŚźvZ)^ąŚ(ą1Ą
ĄQIĄ,=
ĄQIĄ,A`MĄQIĄ,=ŹMĄQIĄ,=
ĄQIĄ,AhA`Ah(

Link to comment
Share on other sites

Mam troche inny problem, mianowicie wspolrzedne w 3 wymiarach na podstawie wspolrzednych kursora. Widzialem tu podobny temat tyle ze na Directx, a nie OpenGL. Znalazlem na necie takowa funkcje :

 

 function GetOGLPos(X, Y: Integer): T3D_Point;
var
       viewport:   array [1..4]  of Integer;
       modelview:  array [1..16] of Double;
       projection: array [1..16] of Double;
       winZ: Single;
begin
       glGetDoublev( GL_MODELVIEW_MATRIX, @modelview );
       glGetDoublev( GL_PROJECTION_MATRIX, @projection );
       glGetIntegerv( GL_VIEWPORT, @viewport );

       // In Delphi A Y Value Of 0 Returns An Unknown Value
       // I Discovered This While I Was Testing A Crosshair
       if( Y = 0 )then Y := 1;

       glReadPixels(   X, -Y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @winZ );
       gluUnProject(   X, viewport[4]-Y, winZ,
                       @modelview, @projection, @viewport,
                       Result[1], Result[2], Result[3]);
end;

 

Tyle ze nie zwraca mi prawidlowych wspolrzednych. Jesli ktos ma chwilke czasu to tu jest zrodlo: Program

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...