JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

ID3DXMesh manuell erstellen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 01.12.2007, 12:34    Titel: ID3DXMesh manuell erstellen Antworten mit Zitat

Hallo !

Hier in diesem Forum gibt es doch so viele Freaks, da weiß doch bestimmt jemand wie ich mit D3DX ein mesh erstellen kann, ohne es zuvor von einer Datei mithilfe von D3DXLoadMeshFromX() zu laden. Mein Wunsch wäre ein Mesh aus einem vertexarray zu erstellen mit dem Vertexformat :
"D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE"
Das vertexarray wird vorher mit errechneten Vertexdaten gefüttert, die je nach argumente jedesmal unterschiedlich ausfallen, daher kann ich das mesh nicht von einer Datei laden.

Leider ward ich aus der msdn Hilfe auch nicht wirklich schlau. Da gibt es soviele D3DXCreateMesh...() Merhoden, dass ich keinen Plan mehr hab was da für mich das richtige ist, außerdem kann ich mit den Argumenten nie so richtig was anfangen. Zumindest weiß ich da nie wie man die Methode mit Verticies füttert.

Kann mir da jemand helfen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 01.12.2007, 17:41    Titel: Re: ID3DXMesh manuell erstellen Antworten mit Zitat

Otscho hat Folgendes geschrieben:
Hallo !

Hier in diesem Forum gibt es doch so viele Freaks

Also das nehme ich dir jetzt übel Wink

Ich weiß nicht so genau, was jetzt dein Problem ist. Wenn du das FVF für das Mesh schon gegeben hast, scheint mir D3DXCreateMeshFVF() am angebrachtesten.
Was die Argumente bedeuten steht ziemlich genau in der DirectX-Dokumentation. Ansonsten reicht es meistens, wenn du in google einfach nach der Funktion suchst, da gibts oft Treffer mit konkreten Problemen dazu und/oder Codeausschnitten.[/quote]
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 01.12.2007, 17:48    Titel: Antworten mit Zitat

Danke für denTipp. Werd mir mal die D3DXCreateMeshFVF() genauer anschauen.


PS.
Sorry falls ich dich beleidigt hab, das mit den Freaks war eigentlich im positivem Sinn gemeint Surprised
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 01.12.2007, 18:19    Titel: Antworten mit Zitat

Otscho hat Folgendes geschrieben:

PS.
Sorry falls ich dich beleidigt hab, das mit den Freaks war eigentlich im positivem Sinn gemeint Surprised

TLOP meinte das sicher auch nicht ernst Razz

TLOP hat Folgendes geschrieben:
Ansonsten reicht es meistens, wenn du in google einfach nach der Funktion suchst, da gibts oft Treffer mit konkreten Problemen dazu und/oder Codeausschnitten
Was in dem Sinne auf jeden Fall auch hilfreich hierzu ist:Google Codesearch Da findet man mit der geg. Syntax zum Beispiel sowas

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.12.2007, 18:05    Titel: Antworten mit Zitat

Auch wenn ein wahrer/ernster Kern dahinter steckt. Ich finde den Begriff "Freak" ziemlich schlecht besetzt, aber is ja nun auch egal Wink

DirectXer hat Folgendes geschrieben:
Was in dem Sinne auf jeden Fall auch hilfreich hierzu ist:Google Codesearch Da findet man mit der geg. Syntax zum Beispiel sowas

Cool, danke, das kannte ich noch gar nicht Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 02.12.2007, 18:24    Titel: Antworten mit Zitat

Ich kenn halt die zwei Bedeutungen:
1. Dass einer nur daheim im Keller vorm PC hockt nie die Sonne gesehen hat und darum ne Brille mit der Stärke 10+ trägt, weshalb er auch keine Freunde hat.
das meinte ich aber nicht sondern:
2. Jemand der wenn er sich wo hinhockt alles auf anhieb zur Perfektion beherscht, und keine Freunde hat, weil jeder der ihn sieht sprachlos vor Begeisterung wegrennt, um es seinen Kumpels zu erzählen.

Oh irgendwie ist dann jeder Typus sehr allein Sad das ist mir vorher nie so richtig klar geworden...

