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

Aktuelle Zeit: Fr Jul 18, 2025 14:02

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Selection berechnen?
BeitragVerfasst: Mo Okt 03, 2005 10:50 
Offline
DGL Member

Registriert: Mi Jul 20, 2005 18:43
Beiträge: 30
Hallo,

Ich steh momentan vor einem Problem. In meiner Schachsimulation wird das Brett sowie die Figuren aus *.3ds Dateien geladen. Bei den Figuren funktioniert die Selection (Danke für das Selections-Tut :) ) wunderbar, dem Schachbrett kann ich jedoch nur einen Wert zuteilen. Nun möchte ich aber genau wissen auf welches Feld der Benutzer geklickt hat.

Wie würdet ihr das jetzt anstellen?
1.) Ich zeichne nochmals ein Brett (mit 64xgl_Quad) ohne Texturen unter das Schachbrett Model und gib da jedem Feld eine Nummer
2.) Sobald der Benutzer auf das Brett geklickt hat berechne ich auf welches Feld er geklickt hat (<-- Da bräuchte ich dann aber eure Hilfe)
3.) Eine andere Idee ....

MFG
Maximus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 10:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Ich zeichne bei der Selection einfach 8x8 Quads in entsprechender Größe. nenne die 1 bis 64 und entnehme daraus dann das feld...
Ich poste einfach mal den Code :D :

Code:
  1. function  TGLForm.ClickBoard(X,Y: Integer): TField;
  2. var
  3.   Puffer       : array[0..1024] of GLUInt;
  4.   Viewport     : TVector4i;
  5.   Treffer      : Integer;
  6.   Z_Wert       : GLUInt;
  7.   Getroffen    : GLUInt;
  8.   i,i2         : integer;
  9. begin
  10.   glGetIntegerv(GL_VIEWPORT, @viewport);
  11.   glSelectBuffer(256, @Puffer);
  12.   glRenderMode(GL_SELECT);
  13.   glmatrixmode(gl_projection);
  14.   glPushMatrix;
  15.   glLoadIdentity;
  16.   gluPickMatrix(X, viewport[3]-Y, 5, 5, viewport);
  17.   gluPerspective(Cam.GetFov,clientWidth/clientHeight,1,10000);
  18.   GlMatrixMode(GL_MODELVIEW);
  19.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  20.   glpushname(0);
  21.   Cam.Move;
  22.   for i := 1 to 8 do begin
  23.     for i2 := 1 to 8 do begin
  24.       glpushmatrix;
  25.         gltranslatef(-180+i*40,0,+180-i2*40);
  26.         glloadname(i+i2*8-8);
  27.         glbegin(gl_quads);
  28.           glvertex3f( 20,0, 20);
  29.           glvertex3f(-20,0, 20);
  30.           glvertex3f(-20,0,-20);
  31.           glvertex3f( 20,0,-20);
  32.         glend;
  33.       glpopmatrix;
  34.     end;
  35.   end;
  36.   glmatrixmode(gl_projection);
  37.   glPopMatrix;
  38.   treffer := glRenderMode(GL_RENDER);
  39.   Getroffen := {High(GLUInt)}0;
  40.   Z_Wert := High(GLUInt);
  41.   for i := 0 to Treffer-1 do
  42.   if Puffer[(i*4)+1] < Z_Wert then begin
  43.     getroffen       := Puffer[(i*4)+3];
  44.     Z_Wert := Puffer[(i*4)+1];
  45.   end;
  46.   if (getroffen>0) and (getroffen<=64) then begin
  47.     result[2]:=trunc((getroffen-1)/8);
  48.     result[1]:=getroffen-result[2]*8;
  49.     inc(result[2]);
  50.   end else begin
  51.     result[1]:=0;
  52.     result[2]:=0;
  53.   end;
  54. end;


