JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Probleme mit Models

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 15:30    Titel: Probleme mit Models Antworten mit Zitat

Hallo zusamme,

folgendes Problem:

Ich habe eine Klasse für Models(X-Files) dort wird das Model geladen, Position, Rotation und Skalierung bestimmt.
In der Renderfunktion wird dann die Worldmatrix gesetzt. In der KLasse wird auch eine Boundingbox erstellt die bei bedarf gerendert werden kann.
Dies funktioniert auch alles so weit.

Da ich nun mehrere Instanzen der Klasse benötige die auch zur Laufzeit erzeugt werden sollen habe ich eine Klasse für die Verwaltung in der die Models in einem Vector gespeichert werden. Wenn ich nun zwei Models erstelle und rendere mit der Boundingbox funktioniert es.
CPP:
void EinheitenManager::Render()
{
   
   for(int i=0;i<test.size();i++)
   {
      test.at(i)->BoundingBox(dev,test.at(i)->WorldMatrix);
      test.at(i)->Render();
      
   }
}


es kann nun während der Laufzeit die Boundingbox eingeschalted werden

CPP:
for(int i=0;i<test.size();i++)
   {
         test.at(i)->select=true;
   
   }

wenn ich aber nur bei einem Model die BB einschalten will funktioniert die nur beim ersten erstellten Model.
Nur bei diesem wird die BB richtig dargestellt.
Wenn ich das zweite selektiere ist die BB verschoben und ca. 10mal kleiner wie sie sein sollte.

hier noch die Renderfunktion von Model:

CPP:
void Model::Render()
{

   D3DXMATRIX matWorld;

   D3DXMATRIXA16 tmpWorld;
   matWorld = WorldMatrix;
   pDevice->GetTransform(D3DTS_WORLD ,&tmpWorld);
   pDevice->SetTransform( D3DTS_WORLD, &matWorld);
    // Rotationsmatrizen anlegen

    D3DXMatrixRotationX(&RotMatrixX,rot.x);
    D3DXMatrixRotationY(&RotMatrixY,rot.y);
    D3DXMatrixRotationZ(&RotMatrixZ,rot.z);
 
    D3DXMatrixIdentity(&RotMatrix);
   D3DXMatrixScaling(&RotMatrix,scale.x,scale.y,scale.z);
    // und miteinander multiplizieren
    D3DXMatrixMultiply(&RotMatrix,&RotMatrix,&RotMatrixX);
    D3DXMatrixMultiply(&RotMatrix,&RotMatrix,&RotMatrixY);
    D3DXMatrixMultiply(&RotMatrix,&RotMatrix,&RotMatrixZ);

    // Transformations und Rotationsmatrix zur Weltmatrix zusammenfassen
    D3DXMatrixMultiply(&WorldMatrix,&RotMatrix,&TransMatrix);

    D3DXMatrixTranslation(&TransMatrix,position.x,position.y,position.z);

    D3DXMatrixMultiply(&WorldMatrix,&RotMatrix,&TransMatrix);
   
   pDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);

   //pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);      
   
   for( DWORD i=0; i<dMaterials; i++ )
   {
      // Material und Texturen setzen
      pDevice->SetMaterial( &pMeshMaterials[i] );
      pDevice->SetTexture( 0, pMeshTextures[i] );

      // Zeichnen des aktuellen Teilmesh
      pMesh->DrawSubset( i );
   }

   m_bolBoundingBoxOK=true;
   //select = true;
    if(m_bolBoundingBoxOK && select){

      pDevice->SetTransform( D3DTS_WORLD, &tmpWorld);

      DWORD tmpFillMode;
      pDevice->GetRenderState( D3DRS_FILLMODE, &tmpFillMode);
      pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME);

      //OBB
      
      pDevice->SetStreamSource( 0, m_VertexBuffer,0, sizeof(CUBEVERTEX) );
      pDevice->SetIndices( m_IndexBuffer);
      pDevice->SetFVF( FVF_CUBEVERTEX);
      pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12); 

      //AABB
      pDevice->SetStreamSource( 0, m_AABBVertexBuffer,0, sizeof(CUBEVERTEX) );
      pDevice->SetIndices( m_IndexBuffer);
      pDevice->SetFVF( FVF_CUBEVERTEX);
      pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);
      
      pDevice->SetRenderState( D3DRS_FILLMODE, tmpFillMode);

   }
//pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
}

