JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Skybox
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
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 09.11.2003, 09:05    Titel: Skybox Antworten mit Zitat

Buhuu...ich seh meine Objekte nicht mehr, sobald ich eine SkyBox rendere. Mein Programm ist fast ident mit dem Bsp. 'SkyBox' aus Kapitel 28. Ich poste hier nochmal die relevanten Teile:
Code:

void CSkyBox::Render(D3DXVECTOR3 vPos)
{
   D3DXMATRIX MatSkyBox;
  // Skybox verschieben
  D3DXMatrixTranslation(&MatSkyBox, vPos.x, vPos.y, vPos.z);
  m_lpDevice->SetTransform(D3DTS_WORLD, &MatSkyBox);

  m_lpDevice->SetFVF(D3DFVF_SBVERTEX);
  m_lpDevice->SetStreamSource(0, VB_SkyBox, 0, sizeof(SBVERTEX));

   m_lpDevice->SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);
  m_lpDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
   
  m_lpDevice->SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

  m_lpDevice->SetSamplerState(0, D3DSAMP_ADDRESSU , D3DTADDRESS_CLAMP );
  m_lpDevice->SetSamplerState(0, D3DSAMP_ADDRESSV , D3DTADDRESS_CLAMP );

   // Z-Buffer-Test abschalten   
  m_lpDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
   
  // die 6 Ebenen des Würfels rendern
  for(int i=0;i<m_vecTextures.capacity();i++)
  {
      // passende Textur wählen
    m_lpDevice->SetTexture(0, m_vecTextures[i]);
    m_lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);
  }

  // Z-Buffer-Test wieder einschalten
  m_lpDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

  m_lpDevice->SetSamplerState(0, D3DSAMP_ADDRESSU , D3DTADDRESS_WRAP );
  m_lpDevice->SetSamplerState(0, D3DSAMP_ADDRESSV , D3DTADDRESS_WRAP );

  m_lpDevice->SetTexture(0, NULL);
 
}


so wird z.B. der Boden gerendert:
Code:

m_lpDevice->SetFVF(D3D_CUSTOMVERTEX);

m_lpDevice->SetMaterial(&m_FloorMaterial);
m_lpDevice->SetTexture(0, m_lpFloorTexture);
m_lpDevice->SetStreamSource(0, VB_Floor, 0, sizeof(CustomVertex));   
m_lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);


Ich habs jetzt schon x-mal verglichen und finde den Fehler einfach nicht. Ich nehm mal an, ich vergesse irgendwas an oder abzuschalten, aber bei den ganzen Einstellungen steig ich noch nicht wirklich durch Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 09.11.2003, 12:52    Titel: Antworten mit Zitat

Du musst die Skybox vor allem anderen Rendern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 09.11.2003, 13:40    Titel: Antworten mit Zitat

das tue ich auch:
Code:

void CScene::Render(void)
{
   SkyBox.Render(m_vPos);
   
   m_lpDevice->SetFVF(D3D_CUSTOMVERTEX);
   
   m_lpDevice->SetMaterial(&m_RedMaterial);
   
   // den datenstrom setzen
   m_lpDevice->SetStreamSource(0, VB_Triangle, 0, sizeof(CustomVertex));   
   // das dreieck zeichnen (von pos 0 im buffer, 1 element)
   m_lpDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

   m_lpDevice->SetMaterial(&m_BlueMaterial);
   m_lpDevice->SetStreamSource(0, VB_Cube, 0, sizeof(CustomVertex));   
   m_lpDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12);

   m_lpDevice->SetMaterial(&m_FloorMaterial);
   m_lpDevice->SetTexture(0, m_lpFloorTexture);
   m_lpDevice->SetStreamSource(0, VB_Floor, 0, sizeof(CustomVertex));   
   m_lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

   m_lpDevice->SetTexture(0, NULL);

}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 10.11.2003, 13:03    Titel: Antworten mit Zitat

Oder du hast Probleme mit dem Z-Buffer.
_________________
"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
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 16:27    Titel: Antworten mit Zitat

Der Z-Buffer sollte eigentlich schon funktionieren, ist ja im Grunde alles ident mit den Beipspielen, und ohne SkyBox funkts ja auch, ausserdem wird der ja vor dem Rendern der Skybox deaktiviert...
Die SkyBox ist nach unten hin auch offen, also sollte ich zumindest den Boden sehen, wenn ich direkt runterschau.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 10.11.2003, 21:08    Titel: Antworten mit Zitat

Vielleicht kann es sich mal jemand anschauen....
http://members.chello.at/devilme/3DTest.zip

Das Rendern der Skybox kann man in der Funktion Render() von CScene aktivieren. Bewegen kann man sich mit Mouse und den ESDF Keys.

Achja, das Problem mit den Normalvektoren, dass ich hier gepostet habe, kann man hier auch sehen...man merkt eh gleich, dass der Boden nicht richtig beleuchtet wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 27.01.2005, 18:18    Titel: Antworten mit Zitat

Hallo!

Hab ein Problem mit meiner Skybox,
ich weiß nicht so ganz wie ich meine Texturen auf die ganze Fläche strecken kann, bei mir werden die Texturen entweder gekachelt, oder, wenn ich
Code:
g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

mache, dann werden nur die Pixel gestreckt, die sich am rand des bildes sind, nicht aber das bild selber. Wie kann ich das ganze Bild strecken?
(C++,Visual Studio .NET, DirectX Dezember 2004 SDK)