EDIT: sorry, hatte nicht zuende gelesen \":-)\"
das hätte dan wohl auch gereicht, da werden die Koordinaten aus dem ergebniss (int 1-64) gerechnet:

Code:
  1.     FeldY:=trunc((getroffen-1)/8);
  2.     FeldX:=getroffen-FeldY*8;


Und so kommen sie rein:

Code:
  1.   for i := 1 to 8 do begin // XRichtung
  2.     for i2 := 1 to 8 do begin  // YRichtung
  3.         ...
  4.         glloadname(i+i2*8-8);
  5.         ...
  6.     end;
  7.   end;

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Zuletzt geändert von geo am Mo Okt 03, 2005 11:02, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 11:00 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da MAX!MUS das Brett als 3DS Datei lädt wird ihn das sicherlich net gefallen ;)
Ne Andere möglichkeit wäre es einfach beides zu mischen:

Beim normalen Rendern zeichnest du dein Brett. Wenn du für die Selection renderst, nimmst du das Brett von Geo und renderst es genau dorthin, wo das 3DS Brett wäre. Die Selektion ließt ja nur die Werte aus, die bei dem Selektiondurchgang gezeichnet werden. Deshalb könntest du beim 3DS Brett auf einen GLNamen verzichten.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 11:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
genau dass meine ich! Der gepostete code is ja nur der rendervorgang bei der selection...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 12:34 
Offline
DGL Member

Registriert: Mi Jul 20, 2005 18:43
Beiträge: 30
Genau so eine Lösung hab ich gesucht :) - Nach einigen Fehlern und langem debuggen läuft alles soweit!

Danke nocheinmal!

Dann wird es wohl bald noch eine 3D Schachsimulation geben ;) .

MFG
Maximus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 12:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Da bin ich ma gespannt, dann machen wir Wettrüsten :twisted:

:wink:

machst du auch ne KI???

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 12:55 
Offline
DGL Member

Registriert: Mi Jul 20, 2005 18:43
Beiträge: 30
geo hat geschrieben:
machst du auch ne KI???


Eine KI ist in Planung. Ich hab die Schachsimulation aus 3 Gründen angefangen.
1.) Weil ich mich sehr für die 3D Programmierung interessiere und diese anhand eines größeren Projektes lernen wollte.
2.) Weil ich mich sehr für KI/Neuronale Netze interessiere und diese anhand eines größeren Projektes lernen will.
3.) Weil wir endlich eine Schachsimulation für LAN Partys brauchen und keiner sich eine kaufen will ;)

Also werd ich in Bereich KI doch einiges Versuchen. Wir können sie ja mal gegeneinander spielen lassen wenn sie fertig sind :twisted:

MFG
Maximus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 13:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man könnte die KI der beiden Programme ja jeweils in eine DLL packen und dann in das andere Programm einbinden, so dass man dann die beiden KI's gegeneinander spielen lassen kann. Das wäre sicherlich mal eine interessante Sache.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 13:27 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Du willst die Züge Analysieren, und die KI dadurch besser werden lassen, oder inwiefern soll die KI arbeiten? oO
Da hast du dir was vorgenommen!

Über das Thema habe ich mir schon mal Ordenliche Gedanken gemacht, und nach meiner Meinung wäre es in Shootern o.ä. sogar leichter zu Realisieren wie in einer Schachsimulation!

Wenn du fertig bist würde ich mich über einen Artikel im Wiki drüber freuen! :)


#Edit:

Das gegeneinander anspielen lassen wäre interessant, allerdings würde es vermutlich so ablaufen das die KI von Maximus zum Ende die Stärkere ist!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 13:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Ich glaub nicht, dass sich eine "intelegente" Schach KI als Einstiegs Projekt für KI/Neurale Netze realisieren lässt, sonnst gebs davon schon haufenweise und ich hab noch keine einzige gesehen :-)

