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

Aktuelle Zeit: Mo Jul 07, 2025 13:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fehler bei GLtranslate
BeitragVerfasst: Mo Okt 08, 2007 21:18 
Offline
DGL Member

Registriert: Di Sep 19, 2006 13:24
Beiträge: 173
Hi,

ich habe nen Fehler der mir total spanisch vorkommt aber eigentlich recht simpel sein müsste..

Ich habe als ersten Befehl in der Renderroutine einfach alles verschoben um quasi über die Karte zu scrollen aber irgendwie verschiebt sich nur das erste 6eck von dem ganzem Feld. Manchmal (wenn ich schnell drücke oder so) verschiebt sich der Rest ein Stück mit.

Ich verwende die routine die Sasha im Hexagon Tutorial geschrieben hat:

Render:
Code:
  1.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  2.   glMatrixMode(GL_PROJECTION);
  3.   glLoadIdentity;
  4.   gluPerspective(45, ClientWidth/ClientHeight, NearClipping, FarClipping);
  5.   glMatrixMode(GL_MODELVIEW);
  6.   glLoadIdentity;
  7.   glTranslatef(0-pos.X,0+pos.y,-30);
  8.   glrotatef(90,1,0,0);
  9.   glEnable(GL_TEXTURE_2D);
  10.  
  11.   hexfield; // Draw the floor
  12.  
  13.   glpushmatrix;
  14.   SwapBuffers(DC);


procedure tform1.hexfield:

Code:
  1. procedure tform1.HexField;
  2. for i := 0 to 100 do
  3.    for e := 0 to 100 do
  4.       begin
  5.          glBindTexture(GL_TEXTURE_2D,Fields[i][e].TextID);
  6.          glPushMatrix;
  7.          glTranslatef(i*2*1.75 + (e and 1)*1.75, 0, e*3);
  8.          glBegin(GL_POLYGON);
  9.             glTexCoord2f(0,   -0.25);  glVertex3f(0,    0, -1);
  10.             glTexCoord2f(0.5, -0);     glVertex3f(1.75, 0,  0);
  11.             glTexCoord2f(1,   -0.25);  glVertex3f(3.5,  0, -1);
  12.             glTexCoord2f(1,   -0.75);  glVertex3f(3.5,  0, -3);
  13.             glTexCoord2f(0.5, -1);     glVertex3f(1.75, 0, -4);
  14.             glTexCoord2f(0,   -0.75);  glVertex3f(0,    0, -3);
  15.          glEnd;
  16.          glpopmatrix;


Ausserdem klappt es mit der Textur nicht wirklich, die Felder haben nur die Hauptfarbe der Textur und nicht das Muster, vielleicht liegt es dadran das ich 4eckige Texturen habe? Wie erstellt ihr 6eckige?

Gruß,
gucky


// Edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 08:28 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
1. versuch mal das erste popMatrix nicht nach, sondern vor dem Aufruf von hexfield zu machen. Ich meine mich zu erinnern, wenn man mit push/popmatrix arbeitet erstmal nen dummy pushen zu müssen.
6eckige Texturen gibbet nich, und Deine Texturkoordinaten sehen gut aus. Hast Du im Texturmodus (also glMatrixMode(GL_TEXTURE)) irgendwelche Translationen/skalierungen drin? Isses ne POT Textur? Ist die Textur vielleicht 1x1?

[edit] ich nehm alles zurück: negative Texturkoordinaten gibts nicht!!! rechne das mal auf 0..1 um[/edit]

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 09:42 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ich denk mal mit den Texturkoordinaten kann das nichts zu tun haben.

Frage ist warum du vor dem SwapBuffers (A.d.R. dass dort das Ende der Renderroutine ist) noch ein glPushMatrix machst?