Hat jemand von Euch eine Idee woran das liegen kann?[/img]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.04.2009, 15:33    Titel: Antworten mit Zitat

Wieso setzt du eine WorldMatrix wenn du dein BB rendern willst, die WorldMatrix ist doch schon passend gesetzt.

Das hier kann also eigentlich weg:

CPP:
pDevice->SetTransform( D3DTS_WORLD, &tmpWorld);

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 15:49    Titel: Antworten mit Zitat

habe ich auch schon versucht aber dann wird keine BB richtig dargestellt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.04.2009, 16:58    Titel: Antworten mit Zitat

Nun, es ist auf jeden Fall ein Problem mit deiner WorldMatrix, ich weiss nicht was DrawSubset macht, aber evtl ist es nötig, danach einfach nochmal deine berechnete Worldmatrix zu setzen:

CPP:
pDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 17:06    Titel: Antworten mit Zitat

Nein funktioniert auch nicht es bleibt der gleiche Effekt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 17:29    Titel: Antworten mit Zitat

Hab mal ein paar Bilder:
Das fordere Model ist das erste.

So sieht es aus wenn mann beide Boxen einschaltet



So sieht es aus wenn mann die Box des ersten Models einschaltet



Und das ist der Effekt wenn man nur die BB für das zweite Model einschaltet. Dann sieht man rechts neben dem Kopf des ersten Model eine kleine Box die eigentlich wie im zweiten Bild aussehen sollte.



Die Bilder sind etwas schlecht, ich hoffe man erkennt etwas.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 17:33    Titel: Antworten mit Zitat

Also die BB des zweiten Models wird nur richtig dargestellt wenn die BB des ersten aktiviert wird sonst nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 03.04.2009, 21:02    Titel: Antworten mit Zitat

hat keiner eine Antwort?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.04.2009, 23:25    Titel: Antworten mit Zitat

Dieses:

Code:
pDevice->SetTransform( D3DTS_WORLD, &tmpWorld);


beim rendern der BB macht aber absolut keinen Sinn sonst, so nimmst du ja die vor dem rendern des Modells gesetzte WorldMatrix welches die WorldMatrix des vorher gerenderten Objektes war.

Kannst du mal den ganzen Code posten, bzw noch besser das ganze Projekt wenn möglich? ich fürchte sonst kann ich dir nicht weiter helfen.

Auch anbieten würde es sich das ganze Projekt soweit zu reduzierne das nur noch eine minimal lauffähige Version erhalten bleibt, so lässt sich das ganze einfacher nachvollziehen.

mfg Mark

Zitat:
hat keiner eine Antwort?

Nicht so ungeduldig, sowas dauert Wink
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 04.04.2009, 07:08    Titel: Antworten mit Zitat

OK ich werde mich daran machen eine kleine Demo zu erstellen. Dank dir.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 04.04.2009, 10:18    Titel: Antworten mit Zitat