PS. Dieser Beitrag ist bewusst maßlos übertrieben gehalten und hat mit der Wirklichkeit wohl sehr wenig zu tun. Daher möchte ich mich bei allen, die ihn möglicherweiße anstößig finden, entschuldigen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 03.12.2007, 16:00    Titel: Antworten mit Zitat

Zurück zum Thema:

Ich hab das jetzt mal versucht wie auf den Seiten beschrieben.
Als verticies hab ich mal einfach die Eckpunkte von dem Light-Beispiel vom Buch genommen:

CPP:
BOOL CDefaultSphere::CreateSphere(float size) {
   
   FVF_FORMAT = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1;
   DWORD m_Color = 0xFFFF0000;

   int FaceCount = 1;
   int VertexCount = 3 * FaceCount;

      // Generating the vertices

   VertexTex lpVertices[] = {
      { -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFFFF0000, -1.0f, -1.0f },
      {  0.0f,  1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFF00FF00,  0.0f,  1.0f },
      {  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFF0000FF,  1.0f, -1.0f }
   };
   

      // Create the Mesh
   
   D3DXCreateMeshFVF(FaceCount, VertexCount, D3DXMESH_MANAGED, FVF_FORMAT, m_lpD3DDevice , &m_lpMesh);


      // Fill the Mesh

   BYTE* VertexBufferStart;

   m_lpMesh->LockVertexBuffer(0, reinterpret_cast<void**>(&VertexBufferStart));

   memcpy(VertexBufferStart, lpVertices, VertexCount * sizeof(VertexTex));

   m_lpMesh->UnlockVertexBuffer();

   
   return true;
}


Nur leider sehe ich dann beim rendern nix:

CPP:
void CDefaultSphere::Render() {

   m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);

    m_lpD3DDevice->SetFVF(FVF_FORMAT);


   m_lpD3DDevice->SetTransform(D3DTS_WORLD, &WorldMatrix);

   m_lpMesh->DrawSubset(0);
}


Es kommt auch zu keiner Fehlermeldung oder Absturz.
Das Dreieck ist einfach nicht zu sehen.

Bestimmt hab ich da nur irgendwo einen ganz dummen Fehler gemacht.
Kann mir vieleicht jemand sagen wo ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 03.12.2007, 16:21    Titel: Antworten mit Zitat

falsche richtung geclipp?
CPP:
device->SetRenderState( D3DRS_CULLING, D3DCULL_NONE );
oder schau mal ob wireframe klappt
CPP:
device->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
ansonsten schau mal beim Vertex Buffer, kanns sein dass du den noch irgendwie setzen musst? Oder macht das DrawSubset? Vielleicht brauchst du ein Material?

Das sind so die ersten Anläufe an denen sowas meistens hängt.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 03.12.2007, 16:28    Titel: Antworten mit Zitat

hm..
Die SetRenderState(...), die du beschrieben hast, bringen leider auch nix. Und dass man unbedingt ein Material braucht kann ich mir net so richtig vorstellen. Da bei dem Light-Beispiel auch kein Material angegeben wurde trotzdem des D3DFVF_TEX1 im FVF steht.

Hm.. irgendwie hab ich das Gefühl, dass ich beim Füllen des Meshes noch was wichtiges vergessen hab. Kann es sein dass man hier auch noch IndexBuffer übergeben muss ?
So wie ich den VertexBuffer ins Mesh reinkopiert hab ?


Ahh die
CPP:
D3DXCleanMesh(D3DXCLEAN_SIMPLIFICATION, m_lpMesh, pAdjacency1, &pMeshTemp, pAdjacency2, &pBuffer);
hat mir soeben gesagt, dass das Mesh ungültig sei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.12.2007, 17:35    Titel: Antworten mit Zitat

Otscho hat Folgendes geschrieben:
Kann es sein dass man hier auch noch IndexBuffer übergeben muss ?
So wie ich den VertexBuffer ins Mesh reinkopiert hab ?