Aber ich bin auch nich sicher ob Maximus das meint. Ne konventionelle KI (mit alle Möglichkeiten bilden und Punkte zählen/ Bilantzen vergleichen) macht auch schon Laune und is komplex genug (finde ich)!

Aber das mit den Schootern fänd ich ma spannend (obwohl ich mir dass auch schon sehr schwierig vorstelle). Warscheinlich könnte mann Feinabstimmungen einer KI über Lerneffekte realisieren oder gegnerspezifische Daten sammeln und so Besserungen erziehlen...

Ne wirklich spannende KI fehlt doch eh allen Shooter! aber wir schfweifen vom Thema ab

EDIT: vielleicht könnte mann über Zuganalyse die Eröffnungen verbessern :idea: !!! Muss ich ma rüber nachdenken :-)

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 14:04 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Die Zuganalyse ist schwer! Du musst bei einem Ereigniss( z.b. Bauer wird geschlagen, du kannst ihn nicht schlagen ), Analysieren warum dies geschehen ist, und wie du es beim nächsten mal verhindern kannst!
Dazu musst du sämtliche Einheiten rausfiltern die keine Rolle gespielt haben! Dannach musst du jeder Einheit eine Abhängigkeit zuweissen im Bezug zum Ereigniss( Das erlaubt es den Zug mit unterschiedlichen Stellungen zu spielen, aber mit dem gleichen Inhalt )!
Jetzt musst du Wertigkeiten anlegen, dabei muss drauff geachtet werden welches Ereigniss vorher war und welches dannach, die Wertigkeiten müssen so sein, das sie Positiv( Positive Schlagbilanz ) und negativ( negative Schlagbilanz ) sein kann.

Besonderst auf die zusammenhänge zwischen vorhergehenden Zügen, und darauf folgenden Zügen müssen beachtet werden in verschiedenen Ebenen!

Man könnte die Sache noch erweitern in dem man tatsächlich jeden Zug Analysiert.
Das ganze würde auch dazu führen das die KI vermutlich auch neue Einleitungen kreieren kann, die vom normalem Spiel total abweichen!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 14:14 
Offline
DGL Member

Registriert: Mi Jul 20, 2005 18:43
Beiträge: 30
Auch wenn es hier etwas OT wird , will ich mich trotzdem nocheinmal äusern.

Ich hab mir natürlich auch schon viele Gedanken darüber gemacht an welcher Stelle und mit welcher Aufgabe ich ein KNN in eine Schachsimulation einbauen lässt.

Ich hab mir das so gedacht:
Das KNN soll versuchen den Zug des Gegners vorauszusagen (Analyse). So muss ich nicht für jeden Möglichen Zug des Gegners meinen eigenen Zug ausrechen, sondern kann ganz gezielt mich auf 1-2 mögliche Züge konzentrieren und somit viel mehr vorausberechnen und eventuell damit mir einen Vorteil verschaffen.

Wie gesagt eine reine Vorüberlegung. Dieses Prinzip wird aber warscheinlich erst ab dem 3. Spiel funktionieren und auch nur dann wenn der Gegner wieder mit einer ähnlichen Taktik spielt.

Aber vielleicht fällt mir auch noch etwas besseres zu dem Thema ein.

PS: In der DP hat negaH (Hagen) mal ein Beispiel Source für ein NN veröffentlicht was auch versucht einen Klick des Benutzers vorauszusagen. Ist aber trotz der einfachen Aufgabenstellung recht komplex (glaub an die 2000 Zeilen Code) aber im Prinzip etwas ähnliches was ich vorhab ;)

MFG
Maximus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja dieses Klick Programm habe ich auch ausprobiert und es ist schon erstaunlich, dass es bereits nach 30-40 Mal Klicken sehr zuverlässig ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 03, 2005 23:58 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Zum Thema Schach, mir fiel eben ein das es auf humus.ca ja auch mal was gab:
http://humus.ca/index.php?page=3D&ID=37

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.019s | 15 Queries | GZIP : On ]