Hilft dir vielleicht die Funktion zur erstellung der BB weiter:
CPP:
HRESULT   Model::ComputeBoundingBoxEx(LPDIRECT3DDEVICE9 pd3dDevice,D3DXMATRIX Matrix){
   
   HRESULT hr = S_OK;
    
   DWORD NumVertices = pMesh->GetNumVertices();
    DWORD dwStride = pMesh->GetNumBytesPerVertex();

   

    // Bounding Box berechnen
   D3DXVECTOR3 *verts;
   D3DXVECTOR3   min;
   D3DXVECTOR3   max;
   pMesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&verts);
   hr=D3DXComputeBoundingBox(verts, pMesh->GetNumVertices(), dwStride, &min, &max);
   pMesh->UnlockVertexBuffer();
   

   // Positions
   CUBEVERTEX            m_worldBounds[8]; //global
   CUBEVERTEX            m_objectBounds[8];//local
   
   // We have min and max values, use these to get the 8 corners of the bounding box
   m_objectBounds[0].pos.x = min.x;
   m_objectBounds[0].pos.y = min.y;
   m_objectBounds[0].pos.z = min.z;

   m_objectBounds[1].pos.x = min.x;
   m_objectBounds[1].pos.y = min.y;
   m_objectBounds[1].pos.z = max.z;

   m_objectBounds[2].pos.x = max.x;
   m_objectBounds[2].pos.y = min.y;
   m_objectBounds[2].pos.z = max.z;

   m_objectBounds[3].pos.x = max.x;
   m_objectBounds[3].pos.y = min.y;
   m_objectBounds[3].pos.z = min.z;

    m_objectBounds[4].pos.x = min.x;
   m_objectBounds[4].pos.y = max.y;
   m_objectBounds[4].pos.z = min.z;

   m_objectBounds[5].pos.x = min.x;
   m_objectBounds[5].pos.y = max.y;
   m_objectBounds[5].pos.z = max.z;

   m_objectBounds[6].pos.x = max.x;
   m_objectBounds[6].pos.y = max.y;
   m_objectBounds[6].pos.z = max.z;

   m_objectBounds[7].pos.x = max.x;
   m_objectBounds[7].pos.y = max.y;
   m_objectBounds[7].pos.z = min.z;



   

   for( int i = 0; i < 8; i++ ){
      D3DXVec3TransformCoord(&m_worldBounds[i].pos, &m_objectBounds[i].pos , &Matrix);
   }

   OBBmin = m_worldBounds[0].pos; 
   OBBmax = m_worldBounds[6].pos;
   
   CUBEVERTEX*            pVertices;

   if (m_VertexBuffer == NULL){
      pd3dDevice->CreateVertexBuffer(8*sizeof(CUBEVERTEX),
                               D3DUSAGE_WRITEONLY, FVF_CUBEVERTEX,
                               D3DPOOL_MANAGED, &m_VertexBuffer, NULL );   
   
   }

   hr = m_VertexBuffer->Lock( 0, 0, (void**)&pVertices, 0 );
   
   memcpy(pVertices,&m_worldBounds, sizeof(m_worldBounds));
   m_VertexBuffer->Unlock();

   // Box speichern
   memcpy(&OrientedBoundingBox,pVertices, sizeof(OrientedBoundingBox));

   WORD* indices=NULL;

   if(m_IndexBuffer == NULL){
      pd3dDevice->CreateIndexBuffer(36 * sizeof(WORD),
                         D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,
                         D3DPOOL_MANAGED, &m_IndexBuffer, NULL);
   
   }
   
   hr = m_IndexBuffer->Lock( 0, 0, (void**)&indices, 0 );
   
   // front side
    indices[0]  = 0; indices[1]  = 1; indices[2]  = 2;
    indices[3]  = 0; indices[4]  = 2; indices[5]  = 3;

   // back side
    indices[6]  = 4; indices[7]  = 6; indices[8]  = 5;
    indices[9]  = 4; indices[10] = 7; indices[11] = 6;

    // left side
    indices[12] = 4; indices[13] = 5; indices[14] = 1;
    indices[15] = 4; indices[16] = 1; indices[17] = 0;

   // right side
    indices[18] = 3; indices[19] = 2; indices[20] = 6;
    indices[21] = 3; indices[22] = 6; indices[23] = 7;

    // top
    indices[24] = 1; indices[25] = 5; indices[26] = 6;
    indices[27] = 1; indices[28] = 6; indices[29] = 2;

    // bottom
    indices[30] = 4; indices[31] = 0; indices[32] = 3;
    indices[33] = 4; indices[34] = 3; indices[35] = 7;

   m_IndexBuffer->Unlock();


   
    
   //AABB from OBB

   min.x=max.x=m_worldBounds[0].pos.x;
   min.y=max.y=m_worldBounds[0].pos.y;
   min.z=max.z=m_worldBounds[0].pos.z;

   for (int i=1;i<8;i++){
      if (m_worldBounds[i].pos.x < min.x) min.x=m_worldBounds[i].pos.x;
      if (m_worldBounds[i].pos.x > max.x) max.x=m_worldBounds[i].pos.x;
      if (m_worldBounds[i].pos.y < min.y) min.y=m_worldBounds[i].pos.y;
      if (m_worldBounds[i].pos.y > max.y) max.y=m_worldBounds[i].pos.y;
      if (m_worldBounds[i].pos.z < min.z) min.z=m_worldBounds[i].pos.z;
      if (m_worldBounds[i].pos.z > max.z) max.z=m_worldBounds[i].pos.z;
   }
   
   CUBEVERTEX* pAABBVertices;


   if (m_AABBVertexBuffer ==NULL){
      pd3dDevice->CreateVertexBuffer(8*sizeof(CUBEVERTEX),
                         D3DUSAGE_WRITEONLY, FVF_CUBEVERTEX,
                         D3DPOOL_MANAGED, &m_AABBVertexBuffer, NULL );   
   
   }
   
   hr = m_AABBVertexBuffer->Lock( 0, 0, (void**)&pAABBVertices, 0 );
      
   pAABBVertices[0] = CUBEVERTEX(min.x, min.y, min.z);
    pAABBVertices[1] = CUBEVERTEX(max.x, min.y, min.z);
    pAABBVertices[2] = CUBEVERTEX(max.x, min.y, max.z);
    pAABBVertices[3] = CUBEVERTEX(min.x, min.y, max.z);
   pAABBVertices[4] = CUBEVERTEX(min.x, max.y, min.z);
   pAABBVertices[5] = CUBEVERTEX(max.x, max.y, min.z);
    pAABBVertices[6] = CUBEVERTEX(max.x, max.y, max.z);
   pAABBVertices[7] = CUBEVERTEX(min.x, max.y, max.z);
   
   m_AABBVertexBuffer->Unlock();
   
   
   // Box speichern
   memcpy(&AxisAlignedBoundingBox,pAABBVertices, sizeof(AxisAlignedBoundingBox));
   AABBmin = pAABBVertices[0].pos;
   AABBmax = pAABBVertices[6].pos;

      m_bolBoundingBoxOK = true;
 
   return hr;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.04.2009, 12:38    Titel: Antworten mit Zitat

