JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=7717e84a695066cf642e968c4924c395Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Hilfe bei Bildungsvorschrift

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 19.06.2004, 23:09    Titel: Hilfe bei Bildungsvorschrift Antworten mit Zitat

Hallo, ich brauche mal hilfe bei einer Bildungsvorschrift (Mathematik), um mir spezielle Vertex- und Indexbuffer generieren zu können.
Der resultierende Vertexbuffer ist technisch gesehen ein Plane, also ein Quadrat mit x*x Vertices, wobei je 2 Werte eines Vertices der X bzw. der Y-Wert des Indexes sind:
Code:
+---+---+---+
|0/0|1/0|2/0|
+---+---+---+
|0/1|1/1|2/1|
+---+---+---+
|0/2|1/2|2/2|
+---+---+---+
Die dritte koordinate wird aus einer Datei gelesen, ist hier also unwichtig.
Wichtig für mich ist die Reihnfolge der Speicherung der Vertices im eindimensionalen Vertexbuffer und die generierung des daraus resultierenden Indexbuffers. Die Matrix zeigt jetzt in 3 Schritten den Füllverlauf des Vertexbuffers. Ich suche also einen Algorithmus, der mir die X und Y-Werte der Matrix generiert:
Code:
   0  1  2  3  4
 +--+--+--+--+--+
0| 0|  |  |  | 1|
 +--+--+--+--+--+
1|  |  |  |  |  |
 +--+--+--+--+--+
2|  |  |  |  |  |
 +--+--+--+--+--+
3|  |  |  |  |  |
 +--+--+--+--+--+
4| 2|  |  |  | 3|
 +--+--+--+--+--+

Code:
   0  1  2  3  4
 +--+--+--+--+--+
0|  |  | 4|  |  |
 +--+--+--+--+--+
1|  |  |  |  |  |
 +--+--+--+--+--+
2| 5|  | 6|  | 7|
 +--+--+--+--+--+
3|  |  |  |  |  |
 +--+--+--+--+--+
4|  |  | 8|  |  |
 +--+--+--+--+--+

Code:
   0  1  2  3  4
 +--+--+--+--+--+
0|  | 9|  |10|  |
 +--+--+--+--+--+
1|11|12|13|14|15|
 +--+--+--+--+--+
2|  |16|  |17|  |
 +--+--+--+--+--+
3|18|19|20|21|22|
 +--+--+--+--+--+
4|  |23|  |24|  |
 +--+--+--+--+--+
Zusammen also:
Code:
   0  1  2  3  4
 +--+--+--+--+--+
0| 0| 9| 4|10| 1|
 +--+--+--+--+--+
1|11|12|13|14|15|
 +--+--+--+--+--+
2| 5|16| 6|17| 7|
 +--+--+--+--+--+
3|18|19|20|21|22|
 +--+--+--+--+--+
4| 2|23| 8|24| 3|
 +--+--+--+--+--+
Und der Algorithmus soll mir in folgender Reihnfolge liefern:
Code:

0/0, 4/0, 0/4, 4/4, 2/0, 0/2, 2/2, 4/2, 2/4, 1/0, 3/0, 0/1, ...
Als wär das ganze jetzt noch nicht genug, möchte ich jetzt noch den Indexbuffer generieren, für je 2 Dreiecke der Form
Code:
+-+
|\|
+-+
Also hintereinander sollte der Algorithmus folgende Werte liefern:
Code:
 0, 3, 2,  0, 1, 3,
 0, 6, 5,  0, 4, 6,  4, 7, 6,  4, 1, 7,  5, 8, 2,  5, 6, 8,  6, 3, 8,  6, 7, 3,
 0,12,11,  0, 9,12,  9,13,12,  9, 4,13,  4,14,13,  4,10,14, 10,15,14, 10, 1,15, ...

Der erste Algorithmus müsste also im Prinzip jeweils 2 Zahlen erzeugen (je eine X und eine Y Koordinate pro Iterationsschritt) und der zweite Algo müsste die oben genannte Zahlenfolge erzeugen - nur, dass die Gesamtmatrix 17x17 Felder Gross ist... (oder jede andere quadratische Matrix x*x mit x=2*n+1 für 1<n<255)
Ich grüble an dem ersten der beiden Teilprobleme schon ca. eine Woche, ohne eine vernünftige Lösung zu finden, an das zweite Problem habe ich noch überhaupt nicht gedacht - wobei das zweite Problem direkt aus dem ersten ableitbar ist, wenn man sich eine Matrix der oberen Form für jedes n generieren kann...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 20.06.2004, 12:44    Titel: Antworten mit Zitat

Also, ich habe es geschafft, den ersten Teil meines Problemes zu lösen...

Code:

// c#-Funktion

  private static void Generate(int[,] Feld) {
    int n=Feld.GetUpperBound(0);
    for(int y=0; y<=n; y++) {
      for(int x=0; x<=n; x++) {
        Feld[x, y]=-1;
      }
    }
    int i=0;
    while(n>=1) {
      int x=0;
      int y=0;
      while(y<=Feld.GetUpperBound(0)) {
        while(x<=Feld.GetUpperBound(0)) {
          if(Feld[x, y]==-1)
            Feld[x, y]=i++;
          x+=n;
        }
        x=0;
        y+=n;
      }
      n/=2;
    }
  }

Diese Funktion erzeugt für ein übergebenes Feld[x, y] mit x und y =2*n+1 für n zwischen 1 und 255 den Inhalt des Feldes so, wie ich es oben haben wollte...
Mit diesem Feld kann ich jetzt die Werte auslesen und auch den Indexpuffer erzeugen...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum