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

Aktuelle Zeit: Fr Jul 11, 2025 21:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 53 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Selection
BeitragVerfasst: Mo Mär 08, 2004 10:00 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Kaum ist das andere Problem gelöst schon kommt ein neues :)
Der Code funktioniert NICHT von den Tutorial "Selection". Habe alles gemacht was da stand. Wenn ich jetzt Z.b. Alles andere 0 benenne. Dann so ein Schalter 1. Dann frage ich ab nach 1 wenn 1 ist dann kommt ein Meldungsfenster. Wenn ich auf den Schalter klicke gehts. Aber auch wenn ich irgendwo anders drauf klicke egal wo, kommt manchmal die Meldung.

Woran könnte das liegen? Mache ich beim zeichnen was falsch also beim setzen der Namen. Z.b. habe folgenden Code zum zeichnen:

Code:
  1.  
  2.   ...........
  3.   glpushmatrix;
  4.   glBindTexture(GL_TEXTURE_2D,texture[0]);
  5.   glLoadName(0);
  6.   glBegin(GL_QUADS);
  7.   glTexCoord(0,0); glVertex3f(4.0,-1.0,8.0);
  8.   glTexCoord(0,3); glVertex3f(4.0,-1.0,-8.0);
  9.   glTexCoord(3,3); glVertex3f(-4.0,-1.0,-8.0);
  10.   glTexCoord(3,0); glVertex3f(-4.0,-1.0,8.0);
  11.  
  12.   glTexCoord(0,0); glVertex3f(7.0,-1.0,-4.0);
  13.   glTexCoord(0,1); glVertex3f(7.0,-1.0,-7.0);
  14.   glTexCoord(1,1); glVertex3f(4.0,-1.0,-7.0);
  15.   glTexCoord(1,0); glVertex3f(4.0,-1.0,-4.0);
  16.  
  17.   glTexCoord(0,0); glVertex3f(15.0,-1.0,-4.0);
  18.   glTexCoord(0,3); glVertex3f(15.0,-1.0,-12.0);
  19.   glTexCoord(3,3); glVertex3f(7.0,-1.0,-12.0);
  20.   glTexCoord(3,0); glVertex3f(7.0,-1.0,-4.0);
  21.   glEnd;
  22.   glpopmatrix;
  23.  .........
  24.   glpushmatrix;
  25.   glLoadName(1);
  26.   glBegin(GL_QUADS);  
  27.   glvertex3f(3.85,0,0);
  28.   glvertex3f(3.85,0,-0.1);
  29.   glvertex3f(3.84,0.1,-0.1);
  30.   glvertex3f(3.84,0.1,0);
  31.   glEnd;
  32.   glpopmatrix;
  33.  


Natürlich rufe ich noch Vorher die ganzen sachen auf wie z.b. glinitnames; glpushnames(0); und so.

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 11:18 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Hmm .. so schwer zu sagen ... ich sehe zumindest bislang keine Gravierenden Fehler in deinem Code (wenn, den bin ich wohl blind) ...
kannste mir evtl. den ganzen Source per E-Mail oder so senden? Ich würd mir den gerne näher ansehen ...
(Wenn per Mail, denn bitte als zip-datei ... habe n Hotmail-Account und bei dem ist das immer so ne sache wegen vielen Einzelfiles....)

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 11:39 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Klar, brauche dann aber deine eMail Addy. Unter Profil steht keine da gibt es nur ein Button :)

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 11:45 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Oh .. aber na klar:
dcw_mr_t@hotmail.com

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 12:08 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Okay, eMail ist weg. Ich hoffe du findest den Fehler :)

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Du machst dir das Leben ja einfach ;) ...
Einfach versenden und richtig zurückbekommen ^^
Bei mir geht diese verdammte Selektion immer noch net :-/
Geht das nur im Orthomodus? nee oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:03 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Ok, ich hab die Lösung...
Bei mir lief die Selection am Anfang gar nicht ... nach ein bissel gewurschtel durch deinen (etwas chaotischen) Basecode ist mir den aber auf gefallen, dass du diesen Quelltext hier

Code:
  1.  
  2. glClearColor(0,0,0,0);  // Alles wieder schön Schwarz ausmalen.
  3. glMatrixMode(GL_MODELVIEW); //Matrix wecheln
  4. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Buffer freigeben
  5. glLoadIdentity;
  6.  


in deine Onidle-Prozedur verlegt hast ... da gehört der code aber nicht hin, weil er beim Selektieren nicht ausgeführt wird. Also habe ich diesen Ausgeschnitten und an den Anfang deiner gldraw-Prozedur gesetzt und schwup gings tadellos....

PS: Ich würde nochmal an der Steuerung arbeiten ... ist noch etwas ruckartig (zumindest bei mir...)

@~->GEF<-~ Adler: ne, mit dem ortho hat das alles nichts zu tun ... wenn du willst, kann ich mir deinen Source auch mal angucken ... Ferndiagnosen liebe ich nicht so ....

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ich versuchs nochmal so ...
Wenns alles nichts hilft, dann vllt. ;)
Denn es ist schon ein ziemlich großes spiel... :-D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:23 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
DCW_Mr_T hat geschrieben:
Ok, ich hab die Lösung...
Bei mir lief die Selection am Anfang gar nicht ... nach ein bissel gewurschtel durch deinen (etwas chaotischen) Basecode ist mir den aber auf gefallen, dass du diesen Quelltext hier

Code:
  1.  
  2. glClearColor(0,0,0,0);  // Alles wieder schön Schwarz ausmalen.
  3. glMatrixMode(GL_MODELVIEW); //Matrix wecheln
  4. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Buffer freigeben
  5. glLoadIdentity;
  6.  


in deine Onidle-Prozedur verlegt hast ... da gehört der code aber nicht hin, weil er beim Selektieren nicht ausgeführt wird. Also habe ich diesen Ausgeschnitten und an den Anfang deiner gldraw-Prozedur gesetzt und schwup gings tadellos....

PS: Ich würde nochmal an der Steuerung arbeiten ... ist noch etwas ruckartig (zumindest bei mir...)

@~->GEF<-~ Adler: ne, mit dem ortho hat das alles nichts zu tun ... wenn du willst, kann ich mir deinen Source auch mal angucken ... Ferndiagnosen liebe ich nicht so ....


Danke. Hm...naja habe ka wie ich die Steuerung ändern kann. Bin Anfängr :D aber ich kann es ja mal versuchen...

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:26 
Offline
DGL Member