Wozu ist da eine Matrix nötig?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 04.04.2009, 15:29    Titel: Antworten mit Zitat

Um die Box in die Welt zu integrieren. So stehts im Buch InsideDX
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.04.2009, 17:55    Titel: Antworten mit Zitat

Das Buch klingt nach gutem Feuerholz wenn diverse andere Sachen die ich in deinem Projekt gesehen habe auch daraus stammen, sehe es nicht böse.

Nun ich habe es hinbekommen das deine BBs zu sehen sind so wie du es wolltest:

CPP:
void Model::Render()
{

   D3DXMATRIXA16 RotationMatrix;
   D3DXMATRIXA16 ScaleMatrix;
   D3DXMATRIXA16 TranslationMatrix;
   D3DXMATRIXA16 ComboMatrix;

   ::D3DXMatrixRotationYawPitchRoll(&RotationMatrix, rot.y, rot.x, rot.z);
   ::D3DXMatrixScaling(&ScaleMatrix, scale.x,scale.y,scale.z);
   ::D3DXMatrixTranslation(&TranslationMatrix, position.x,position.y,position.z);

   ::D3DXMatrixMultiply(&ComboMatrix, &RotationMatrix, &TranslationMatrix);
   ::D3DXMatrixMultiply(&WorldMatrix, &ScaleMatrix, &ComboMatrix);

   D3DXMATRIX tmpWorld;
   pDevice->GetTransform(D3DTS_WORLD ,&tmpWorld);

   pDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);    

   for( DWORD i=0; i<dMaterials; i++ )
   {
      // Material und Texturen setzen
      pDevice->SetMaterial( &pMeshMaterials[i] );
      pDevice->SetTexture( 0, pMeshTextures[i] );

      // Zeichnen des aktuellen Teilmesh
      pMesh->DrawSubset( i );
   }


   m_bolBoundingBoxOK=true;
   //select = true;
   if(m_bolBoundingBoxOK && select){

      D3DXMATRIXA16 NullMatrix;
      D3DXMatrixIdentity(&NullMatrix);
      pDevice->SetTransform(D3DTS_WORLD, &NullMatrix);    

      DWORD tmpFillMode;
      pDevice->GetRenderState( D3DRS_FILLMODE, &tmpFillMode);
      pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME);

      //OBB

      pDevice->SetStreamSource( 0, m_VertexBuffer,0, sizeof(CUBEVERTEX) );
      pDevice->SetIndices( m_IndexBuffer);
      pDevice->SetFVF( FVF_CUBEVERTEX);
      pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12); 

      //AABB
      pDevice->SetStreamSource( 0, m_AABBVertexBuffer,0, sizeof(CUBEVERTEX) );
      pDevice->SetIndices( m_IndexBuffer);
      pDevice->SetFVF( FVF_CUBEVERTEX);
      pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,12);

      pDevice->SetRenderState( D3DRS_FILLMODE, tmpFillMode);
   }
}

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy-Mad
Mini JLI'ler


Alter: 42
Anmeldedatum: 18.09.2006
Beiträge: 34

Medaillen: Keine

BeitragVerfasst am: 04.04.2009, 19:48    Titel: Antworten mit Zitat

DAnk Dir, dachte ichs mir dass es an der Render-Methode lag.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL 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