Edit: Mal ne Anmerkung zum ersten beitrag:
Könnte es nicht auch
Code:
m_lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*3, 2);

heissen und nicht
Code:
i*4
?

Zuletzt bearbeitet von DerJJ am 27.01.2005, 18:25, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

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

DerJJ hat Folgendes geschrieben:
Hallo!

Hab ein Problem mit meiner Skybox,
ich weiß nicht so ganz wie ich meine Texturen auf die ganze Fläche strecken kann, bei mir werden die Texturen entweder gekachelt, oder, wenn ich
Code:
g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

mache, dann werden nur die Pixel gestreckt, die sich am rand des bildes sind, nicht aber das bild selber. Wie kann ich das ganze Bild strecken?
(C++,Visual Studio .NET, DirectX Dezember 2004 SDK)


Dazu muss das Modell selber geändert werden, indem die Texturkoordinaten von jedem Vertex geändert werden. Die Texturkoordinaten müssen im Bereich von -1 bis 1 sein um das zu erreichen was du willst. Am besten 0 bis 1.
_________________
"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
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 27.01.2005, 18:27    Titel: Antworten mit Zitat

Also, jede wand besteht aus 2 Dreiecken bei mir und ich hab die komplette Skybox selbst im Quellcode geschrieben. Die Texturkoordinaten sind da auch entsprechen entweder 0 oder 1.
Ich wüsste nicht was ich da jetzt sonst noch machen sollte.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 27.01.2005, 18:31    Titel: Antworten mit Zitat

Zeig doch mal den ganzen relevanten Code, im Grunde sollte es so wie du beschrieben hast funktionieren.
_________________
"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
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 27.01.2005, 18:33    Titel: Antworten mit Zitat

Also:
Teil des erstellens der Skybox
Code:
CUSTOMVERTEX* pSkyBox;
   int i = 0;
   g_pSkyBox->Lock(0,0,(void**)&pSkyBox,0);
   // Reihenfolge
   // 1. Vorne
   // 2. Hinten
   // 3. Oben
   // 4. Unten
   // 5. Links
   // 6. Rechts
   //****************************************************************************
   // vorne- linkes Dreieck
   // oben links
   pSkyBox[i].position = D3DXVECTOR3(-50.0f,50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 0.0f;
   pSkyBox[i].tv       = 0.0f;
   i++;
   // oben rechts
   pSkyBox[i].position = D3DXVECTOR3(50.0f,50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 1.0f;
   pSkyBox[i].tv       = 0.0f;
   i++;
   // unten links
   pSkyBox[i].position = D3DXVECTOR3(-50.0f,-50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 0.0f;
   pSkyBox[i].tv       = 1.0f;
   i++;
   // vorne- rechtes Dreieck
   // oben rechts
   pSkyBox[i].position = D3DXVECTOR3(50.0f,50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 1.0f;
   pSkyBox[i].tv       = 0.0f;
   i++;
   // unten rechts
   pSkyBox[i].position = D3DXVECTOR3(50.0f,-50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 1.0f;
   pSkyBox[i].tv       = 1.0f;
   i++;
   // unten links
   pSkyBox[i].position = D3DXVECTOR3(-50.0f,-50.0f,50.0f);
   pSkyBox[i].normal = D3DXVECTOR3(0.0f,0.0f,0.0f);
   pSkyBox[i].color    = 0xffffffff;
   pSkyBox[i].tu       = 0.0f;
   pSkyBox[i].tv       = 1.0f;
   i++;
//****************************************************************************
   // hinten- linkes Dreieck
   // oben links


und hier das rendern:
Code:
g_pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
      //g_pD3DDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);

      g_pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
      g_pD3DDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
      g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
      g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
      g_pD3DDevice->SetStreamSource( 0, g_pSkyBox, 0, sizeof(CUSTOMVERTEX) );
      g_pD3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

      g_pD3DDevice->SetTexture( 0, g_pTexSkyV );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0*3, 2);
      g_pD3DDevice->SetTexture( 0, g_pTexSkyH );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 2*3, 2);
      g_pD3DDevice->SetTexture( 0, g_pTexSkyO );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 4*3, 2);
      g_pD3DDevice->SetTexture( 0, g_pTexSkyU );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 6*3, 2);
      g_pD3DDevice->SetTexture( 0, g_pTexSkyL );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 8*3, 2);
      g_pD3DDevice->SetTexture( 0, g_pTexSkyR );
      g_pD3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 10*3, 2);

      g_pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 28.01.2005, 15:40    Titel: Antworten mit Zitat

Eigentlich müsste das wirklich passen. Was meinst du mit "Kacheln"?
Zur Not schau dir doch die im Buch an, oder die in den DXSDK Samples.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 28.01.2005, 15:43    Titel: Antworten mit Zitat

Ich hab das Programm von in gesehen, is aber weniger kacheln sonndern mehr was anders, liegt evtl daran das er Transformierte Vertexe nutzt (Einstellbar im FVF)
_________________
"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
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 28.01.2005, 15:56    Titel: Antworten mit Zitat

Eigentlich braucht er ja auch keine Normalenvektoren, aber daran liegt es sicher net.
Vielleicht mal probehalber nen umgestülpten Würfel aus nem XFile laden?
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 28.01.2005, 16:06    Titel: Antworten mit Zitat

Er erstellt seinen Würfel im Code (siehe oben)
_________________
"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
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