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

Aktuelle Zeit: Sa Jul 05, 2025 15:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: objekt bewegen
BeitragVerfasst: Do Jan 09, 2003 15:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
also, ich würde gern ein objekt(quader zum testen) verschieben...und zwar dorthin wo ein mausklick erfolgte... wie kann ich das in einem opengl fenster realisieren?

dank schön

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 17:27 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
da gibt es unterschiedliche ansätze - kommt drauf an was du haben willst, wenn es sich um eine zur Kamera facende Szene Handeln(HUD, GUI, etc.), ist es wohl das Simpelste diese simplen Umrechnungen per Hand vorzunehmen - lebst du allerdings in einer 3D Welt, so hilft dir vielleicht gluUnProject. Also beschreib erstmal, was du machen willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 17:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
gar kein problem:

ich habe mir einen weltraumhintergrund erstellt(eine textur auf einem rechteck)... nun möchte ich gerne ein objekt darauf hinundherschieben...2D is das ganze :)

dank schön

PS. wie passe ich das recht dem fenster sprich, sprich wie stretche ich es?

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 18:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
ich habe mir einen weltraumhintergrund erstellt(eine textur auf einem rechteck)... nun möchte ich gerne ein objekt darauf hinundherschieben...2D is das ganze :)

dank schön

Das ist dann ja wohl ganz einfaches Umrechnen der Mauskoordinaten auf die entsprechende Auflösung, und sollte wohl keine Probleme machen!

Zitat:
PS. wie passe ich das recht dem fenster sprich, sprich wie stretche ich es?

Am besten wechselst du in den Orhtomodus.Dann kannst du dein Rechteck wie üblich zeichnen, und als Koordinaten die im Orhto-Modus gesetzten Bildschirmbreite und -höhe nehmen.
Die von dir im Ortho-Modus gesetzte Bildschirmbreite bzw. -höhe bleibt unabhängig von der Auflösung erhalten, du brauchst dir also keine Gedanken um verschiedene Auflösungen zu machen.
Ausserdem wird in diesem Modus (wie der Name schon sagt) nicht perspektivisch verzerrt, was für die 2D-Darstellung ja sehr wichtig ist!

Hier mal der Quellcode zu obigem Text :

Code:
  1.  
  2.  
  3. glMatrixMode(GL_PROJECTION);
  4.  
  5. glPushMatrix;
  6.  
  7. glLoadIdentity;
  8.  
  9. glOrtho(0, 800, 600, 0, -1, 1);
  10.  
  11. glMatrixMode(GL_MODELVIEW);
  12.  
  13. glLoadIdentity;
  14.  
  15. // Jetzt kommt dein Hintergrund
  16.  
  17. glBindTexture(...)
  18.  
  19. glBegin(GL_QUADS);
  20.  
  21.  &nbsp;glTexCoord2f(0,0); glVertex2f(0,0);
  22.  
  23.  &nbsp;glTexCoord2f(1,0); glVertex2f(800,0);
  24.  
  25.  &nbsp;glTexCoord2f(1,1); glVertex2f(800,600);
  26.  
  27.  &nbsp;glTexCoord2f(0,1); glVertex2f(0,600);
  28.  
  29. glEnd;
  30.  
  31.  

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
wie ermittle ich denn meine aktuelle auflösung in opengl? bzw die formel zur umrechnung der koordinaten ist mir nich wirklich bekannt :(

vielleicht so?

x:= mousepos.x / screen.width
y:= mousepos.y / screen.height

howi

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 19:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich glaube, das wäre die falsche Methode...
ich würde an ein Translatef der Mousekoordinaten denken.
Ungefähr so (nicht exakt gleich probieren):
Code:
  1.  
  2.  
  3. OnCreate:
  4.  
  5. ...
  6.  
  7.  &nbsp;ShowCursor(False);
  8.  
  9.  &nbsp;MousePos := 0,0;
  10.  
  11. ...
  12.  
  13.  
  14.  
  15. OnMove:
  16.  
  17. ...
  18.  
  19.  &nbsp;x := MousePos.X;
  20.  
  21.  &nbsp;y := Mouse.Pos.Y;
  22.  
  23.  &nbsp;MousePos := 0,0;
  24.  
  25. ...
  26.  
  27.  
  28.  
  29. OnDraw:
  30.  
  31. ...
  32.  
  33.  &nbsp;DrawOther;
  34.  
  35. ...
  36.  
  37.  &nbsp;glPushMatrix;
  38.  
  39.  &nbsp; glTranslatef(x,y,0);
  40.  
  41.  &nbsp; DrawObj;
  42.  
  43.  &nbsp;glPopMatrix;
  44.  
  45. ...
  46.  
  47.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 19:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
mousepos wäre dann durch das mousepos.x für mich als pointer in kombination mit getcursorpos() oder seh ich das falsch? wenn das so ist dann geht das mousepos:=0,0 geht dann schlecht...

schöner wärs natürlich auch wenn sich das objekt nicht mit der bewegung der maus sondern auf klick bewegt :)

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
@Bewegung:Sorry, habe dich missverstanden.
@Mouse: Klar, du musst es halt ersetzten
@Klick:Dann im OnClick des Forms (oder Panels) die Cursorposition an glTranslatef übergeben. Schätze das was du wolltest war ClientWidth und ClientHeight der Form (oder Panels).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
also:
Code:
  1. procedure TMainForm.ApplicationEventsIdle(Sender: TObject;
  2.  
  3.  &nbsp;var Done: Boolean);
  4.  
  5.  
  6.  
  7. var
  8.  
  9.  &nbsp;Error : LongInt; //Fehler?
  10.  
  11.  
  12.  
  13. begin
  14.  
  15.  &nbsp;//Abbrechen, wenn OpenGL noch nicht initialisiert ist
  16.  
  17.  &nbsp;if not OpenGLInitialized then Exit;
  18.  
  19.  &nbsp;//Immer schön neu zeichnen
  20.  
  21.  &nbsp;Done := False;
  22.  
  23.  &nbsp;glClearColor(0,0,0,0);
  24.  
  25.  &nbsp;glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  26.  
  27.  &nbsp;glOrtho(0, 800, 600, 0, -1, 1);
  28.  
  29.  &nbsp;glLoadIdentity;
  30.  
  31.  
  32.  
  33.  &nbsp; //code:
  34.  
  35.  
  36.  
  37.  &nbsp;gltranslatef(0,0,-10);
  38.  
  39.  &nbsp;gltranslatef(x,y,0);
  40.  
  41.  &nbsp;glbegin(gl_quads);
  42.  
  43.  &nbsp; gltexcoord2f(0,0);glvertex3f(-2,-2,0);
  44.  
  45.  &nbsp; gltexcoord2f(0,1);glvertex3f(-2,2,0);
  46.  
  47.  &nbsp; gltexcoord2f(1,1);glvertex3f(2,2,0);
  48.  
  49.  &nbsp; gltexcoord2f(1,0);glvertex3f(2,-2,0);
  50.  
  51.  &nbsp;glend();
  52.  
  53.  
  54.  
  55.  &nbsp;//Error Handler
  56.  
  57.  &nbsp;Error := glgetError;
  58.  
  59.  &nbsp;if Error <> GL_NO_ERROR then
  60.  
  61.  &nbsp;begin
  62.  
  63.  &nbsp; &nbsp;Caption := gluErrorString(Error);
  64.  
  65.  &nbsp; &nbsp;//Rendering kurz anhalten
  66.  
  67.  &nbsp; &nbsp;Done := True;
  68.  
  69.  &nbsp; &nbsp;FlashWindow(Handle, True)
  70.  
  71.  &nbsp;end;
  72.  
  73.  &nbsp;//Frame Counter
  74.  
  75.  &nbsp;Inc(Frames);
  76.  
  77.  &nbsp;if GetTickCount - StartTick >=500 then
  78.  
  79.  &nbsp;begin
  80.  
  81.  &nbsp; &nbsp;Caption := Format('%s [%f FPS]', [AppTitle, Frames/(GetTickCount - StartTick)*1000]);
  82.  
  83.  &nbsp; &nbsp;Frames := 0;
  84.  
  85.  &nbsp; &nbsp;StartTick := GetTickCount
  86.  
  87.  &nbsp;end;
  88.  
  89.  &nbsp;//Und anzeigen
  90.  
  91.  &nbsp;SwapBuffers(Canvas.Handle)
  92.  
  93. end; (*ApplicationEventsIdle*)


und
Code:
  1. procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  2.  
  3.  &nbsp;Shift: TShiftState; X, Y: Integer);
  4.  
  5.  var cursorpos:tpoint;
  6.  
  7. begin
  8.  
  9. getcursorpos(cursorpos);
  10.  
  11. x:=cursorpos.x;
  12.  
  13. y:=cursorpos.Y;
  14.  
  15. end;


