Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Also ich habs mir jetzt angeschaut...
Wie SoS schon angemerkt hat, musst du unsere Tipps schon einbauen:
Also so:
- Alle gluPerspective auf gleichen Inhalt bringen
(empfehle zum testen: gluPerspective(90, 800/600, 1, 100);)
- Vor dem Rendern in der Selection-Prozedur noch glMatrixMode(gl_MODELVIEW); aufrufen
Dann müsste es eigentlich gehen, testweise solltest du erstmal nur ein einfaches Quad rendern, um zu sehen, ob da deine Selection schon anschlägt:
Code:
procedure TSchach.Render;
begin
//Render Anweisungen
glLoadname(1);
gltranslatef(0,0,-6);
glBegin(GL_QUADS);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(1,1,0);
glVertex3f(0,1,0);
glend();
//glLoadIdentity;
//gltranslatef(0, 0,-25);
//glrotatef(rotX, 1,0,0);
//glrotatef(rotY, 0,1,0);
//CreateFeld;
//RenderModels;
SwapBuffers(DC);
end;
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
So ich wechsel nun vor dem Rendern in die ModelView Matrix, und die Selection Funktioniert, allerdings nur wenn ich von oben auf das Schachbrett schaue und nicht um die Y Achse rotiert wurde, sonst funktioniert es nur abundzu, bzw. wenn ich schräg von oben auf das Schachbrett schau funktioniert es gar nicht!
Nein, ich verschiebe und drehe auch wenn ich für selection render!
Edit:// Nein bei dem Quad schlägt die Selection bei mir nicht an!
Edit2:// Es funktioniert ... zumindest größten teils (warscheinlich zufrüh in die ModelView Matrix gewechselt) d.h manchmal wird die falsche Schachfigur angewählt und abundzu auch mal wird gar nichts abgewert obwohl selection nicht -1 zurückliefert!
So, irgendwie will Delphi nicht das Selektieren was ich will Entweder es liegt daran das die Nummern falsch gesetzt werden, oder er selektiert falsch
Hier werden die Nummern gesetzt
Code:
y :=0;
glinitnames;
glpushname(0);
//Schachbrett zeichnen
for i :=1to8do
begin
for x :=1to8do
begin
inc(y);
glloadname(y);
if Gerade((i+x))then
begin
glPushMatrix;
gltranslatef(x-9,0, i-9);
glBindTexture(GL_TEXTURE_2D, texDunkel);
glBegin(gl_Quads);
gltexcoord2f(1,0);
glvertex3f(x-1,-1, i+1);
gltexcoord2f(0,0);
glvertex3f(x+1,-1, i+1);
gltexcoord2f(0,1);
glvertex3f(x+1,-1, i-1);
gltexcoord2f(1,1);
glvertex3f(x-1,-1, i-1);
glEnd;
glPopMatrix;
end;
ifnot(Gerade((i+x)))then
begin
glPushMatrix;
gltranslatef(x-9,0, i-9);
glBindTexture(GL_TEXTURE_2D, texHell);
glBegin(gl_Quads);
gltexcoord2f(0,0);
glvertex3f(x-1,-1, i+1);
gltexcoord2f(0,1);
glvertex3f(x+1,-1, i+1);
gltexcoord2f(1,1);
glvertex3f(x+1,-1, i-1);
gltexcoord2f(1,0);
glvertex3f(x-1,-1, i-1);
glEnd;
glPopMatrix;
end;
end;
end;
-----> Eventuell liegt auch der Fehler in der Selektions Funktion ... siehe dazu Seite 1 , Post 1 des Threads.
Hier wird die Selection ausgewertet [im MouseDown Ereignis]
SelectedFeld als Integer definiert, darin wird der Rückgabewert der Selection FUnktion gespeichert
Feld: array[1..8,1..8] of integer , darin wird gespeichert wo welches Model steht
Dieses ganze div 8, mod 8 +1, +7 wird benutz um den Rückgabewert der Selection Funktion in X,Y Wert des Feldes umzurechnen.
Code:
SelectedFeld := Selection;
SelectedFeld := SelectedFeld+7;
if Feld[SelectedFeld div8,(SelectedModel mod <!-- s8)--><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8)-->+1] > 0then
SelectedModel := SelectedFeld
else
begin
if SelectedModel > 0then
ModelMove(SelectedFeld div8,(SelectedFeld mod <!-- s8)--><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8)-->+1, SelectedModel div8,(SelectedModel mod <!-- s8)--><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8)-->+1);
end;
Das muss irgendwo ein Fehler sein, doch ich find in nicht
MFG
RealTec
Zuletzt geändert von RealTec am So Dez 12, 2004 19:47, insgesamt 1-mal geändert.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Schonmal selbst versucht die Selektion zu debuggen? Geht recht einfach : Du wechselst nicht in den Selektionsmodus, zoomst nicht 1x1 Pixel, sonder z.B. 10x10 Pixel, wechselst am Ende der Selektion die Puffer und legst dann ne Pause ein (z.B. bis ne Taste gedrückt wird). So siehst du direkt ob bei der Selektion auch das dargestellt wird was dargestellt werden soll.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ja, nach dem Rendern die Puffer tauschen und dann pausieren, dann sieht man in etwa den Ausschnitt der für die Selektion genutzt wird und kann zumindest sagen ob an die richtige Stelle selektiert wird. Übrigens muss man beim Rendern auch die gleichen zNear und zFar-Werte nutzen, die sind bei der Selektion nämlich 1/100, was für größere Szenen etwas gering klingt.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.