Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:16 Titel: Textur erstellen |
|
|
Sind die Berechnungen beim kopieren richtig?
CPP: | Log << LOGI("Die Textur erzeugen");
LPDIRECT3DTEXTURE9 NewTexture=NULL;
//die daten in ne neue Textur schreiben:
Device->CreateTexture(Header2.biWidth, Header2.biHeight, 1,//kein mipmapping
0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &NewTexture, NULL);
if(NULL==NewTexture)
{
Log << LOGE("Textur konnte nciht erzeugt werden!");
return NULL;
}
D3DLOCKED_RECT LocketRect;
if(FAILED(NewTexture->LockRect(0, &LocketRect, NULL, D3DLOCK_DISCARD)))
{
Log << LOGI("Textur konnte net gesperrt werden");
return NewTexture;//ok, der inhalt ist scheiße, aber imemrhin etwas...
}
else
{
Log << LOGI("Textur gesperrt");
}
//die textur mit einer farbe füllen:
{
for(int y=0; y<Header2.biHeight; ++y)
{
//die reihen durchgehen:
for(int x=0; x<Header2.biWidth; ++x)
{
//rot:
*(static_cast<char*>(LocketRect.pBits)+y*(Header2.biWidth*4+LocketRect.Pitch)+0)=128;
//grün
*(static_cast<char*>(LocketRect.pBits)+y*(Header2.biWidth*4+LocketRect.Pitch)+1)=255;
//blau
*(static_cast<char*>(LocketRect.pBits)+y*(Header2.biWidth*4+LocketRect.Pitch)+2)=255;
//alpha
*(static_cast<char*>(LocketRect.pBits)+y*(Header2.biWidth*4+LocketRect.Pitch)+3)=255;
}
}
}
NewTexture->UnlockRect(0);
Log << LOGI("Textur wurde erzeugt");
|
Tja, stürtzt immer ab. Im Prinzip steht aj alles im Code. Wollte halt erstmal die Textur einfarbig machen. Später kann ich dann ja jedne einzelnen Pixel die Farbe ausm Bild laden.
Achja, es gibt ne AcdcesViolation, ziemliehc weit am Ende, also wenn das kopieren schon fast fertig wäre... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:29 Titel: |
|
|
Addiere nicht die Breite mit dem Pitch, der Pitch ist schon mit drinnen (wird wahrscheinlich der Fehler sein)
Und wo ist x in der Berechnung?  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:33 Titel: |
|
|
Ich dachte es müsste y* Width + x + 0||1||2||3 (Farbtiefe) sein. _________________ "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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:41 Titel: |
|
|
tja, mal die weite, das bedeutet, dei breite der Textur + den Pitch.
Die breite bezieht sich auf die genaue Breite des Bildes, also muzss ich den Pitch noch hinzuaddieren. LDas mitd em x stimmt, ich addiere jetzt noch immer ien x*4. Aber es strtzt immer noch ab.
[Edit]Ich denke mal die Werte müssen zu groß sein, weil inenrhalb des Speichers kann ja passieren was will, gibt da ja keine AccessVioltion. Also ist irgendwo zu viel...
Achja, der Pitch hat einen wert von 360, ist das nicht ein bisschen viel? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:44 Titel: |
|
|
Immer noch am Schluss oder in der Mitte? Oder bei 75%? Dann könnte es sein dass du die Farbtiefe falsch gelesen hast. _________________ "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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:46 Titel: |
|
|
CPP: | for(int y=0; y<Header2.biHeight; ++y)
{
//die reihen durchgehen:
for(int x=0; x<Header2.biWidth; ++x)
{
//blau:
*(static_cast<char*>(LocketRect.pBits)+y*4*(Header2.biWidth)+x*4+0)=255;
//grün
*(static_cast<char*>(LocketRect.pBits)+y*4*(Header2.biWidth)+x*4+1)=0;
//rot
*(static_cast<char*>(LocketRect.pBits)+y*4*(Header2.biWidth)+x*4+2)=0;
//alpha
*(static_cast<char*>(LocketRect.pBits)+y*4*(Header2.biWidth)+x*4+3)=255;
}
}
|
Hm, so geht es irgendwie... Ich frage mich nur wie das jetzt mit dem Pitch funktioniert. Es wird wohl genau richtig viel geschrieben, weil die Textur komplett gefüllt ist, und auch kein Zugriffsfehelr drinne ist.
Kapier ich net ganz. Muss ich gleich mal weiter testen... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:47 Titel: |
|
|
Nochmal: der Pitch ist die Breite PLUS die zsätzlichen Informationen!
Steht übrigens sogar im Buch.  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 19.04.2005, 18:05 Titel: |
|
|
Zitat: |
Im Buch stand auch das ein DWORD ein unsigned int ist Wink Also naja...
|
Was gaubst du, warum ich "sogar" gesagt habe. Trotzdem stimmt es.  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 19.04.2005, 18:08 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Ich hab in einem Tutorial gezeigt wie man sowas macht
OLiver
Im Buch stand auch das ein DWORD ein unsigned int ist Also naja... |
das heißt ja net, dass alles im Buch falsch is, manche Sachen sin ganz nützlich(und sogar richtig )
Aber @OLiver
stimmt, die Bits sin das Grundsätzliche und der Pitch sin das + manche Informations dadrüber |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.04.2005, 20:12 Titel: |
|
|
@Patrick In deinem Tut sind 16bit ich benutez 32 bit, das ist was ganz anderes (laden geht ja aber das konvertieren in die textur...)
Im Buch steht aber auch folgendes:
D3DCOLOR * PixelXY=Pixels[y*Pitch+x];
Das heißt, es kommt erst eine Riehe Bildinformationen, dann ein bisschen Kram, dann die zweitte Reihe usw. Und genau so wie da habe ich auch versucht, den Schreibvorgang zu realisieren. Die Größe einer Zeile ist die Breite des Bildes + den Pitch, oder etwa nicht??? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 19.04.2005, 20:15 Titel: |
|
|
CPP: | for (int cy=0; cy<InfoHeader.biHeight; ++cy)
{
for (int cx=0; cx<InfoHeader.biWidth; ++cx)
{
if (bpp == 16)
{
// Umrechnung der einzelnen Farbwerte von 24 in 16 Bit
unsigned char blue = (data[(cy*InfoHeader.biWidth + cx)*3 + 0]) >> 3,
green = (data[(cy*InfoHeader.biWidth + cx)*3 + 1]) >> 3,
red = (data[(cy*InfoHeader.biWidth + cx)*3 + 2]) >> 3;
// Pixel in 16 Bit Farbe schreiben
((unsigned short*)dest)[cx + (cy*pitch)] = (blue%32) + ((green%64) << 6) + ((red%32) << 11);
}
else
{
// Farbe mit Alpha = 100 % initialisieren
unsigned long color = 0xff000000;
// Kopiere 24 Bit Farbe in den 32 Bit Wert
memcpy (&color, &data[(cy*InfoHeader.biWidth + cx)*3], sizeof(unsigned char)*3);
// Pixel in 32 Bit Farbe schreiben
((unsigned long*)dest)[cx + (cy*pitch)] = color;
}
}
} |
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 20.04.2005, 12:56 Titel: |
|
|
Zitat: |
D3DCOLOR * PixelXY=Pixels[y*Pitch+x];
|
Steht da irgendwas von einer Breite?
Wenn x die Bildinformationen sind und 0 die zusätzlichen, sieht das dann so aus:
xxxxxxxxxxxxxxxxxxxx0000000000
xxxxxxxxxxxxxxxxxxxx0000000000
xxxxxxxxxxxxxxxxxxxx0000000000
xxxxxxxxxxxxxxxxxxxx0000000000
Der Pitch ist hier 30, also die gesamte Zeile. Mach einfach das Header2.biWidth*4 weg, dann gehts:
CPP: | //rot:
*(static_cast<char*>(LocketRect.pBits)+y*(LocketRect.Pitch)+0)=128;
//grün
*(static_cast<char*>(LocketRect.pBits)+y*(LocketRect.Pitch)+1)=255;
//blau
*(static_cast<char*>(LocketRect.pBits)+y*(LocketRect.Pitch)+2)=255;
//alpha
*(static_cast<char*>(LocketRect.pBits)+y*(LocketRect.Pitch)+3)=255;
|
_________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
|