Das hängt davon ab, wie genau du renderst.
Wenn du beispielsweise DrawIndexedPrimitive anstatt DrawPrimitive verwenden würdest, wäre ein zusätzlicher Indexbuffer tatsächlich nicht verkehrt. Wenn du den gar nicht verwendest, kann ich mir nicht vorstellen, dass das irgendeinen Einfluss hat.
Ach ich sehe gerade, du zeichnest ja das Mesh per DrawSubset() Wink
Ich weiß nicht, wie die Funktion im inneren aussieht, aber da du hier glaube ich keine Möglichkeit hast, irgendwas mit dem Indexbuffer anzugeben, könnte ich mir vorstellen, dass ein D3DXMesh standardmäßig einen Indexbuffer beinhält.

Ansonsten würde ich ein paar mehr Fehlerkontrollen einbauen. Damit kannst du oft sehr schnell potentielle Fehlerquellen ausschließen.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 03.12.2007, 17:54    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
Ach ich sehe gerade, du zeichnest ja das Mesh per DrawSubset() Wink
Ich weiß nicht, wie die Funktion im inneren aussieht, aber da du hier glaube ich keine Möglichkeit hast, irgendwas mit dem Indexbuffer anzugeben, könnte ich mir vorstellen, dass ein D3DXMesh standardmäßig einen Indexbuffer beinhält.


Naja es gäb schon die Möglichkeit etwas in den Indexbuffer zu kopieren:
ID3DXBaseMesh::LockIndexBuffer

Nur hab ich leider keine rechte Ahnung wie ein Indexbuffer aufgebaut ist und was man da rein schreiben muss Crying or Very sad

Was mir ebenfalls schleierhaft ist, ist wie die Vertex structur aussehen muss damit das mesh was damit anfangen kann. Ich hab mal einfach die Struktur vom Christian genommen:

CPP:
typedef struct _VertexTex{
   FLOAT x, y, z;    // die untransformierte Position des Vertex
    FLOAT nx, ny, nz; // die Normale
    DWORD color;      // die Farbe des Vertex
    FLOAT tu, tv;     // Texturkoordinaten
} VertexTex;


Ist die eventuell für das mesh ungeeignet ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 04.12.2007, 14:07    Titel: Antworten mit Zitat

Otscho hat Folgendes geschrieben:
Naja es gäb schon die Möglichkeit etwas in den Indexbuffer zu kopieren:
ID3DXBaseMesh::LockIndexBuffer

Das meinte ich ja.
Es gibt eben beim Zeichnen soweit ich weiß keine Option ohne Indexbuffer, weswegen wohl eine Angabe/Befüllung des Indexbuffers Plficht ist.

Was drinsteht, müsstest du eigentlich auch im JLI-Buch finden. Da steht übrigens auch zu den D3DXMeshes, dass sie idR. einen Indexbuffer haben Wink
Der Indexbuffer enthält schlichtweg die Indizes der Vertices.
Für deinen Fall mit dem Dreieck dürfte 0,1,2 genügen (ich weiß im Moment nicht sicher, ob die Indizierung mit 0 anfängt wie wohl üblich).
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 04.12.2007, 14:26    Titel: Antworten mit Zitat

jop ich hab den Index buffer mal "gefüllt"
CPP:
   m_lpMesh->LockIndexBuffer(0, reinterpret_cast<void**>(&IndexBufferStart));

   memcpy(IndexBufferStart, IndexBuffer, VertexCount * sizeof(DWORD));

   m_lpMesh->UnlockIndexBuffer();


mit:
CPP:
DWORD IndexBuffer[] = {0,1,2};


ich hoffe das ist so richtig. Man sieht immer no nix Sad
Der Christian wird mich jetzt hoffentlich net den Kopfrunter reißen, wenn ich jetzt sage dass ich das Buch verliehern hab Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 04.12.2007, 14:59    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
Ansonsten würde ich ein paar mehr Fehlerkontrollen einbauen. Damit kannst du oft sehr schnell potentielle Fehlerquellen ausschließen.

Hast du das schon gemacht? Sieht nämlich nicht so aus Wink

Sehr viele der Funktionen haben einen Rückgabewert, der Aufschluss geben kann über Erfolg oder nicht Erfolg und ggf. welcher Art der Misserfolg ist.