sieht eigentlich simpel aus, klappt aber nich [/code]

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Wieso KeyDown? OnMouseDown! Schließlich willste du ja die Maus, nicht die Tastatur! :wink:
Und so wie ich das sehe, werden die Koords nur richtig übertragen, wenn du im Orthomode bist, was hoffentlich der Fall ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
habs editiert....stimmts so mitn ortho?

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
habs editiert....stimmts so mitn ortho?

Nein...den Orhto-Modus setzt man in der Projektionsmatrix (ich hab doch oben den Quellcode dazu gepostet).
Danach musst du dann wieder in die Modelansichtsmatrix wechseln um deine Objekte zu zeichnen!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 20:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
Code:
  1. procedure TMainForm.ApplicationEventsIdle(Sender: TObject;
  2.  
  3.  &nbsp;var Done: Boolean);
  4.  
  5.  
  6.  
  7. var
  8.  
  9.  &nbsp;Error : LongInt; //Fehler?
  10.  
  11.  
  12.  
  13. begin
  14.  
  15.  &nbsp;//Abbrechen, wenn OpenGL noch nicht initialisiert ist
  16.  
  17.  &nbsp;if not OpenGLInitialized then Exit;
  18.  
  19.  &nbsp;//Immer schön neu zeichnen
  20.  
  21.  &nbsp;Done := False;
  22.  
  23.  &nbsp;glClearColor(0,0,0,0);
  24.  
  25.  &nbsp;glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  26.  
  27.  
  28.  
  29.  &nbsp;glMatrixMode(GL_PROJECTION);
  30.  
  31.  &nbsp;glPushMatrix;
  32.  
  33.  &nbsp;glLoadIdentity;
  34.  
  35.  &nbsp;glOrtho(0, 800, 600, 0, -1, 1);
  36.  
  37.  &nbsp;glpopmatrix;
  38.  
  39.  &nbsp;glMatrixMode(GL_MODELVIEW);
  40.  
  41.  
  42.  
  43.  &nbsp;glLoadIdentity;
  44.  
  45.  
  46.  
  47.  &nbsp; //code:
  48.  
  49.  
  50.  
  51.  &nbsp;gltranslatef(0,0,-10);
  52.  
  53.  &nbsp;gltranslatef(x,y,0);
  54.  
  55.  &nbsp;glbegin(gl_quads);
  56.  
  57.  &nbsp; gltexcoord2f(0,0);glvertex2f(0,0);
  58.  
  59.  &nbsp; gltexcoord2f(0,1);glvertex2f(800,0);
  60.  
  61.  &nbsp; gltexcoord2f(1,1);glvertex2f(800,600);
  62.  
  63.  &nbsp; gltexcoord2f(1,0);glvertex2f(0,600);
  64.  
  65.  &nbsp;glend();
  66.  
  67.  


is doch genauso wie du sagst :) aber da zeichnet er nischtmehr jetzt :(

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 21:19 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Nimm mal für die Porjektion:
Code:
  1.  
  2.  
  3. gluOrtho2d(0,800,0,600);
  4.  
  5.  


danach entferne die glTranslates aus der modelmatrix

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 09, 2003 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Code:
  1.  
  2.  
  3.  &nbsp;gltranslatef(0,0,-10);
  4.  
  5.  &nbsp;gltranslatef(x,y,0);
  6.  
  7.  &nbsp;glbegin(gl_quads);
  8.  
  9.  &nbsp; gltexcoord2f(0,0);glvertex2f(0,0);
  10.  
  11.  &nbsp; gltexcoord2f(0,1);glvertex2f(800,0);
  12.  
  13.  &nbsp; gltexcoord2f(1,1);glvertex2f(800,600);
  14.  
  15.  &nbsp; gltexcoord2f(1,0);glvertex2f(0,600);
  16.  
  17.  &nbsp;glend();
  18.  
  19.  


Lass da mal die glTranslatef-Zeilen weg...dein Orthomodus "geht" auf der Z-Achse doch nur von -1 is 1 (hast du ja selbst in glOrtho so definiert -> siehe Redbook!).
Deshalb wird nichts mehr sichtbar sein, wenn du dein Objekt mit nem Z-Wert von -10 zeichnest...ausserdem ist dein Quad so gross wie die Orthoansicht, deshalb brauchste dass doch nicht mehr mit dem zweiten glTranslatef zu verschieben!

_________________
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  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]