Alles was auf den Stapel gelegt wird, sollte man auch wieder runternehmen. Wenn man das innerhalb eines Renderdurchlaufs nicht macht, gibt es manchmal sehr interessante Phänomene.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 09:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
ich nehm alles zurück: negative Texturkoordinaten gibts nicht!!! rechne das mal auf 0..1 um

Jain. Das kommt auf den Wrapmodus an. Bei GL_CLAMP_* werden sie aber auf 0-1 beschränkt wodurch die Aussage stimmt. Bei GL_REPEAT spielt das aber keine Rolle. Nichts destro trotz wäre es wohl besser wenn du (gucky) wie sidorin schon sagte das besser auf 0-1 anpasst. Wenn ich mich nicht vertue dann siehst du deine Textur derzeit auch Horizontal gespiegelt.

damadmax: Gucky hatte eine versteckte zweite Frage zu den Texturen. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Muss man denn immer alle Fragen auf einmal beantworten? :D

Ne ernsthaft: Hab ich überlesen. Dann macht natürlich meine Antwort, es hätte nix mit den Koordinaten zu tun, so ohne direkten Zusammenhang keinen Sinn. Das stimmt wohl.
Also mir wäre es erstmal ziemlich schnuppe "wie" es aussieht, hauptsache die Bewegung funktioniert. Und da irritiert mich das einsame glPushMatrix sehr. Ich würde mal auf nen Stackoverflow tippen der dank fehlender Fehlerbehandlung nicht bemerkt wird :)

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 14:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Sidorion hat geschrieben:
1. versuch mal das erste popMatrix nicht nach, sondern vor dem Aufruf von hexfield zu machen. Ich meine mich zu erinnern, wenn man mit push/popmatrix arbeitet erstmal nen dummy pushen zu müssen.

Nein. Das war mit glPushNames. (oder irre ich mich da jetz gewaltig?)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 14:09 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
glPushNames geht aber nur im Select Modus. Von Dummy steht da nix im Wiki. Sollte man ggf. ergänzen falls man das wirklich machen muss.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 14:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Selection-Tutorial hat geschrieben:
Die nächsten markierten Zeilen sind "glInitNames;" und "glPushName(0);" Diese beiden Zeilen Quellcode bewirken, dass zunächst mal der Name-Stack initialisiert wird und danach der "Name" "0" auf diesen Stack gelegt wird. Die Null hat eine ganz einfache Funktion: Wird nicht vor dem Laden des ersten Namens mindestens eine Zahl auf den Stack gepusht, dann endet der Versuch, einen Namen zu laden mit einem netten Error... wer's nicht glaubt, kann es ja gerne mal ausprobieren ;-)


Im glPushName-Artikel steht es aber tatsächlich nicht drin, das sollte u.U. korrigiert werden.

Njoa, auf jeden fall scheint offensichtlich bei glPushMatrix/glPopMatrix sowas nicht nötig zu sein.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 15:02 
Offline
DGL Member

Registriert: Di Sep 19, 2006 13:24
Beiträge: 173
Vielen Dank, es schlaucht mich schon ziemlich das es wegen sowas passiert ist.. wusste aber auch nicht das man alles pushes wieder poppen muss... Jetzt geht aber der erste Teil, also das Verschieben!


So und wenn ich bei den Texturen einfach immer 1 raufaddiere werden sie auch vernünftig angezeigt! Ist das vielleicht ein Fehler in diesem Tutorial ausdem ich den Code habe?
http://wiki.delphigl.com/index.php/Hexfeld


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 15:11 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Auffallend .. dort isses auch falsch. Mach doch mal ein Feedbackeintrag, und wenn Du schon dabei bist, erwähne doch bitte, dass die Nachbarberechnung nur für gerade Y so richtig ist (die Graphik mit den roten Buchstaben). Für Ungerade gilt x-1 und x als nachbarn in den drüber- und drunterliegenden Zeilen (oder andersherum, jedenfalls muss entweder +(Y Mod 2) oder +((Y+1) Mod 2) ran).

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 15 Queries | GZIP : On ]