JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

[Texturkoordinaten] Texturenkord werden falsch gesetzt

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 10:37    Titel: [Texturkoordinaten] Texturenkord werden falsch gesetzt Antworten mit Zitat

Hi,

ich schreibe gerade an einem Objekt, mit dem man einen Quader darstellen kann. Dazu benutze ich eine Textur die so aussieht:



Das kleine Stück soll die z Koordinate vom Quader sein, das lange die x.

Jetzt berechne ich die Texturkoordinaten mit:

(2 * iDepth + 2 * iWidth) / iDepth = 1 / float fTextureWidthSmall -->

float fTextureWidthSmall = iDepth / (2 * iDepth + 2 * iWidth);
float fTextureWidthLarge = iWidth / (2 * iDepth + 2 * iWidth);

Doch anscheinden hat diese Zahl zu wenig Nachkommastellen (0.166667/0.6666666666), den die Texturen verlaufen an den Kanten:



Kann ich das irgendwie anderst aufbauen?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 11:08    Titel: Antworten mit Zitat

nein, das sieht ziemlich normal aus, da die Texturkoordinaten interpoliert wird. Du könntest die Texturfilter ausschalten, oder zwei getrennte Texturen benutzen.

[Edit]
Obwohl: von Pink nach rot siehts ja besser aus, weiß auch nicht warum
[/Edit]
_________________
https://jonathank.de/games/


Zuletzt bearbeitet von Jonathan_Klein am 30.10.2004, 11:10, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 11:09    Titel: Antworten mit Zitat

Das die Texturen an den Kanten verlaufen, hat wohl mit der Filterung zu tun. Welche Filtermethode hast du denn eingestellt?

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 11:13    Titel: Antworten mit Zitat

sieht nach üblichem D3DTEXF_LINEAR aus...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 11:30    Titel: Antworten mit Zitat

wenn alles in einer Textur bleiben soll, könnte man natürlich die Textur ein Stück verkürzen, also auf dem Würfel. So würde sie noch etwas mehr gestreckt, aber man würde die Übergänbge nicht mehr sehen.
Außerdem sollte das bei richtig Texturierten Objekten nicht mehr soo auffallen, man siehts ja größtenteils deshalb, weils einfarbig ist. Und bei einfarbigen Sachen kann man Vertexfarben nehmen, oder läßt bei der Textur die Filter weg.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 12:33    Titel: Antworten mit Zitat

Geht jetzt halbwechs anständig
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 17:58    Titel: Antworten mit Zitat

Welchen Stat muss ich für eine Texur benutzen, damit das Objekt nur da vom Licht erfasst wird, wo es auch auftrifft?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 18:14    Titel: Antworten mit Zitat

Du meinst Pixelgenaue Beleuchtung?
Also die geht nicht einfach so per State. Entweder benutz du Shader, Lightmaps oder Beleuchtung auf Vertexbasis(statt einem Großen Dreieck viele kleine, bis die genauigkeit hoch genug ist, dafür gibts ein Beispiel in der DX Doku)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

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

Du musst Normalen angeben und die Beleuchtung einschalten. Das andere Problem kannst du lösen, indem du mit mehreren Texuren arbeitest oder ich erinnere mich dunkel, dass es eine DX-Funktion gibt, mit der du Bereiche auf der Textur als einzelne Texuren definieren kannst, damit nicht zwischen den Bereichen gefiltert wird. Wer weiss wie die Fkt heisst, bitte melden.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 18:42    Titel: Antworten mit Zitat

Ich habe normale, und eine Beleuchtung. Kann das am Material liegen?

Wenn ich mit mehreren Texturen arbeite kostet das Performance, oder?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling


Zuletzt bearbeitet von abc_d am 30.10.2004, 18:46, insgesamt einmal bearbeitet
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: 30.10.2004, 18:44    Titel: Antworten mit Zitat

Alles zusätzliche kostet Performance ^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 18:47    Titel: Antworten mit Zitat

Ok, ich formuliere die Frage anderst: kostet es viel Performance wenn ich statt 1er Texur 9,10 verwende? Da ist die aktuelle Methode doch viel schneller?