<edit>
An der Kameraposition/-ausrichtung liegts hoffentlich nicht.
</edit>
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 04.12.2007, 15:58    Titel: Antworten mit Zitat

Moment...

ich hab die Fehler kontrolle bisher noch unter verschluss gehalten natürlich gibt es die bei mir auch:
CPP:
BOOL CDefaultSphere::CreateSphere(float size) {

   HRESULT hr;
   
   FVF_FORMAT = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1;
   DWORD m_Color = 0xFFFF0000;

   int FaceCount = 1;
   int VertexCount = 3 * FaceCount;
            VertexTex lpVertices[] = {
      { -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFFFF0000, -1.0f, -1.0f },
      {  0.0f,  1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFF00FF00,  0.0f,  1.0f },
      {  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0xFF0000FF,  1.0f, -1.0f }
   };

   DWORD IndexBuffer[] = {0,1,2};
   

      // Create the Mesh
   
   hr = D3DXCreateMeshFVF(FaceCount, VertexCount, D3DXMESH_MANAGED, FVF_FORMAT, m_lpD3DDevice , &m_lpMesh);

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::D3DXCreateMeshFVF", hr, 0 );
   

      // Fill the Mesh

   BYTE* VertexBufferStart;

   hr = m_lpMesh->LockVertexBuffer(0, reinterpret_cast<void**>(&VertexBufferStart));

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::LockVertexBuffer", hr, 0 );

   memcpy(VertexBufferStart, lpVertices, VertexCount * sizeof(VertexTex));

   hr = m_lpMesh->UnlockVertexBuffer();

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::UnlockVertexBuffer", hr, 0 );
   

   BYTE* IndexBufferStart;

   hr = m_lpMesh->LockIndexBuffer(0, reinterpret_cast<void**>(&IndexBufferStart));

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::LockIndexBuffer", hr, 0 );

   memcpy(IndexBufferStart, IndexBuffer, VertexCount * sizeof(DWORD));

    hr = m_lpMesh->UnlockIndexBuffer();

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::UnlockIndexBuffer", hr, 0 );


   //// Creating a progressive mesh
    LPD3DXBUFFER pBuffer = NULL;
    LPD3DXMESH pMeshTemp = NULL;

    int nNumFaces = m_lpMesh->GetNumFaces();

    // Adjazenz Informationen generieren
    DWORD *pAdjacency1 = new DWORD[nNumFaces * 3];
    DWORD *pAdjacency2 = new DWORD[nNumFaces * 3];

    hr = m_lpMesh->GenerateAdjacency(0.0f, pAdjacency1);

   if(hr != D3D_OK) m_lpLogBook->Error(L"ID3DXMesh::GenerateAdjacency", hr, 0 );

    hr = D3DXCleanMesh(D3DXCLEAN_SIMPLIFICATION, m_lpMesh, pAdjacency1, &pMeshTemp, pAdjacency2, &pBuffer);

   if(hr != D3D_OK) m_lpLogBook->Error(L"D3DXCleanMesh", hr, 0 );

    hr = D3DXValidMesh(pMeshTemp, pAdjacency2, &pBuffer);

   if(hr != D3D_OK) m_lpLogBook->Error(L"D3DXValidMesh", hr, 0 );
//   m_lpMesh->Release();
 //   m_lpMesh = pMeshTemp;


   return true;
}


An der Kameraausrichtung sollte es nicht liegen, da alles andere dargestellt wird und ich wie blöd in jede Richtung Ausschau halte nach einem verlassenen Dreieck Smile

Ausserdem sagt man mir ja auch immer dass das Mesh ungültig sei:
logbook hat Folgendes geschrieben:
Failed D3DXCleanMesh D3DXERR_INVALIDMESH - Invalid mesh
Failed D3DXValidMesh D3DERR_INVALIDCALL - Invalid call


Kann es sein, dass ich noch was in die AttributeBuffer schreiben muss. Der lässt sich nämlich auch locken. Blos was soll ein AttributeBuffer sein... ?

Mann !! Es kann doch nicht so schwer sein ein mesh zu erstellen.
Bin ich wirklich so blöd ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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