Registriert: Fr Mär 05, 2004 19:15
Beiträge: 118
Wohnort: Lemgo
Hm...das funzt aber trozdem nicht. Wenn ich auf den Schalter klicke passiert nichts :( ich bekomme immer nur 0 zurück. also wenn ich das 2 mal glloadname aufrufe nimt er das irgendwie nicht nur das erste...

_________________
irc.euirc.net _> #delphi-hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Bei mir kommt ja auch immer nur null raus ^^
Hab das bei MouseMove (also das xs und ys setzen...) Dann manl ausgegeben, egal wo ich rum mache mit meiner maus, kommt null raus ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 13:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie wäre es denn, wenn du die Quellen mal an dein Post hängst? Dann haben alle was davon. Mehrere Augen sehen mehr als 2 oder 4.

@Adler: Mal ein Paar Sachen wonach du evtl schauen solltest.
1. bei der Selektion NIE von der Perspektive in den Orthomodus (oder umgekehrt) wechseln. Also zur Ausgabe von FPS etc. Das zerstört die Selektion irgendwie.
2. Und mal Überprüfen ob vor der Selektion genau die selben Werte für glPerspektiv o. glOrtho gesetzt werden wie als wenn man das Fenster in der Größe ändern würde. Es kann ja auch sein, dass du in eine total andere Ecke schaust.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 14:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh, hab bissl rumgewerkelt aber es hilft mir net :-/
Ich geb euch mal den Code zum Menü zeichnen, vllt. hilfts :-/

Code:
  1. UNIT game_menu; //---
  2.  
  3. INTERFACE //---
  4. USES opengl12, textures, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ExtCtrls, math, ComCtrls, font; //---
  6. TYPE //---
  7.   Tmenuf = class(TObject)
  8.     PROCEDURE Draw_Button(x,y,width: single; text:string; nummer:integer);
  9.     PROCEDURE ini_button();
  10.     PROCEDURE render;
  11.     FUNCTION Selection: integer;
  12.   end;
  13. VAR //---
  14.   Puffer       : array[0..256] of TGLUInt;
  15.   Viewport     : TVector4i;
  16.   Treffer,i    : Integer;
  17.   Z_Wert       : TGLUInt;
  18.   Getroffen    : TGLUInt;
  19. Menuf: Tmenuf;
  20. xs, ys: single;
  21. Schrift: TTexFont;
  22.   spielen : integer;
  23.   beenden : integer;
  24. CONST //---
  25.   //stern   : 3;
  26.   namen   : array[-1..3] of string = ('nichts', '', 'das Dreieck', 'Beenden', 'den Stern');
  27. IMPLEMENTATION //---
  28. USES template_main;
  29. PROCEDURE Tmenuf.ini_button();
  30. BEGIN
  31.   spielen := 1;
  32.   beenden := 2;
  33. glinitnames;
  34. glpushname(0);
  35. END;
  36.  
  37. PROCEDURE Tmenuf.Draw_Button(x,y,width: single; text: string; nummer:integer);
  38. BEGIN
  39. glloadname(nummer);
  40.         GLBegin(GL_QUADS);
  41.   glColor3f(0.0, 0.0, 0.0);
  42.       glVertex3f(-3.6+x+width,2.7-y,0.1);
  43.       glVertex3f(-3.6+x+width,2.5-y,0.1);
  44.       glVertex3f(-3.6+x,2.5-y,0.1);
  45.       glVertex3f(-3.6+x,2.7-y,0.1);
  46.   glColor3f(0.0, 0.0, 0.0);
  47.       glVertex3f(-3.6+x+width,2.5-y,0);
  48.       glVertex3f(-3.6+x+width,2.5-y,0.1);
  49.       glVertex3f(-3.6+x,2.5-y,0.1);
  50.       glVertex3f(-3.6+x,2.5-y,0);
  51.  
  52.       glVertex3f(-3.6+x+width,2.7-y,0);
  53.       glVertex3f(-3.6+x+width,2.5-y,0);
  54.       glVertex3f(-3.6+x+width,2.5-y,0.1);
  55.       glVertex3f(-3.6+x+width,2.7-y,0.1);
  56.     GLEnd();
  57. glenable(GL_TEXTURE_2D);
  58.   schrift.Print2D(text, [-3.65+x,2.6-y,0], [1.0, 0.2, 0.0], 0.5, 0.01);
  59. END;
  60.  
  61. PROCEDURE Tmenuf.render;
  62. begin
  63.   glMatrixMode(GL_MODELVIEW);
  64. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farb und Tiefenpuffer löschen
  65. glLoadIdentity;
  66. gldisable(GL_CULL_FACE);
  67. glColor3f(1, 1, 1);
  68. gltranslatef(0,0,-5);
  69.   glBindTexture(GL_TEXTURE_2D, textur.boden);
  70.   glenable(GL_TEXTURE_2D);
  71.     GLBegin(GL_QUADS);
  72.       glTexCoord2f(0,1);  glVertex3f(-6,-2,-2);
  73.       glTexCoord2f(0,0);  glVertex3f(-6,-2,0);
  74.       glTexCoord2f(1,0);  glVertex3f( 7,-2,-1);
  75.       glTexCoord2f(1,1);  glVertex3f( 7,-2,-3);
  76.     GLEnd();
  77.   gldisable(GL_TEXTURE_2D);
  78.   glColor4f(0.8, 0.5, 0,0.8);
  79.     GLBegin(GL_TRIANGLES);
  80.       glVertex3f(4,3,0);
  81.       glVertex3f(4,2,0);
  82.       glVertex3f(-4,2,0);
  83.       glVertex3f(4,3,0);
  84.       glVertex3f(-4,3,0);
  85.       glVertex3f(-4,2,0);
  86.     GLEnd();
  87.   glEnable(GL_Blend);
  88.   glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  89.     GLBegin(GL_TRIANGLES);
  90.       glVertex3f(3.5,1.6,0);
  91.       glVertex3f(3.5,-1.6,0);
  92.       glVertex3f(-3.5,-1.6,0);
  93.       glVertex3f(3.5,1.6,0);
  94.       glVertex3f(-3.5,1.6,0);
  95.       glVertex3f(-3.5,-1.6,0);
  96.     GLEnd();
  97.   gldisable(GL_Blend);
  98.     GLBegin(GL_TRIANGLES);
  99.       glVertex3f(4,-3,0);
  100.       glVertex3f(4,-2,0);
  101.       glVertex3f(-4,-2,0);
  102.       glVertex3f(4,-3,0);
  103.       glVertex3f(-4,-3,0);
  104.       glVertex3f(-4,-2,0);
  105.     GLEnd();
  106.   glpopmatrix();
  107.   glpushmatrix();
  108.   menuf.ini_button;
  109.   //if drueber.button_start then
  110. if selected_obj = 1 then
  111.   gltranslatef(0,0,-0.07);
  112.   menuf.Draw_Button(0,0,0.6,'Spielen', game_menu.spielen);
  113.   glpopmatrix();
  114.   glpushmatrix();
  115.   if drueber.button_close then
  116.   gltranslatef(0,0,-0.07);
  117.   menuf.Draw_Button(0,0.3,0.6,'Beenden', game_menu.beenden);
  118.   glEnable(GL_CULL_FACE);
  119. END;
  120.  
  121. FUNCTION Tmenuf.Selection: integer;
  122. VAR
  123. i: integer;
  124. BEGIN
  125.   glGetIntegerv(GL_VIEWPORT, @viewport);      //Die Sicht speichern
  126.   glSelectBuffer(256, @Puffer);               //Den Puffer zuordnen
  127.   glRenderMode(GL_SELECT);                    //In den Selectionsmodus schalten
  128.   glmatrixmode(gl_projection);                //In den Projektionsmodus
  129.   glPushMatrix;                               //Um unsere Matrix zu sichern
  130.   glLoadIdentity;                             //Und dieselbige wieder zurückzusetzen
  131.   gluPickMatrix(xs, viewport[3]-ys, 1.0, 1.0, viewport);
  132.   gluPerspective(45.0, demoform.width/demoform.Height, 1, 100);
  133.   render; // Hier dann die Render Procedure
  134.   glmatrixmode(gl_projection);                //Wieder in den Projektionsmodus
  135.   glPopMatrix;                                //um unsere alte Matrix wiederherzustellen
  136.   treffer := glRenderMode(GL_RENDER);         //Anzahl der Treffer auslesen
  137.   Getroffen := High(TGLUInt);                  //Höchsten möglichen Wert annehmen
  138.   Z_Wert := High(TGLUInt);                     //Höchsten Z - Wert
  139.   for i := 0 to Treffer-1 do
  140.     if Puffer[(i*4)+1] < Z_Wert then
  141.     begin
  142.       getroffen := Puffer[(i*4)+3];
  143.       Z_Wert := Puffer[(i*4)+1];
  144.     end;
  145.   Result := getroffen;
  146. END;
  147.  
  148. end.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ist das der ganze Rendercode? Hast du mal geschaut, ob der Code überhaupt ohne Fehler ist? Also ob glError einen Fehler liefert?
So wie es für mich aussieht hast du ein Stackproblem. Ich kann dir nicht sagen, ob das auch mit deinem Selektion Problem zusammen hängt. Aber in dem Render machst du als aller erste Matrixoperation ein glPopMatrix.
Das ist nur ne vermutung, da ich den Rest nicht kenne. Vielleicht solltest du aber nach dem glLoadIdentity ein glPushMatrix machen. Dann bleibt sie dir erhalten und wir nicht von dem glPopMatrix zurück gesetzt. Aber wie gesagt ich kann das momentan schlecht abschätzen, da ich nur das Stück sehe. Auf jeden Fall solltest du mal glError abfragen.

Und noch was am Rande. Das ist jetzt nicht böse gemeint. Aber schau dir bitte mal dringenst etwas über Objekt Orientiertem Programmieren an. Es ist ja Lobenswert, dass du da ein Objekt verwendest aber wenn der Rest alles globale Variablen sind macht es überhaupt keinen Sinn.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 08, 2004 15:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
1. Wenn ich da ein glpushmatrix(); hinmache, dann zeigt er nur schwarz an.

2. Das ist nur ein Menü und erleichtert mich das erstellen neuer Buttons...
Geschwindigkeit ist mir da net wichtig oder warum noch sollte ich das nicht
machen?

Mh :-/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 53 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 0 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.012s | 16 Queries | GZIP : On ]