Merkwürdig, wenn ich bei SetLight true angebe wird das objekt nicht angezeigt, bei false schon! Schaltet DX auf ein anderes Licht um, wenn kein Licht exisitert? ( wenn ich m_lpD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1); aktiviere ist es immer hell)

Code:

//Sets the light
void bn_Scene::SetLight(bool bState)
{
   //Sets the light nr. 0
   m_lpD3DDevice->SetLight(0,&m_Light);
   m_lpD3DDevice->LightEnable(0,bState);
   m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING,bState);

   //Sets the member var
   m_bLightState = bState;
}

_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 19:01    Titel: Antworten mit Zitat

BlackLordOfDragons hat Folgendes geschrieben:
Ok, ich formuliere die Frage anderst: kostet es viel Performance wenn ich statt 1er Texur 9,10 verwende? Da ist die aktuelle Methode doch viel schneller?

Ja. es kostet mehr Performance wenn man 10 kleine Texturen, anstatt einer großen verwendet. (edit: zumindest beim Laden... aber später auch. Denn das bedeutet mehr Texture Switches. Und davon wollen wir ja so wenig wie möglich haben.)

Aber du kannst ja einfach eine große Textur über mehr als 2 Dreiecke legen.

Wenn du z.B 8 Dreiecke(also 4 Quads - siehe Bild Wink ) verwendest bekommt der Vetex in der Mitte die Texturkoordinaten 0.5, 0.5 .

Code:

0.0, 0.0 ----0.5, 0.0---- 1.0, 0.0
        |        |        |
        |        |        |
0.0, 0.5 ----0.5, 0.5---- 1.0, 0.5
        |        |        |
        |        |        |
0.0, 1.0 ----0.5, 1.0---- 1.0, 1.0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 20:02    Titel: Antworten mit Zitat

Ich glaube da stimmt irgendwas mit dem Licht nicht: http://www.online-tutorials.net/dengine.zip

Startet das Programm und drückt solange auf F8 bis das Licht an bleibt, dann geht mit Leertaste (+ WASD und STRG) ein wenig nach oben. Jetzt nochmal F8 und schon leuchten bei dem Objekt nur noch die Texutren bei den Zinnen. Das Objekt kommt soviel ich weiß von Christian.

Code:

   //Sets the light
   ZeroMemory(&m_Light,sizeof(D3DLIGHT9));

   //Sets the type
   m_Light.Type = D3DLIGHT_POINT;

   //Sets the light
   m_Light.Diffuse.r      = 1.0f;   
   m_Light.Diffuse.g      = 1.0f;
   m_Light.Diffuse.b      = 0.0f;
   m_Light.Range         = 100000.0f;
   m_Light.Position      = D3DXVECTOR3(10.0f,10.0f,10.0f);
   m_Light.Attenuation0   = 0.0f;

//   m_lpD3DDevice->SetRenderState(D3DRS_AMBIENT,0x00F0F0F0);
   this->SetState();

   //Sets the light true
   this->SetLight(m_bLightState);


Code:

//Sets the states
void bn_Scene::SetState()
{
   //D3DTEXF_LINEAR
   DXTestForError(m_lpD3DDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR),"Error by setting sample state",15,1);
   DXTestForError(m_lpD3DDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR),"Error by setting sample state",15,1);
   DXTestForError(m_lpD3DDevice->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR),"Error by setting sample state",15,1);   

//   DXTestForError(m_lpD3DDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE),"Error by setting render state",14,1);
//   DXTestForError(m_lpD3DDevice->SetRenderState(D3DRS_ALPHAREF, 0x01),"Error by setting render state",14,1);
//   DXTestForError(m_lpD3DDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL),"Error by setting render state",14,1);
}

//Sets the light
void bn_Scene::SetLight(bool bState)
{
   //Sets the light nr. 0
   m_lpD3DDevice->SetLight(0,&m_Light);
   m_lpD3DDevice->LightEnable(0,bState);
   m_lpD3DDevice->SetRenderState(D3DRS_LIGHTING,bState);

   m_bLightState = bState;
}

_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 30.10.2004, 22:06    Titel: Antworten mit Zitat

Als Ergänzunz, das was ich meinte nennt sich ID3DXTextureGutterHelper.

C.
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
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