Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

1

22.11.2003, 15:06

Nochmal Texturen...

Diesmal ist bei mir alles so rot auf dem Bildschirm, ich kann das schlecht beschreiben... Deswegen hab ich nen Scrrenshot hochgeladen.
Außerdme haben die Tiles so komische schräge linien...

Ich habe kein D3DRS_COLORWITEENABLE gesetzt, und die texturkoordinaten sind auch richtig, hab ich nach geschaut und die Textur ist auch 256 * 256 groß

Was kann das sein?

Hier der Screenshot:
www.maxis-house.de/Screenshot.jpg

Hier die Tiles:
www.maxis-house.de/Tiles2.bmp

Hoffe ihr könnt mir helfen ...

Gruß, Maxi
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

22.11.2003, 19:39

Hast Du vielleicht Rot als Vertex- oder Materialfarbe genommen, aus Versehen?

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

3

22.11.2003, 19:44

ich hab keine Vertexfarbe genommen...

Aber ich habs mal nen Kumpel geschickt, bei ihm gehts, so wie es sein soll. Aber bei mir nicht. Aber vorgestern gings noch...
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

22.11.2003, 20:01

Poste mal den Quellcode!

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

5

22.11.2003, 21:20

OK, versuch ihn so weit wie möglich zu kürzen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// erstmal laden der Texturen:
m_Textures = new PDIRECT3DTEXTURE9[NumTextures];
D3DXIMAGE_INFO  ImageInfo;

for(int Num = 0; Num < NumTextures; Num++)
{
// Textur laden
  D3DXCreateTextureFromFileEx(me_g_D3D->GetDevice(), // Zeiger auf den Device
    TexName[Num],   // DateiName
    D3DX_DEFAULT, D3DX_DEFAULT, // Breite, Höhe
    1,  // Keine MIP-Maps
    0,  // Verwendungszweck, ganz normale Textur
    D3DFMT_A1R5G5B5,        // Format
    D3DPOOL_MANAGED,        // Speicherklasse
    D3DX_FILTER_NONE,       // Keine Mip-Maps - Kein Filter
    D3DX_FILTER_NONE,
    ColorKey,  // Die Transparente Farbe (RGBA(0, 0, 0, 0))
    &ImageInfo, // Wird mit Bildinformationen gefüllt
    NULL,       // Keine Palette, was auch immer das ist
    &m_Textures[Num]))) // Das zu erstellende Objekt

  // ERstellen der Vertizes
  struct me2DMapTile
  {
    int Number;  // Nummer des Tiles
    float u, v;     // Die Koordinaten des Tiles
  };

  me2DMapTiles** m_Tiles;   

  m_Tiles = new me2DMapTile*[NumTextures];
  // Ein Array erstellen, dass die Tiles beinhaltet
  m_Tiles[Num] = new me2DMapTile[TilesInTexture]; // Num -> für jede Textur, ist aber bis jetzt noch 1

  // Den Tiles Position und Nummer zuweisen
  ComputeTilePosition(ImageInfo.Width, ImageInfo.Height, TileWidth, TileHeight, m_Tiles[Num]); 
 
// Funktion Compute TilePositions
DLLEXPORT meResult me2DMap::ComputeTilePosition(int TexWidth, int TexHeight, int TileWidth, int TileHeight, me2DMapTile* Tiles)
{
  // Auf falsche Parameter überprüfen
  if(Tiles == NULL)
    return ME_ERROR;
  
  int TilesPerRow = TexWidth / TileWidth;
  int TilesPerColumn = TexHeight / TileHeight;
  int NumRows = TilesPerColumn;
  int NumColumns = TilesPerRow;
  int Number = 0;
  
  // TileHeightUV - float-Array, gibt Breite/Höhe in Texturkoordinaten an
  m_TileWidthUV[Number] = (float)1 / NumColumns;
  m_TileHeightUV[Number] = (float)1 / NumRows;
  
  for(int Row = 0; Row < NumRows; Row++)
  {
    for(int Column = 0; Column < NumColumns; Column++)
    {
       Tiles[Number].Number = Number;
       Tiles[Number].u      = (float)Column / NumColumns;
       Tiles[Number].v      = (float)Row / NumRows; 
       Number++;
    }
  }

  return ME_OK;
}

 // Dann Rendern

// Das Vertexdatenarray aktualisieren:
for(Line = 0; Line < m_TilesPerScreenY; Line++)
{
  for(int Column = 0; Column < m_TilesPerScreenX; Column++)
  {
  // Die Vertexpositionen aktualisieren
  
  // Links oben
  m_Vertizes[Line][Column].Vertizes[TOPLEFT].x = m_TileWidth * Column + SmoothX + StartX;
  m_Vertizes[Line][Column].Vertizes[TOPLEFT].y = m_TileHeight * Line + SmoothY + StartY;

  // Rechts oben, Dreieck 1
  m_Vertizes[Line][Column].Vertizes[TOPRIGHT_T1].x = m_TileWidth * (Column + 1) + SmoothX + StartX;
  m_Vertizes[Line][Column].VertizesTOPRIGHT_T1].y = m_TileHeight * Line + SmoothY + StartY;

//Links unten, Dreieck 1
  m_Vertizes[Line][Column].Vertizes[BOTTOMLEFT_T1].x = m_TileWidth * Column + SmoothX + StartX;
  m_Vertizes[Line][Column].Vertizes[BOTTOMLEFT_T1].y = m_TileHeight * (Line + 1) + SmoothY + StartY;

// Rechts unten
  m_Vertizes[Line][Column].Vertizes[BOTTOMRIGHT].x = m_TileWidth * (Column + 1) + SmoothX + StartX;
  m_Vertizes[Line][Column].Vertizes[BOTTOMRIGHT].y = m_TileHeight * (Line + 1) + SmoothY + StartY;

  // Dreieck 2 = Dreieck 1 links unten; rechts oben
  m_Vertizes[Line][Column].Vertizes[TOPRIGHT_T2] = m_Vertizes[Line][Column].Vertizes[TOPRIGHT_T1]; 
  m_Vertizes[Line][Column].Vertizes[BOTTOMLEFT_T2] = m_Vertizes[Line][Column].Vertizes[BOTTOMLEFT_T1];

  // rhw und z ist für alle gleich
  for(int i = 0; i < 6; i++)
  {
    m_Vertizes[Line][Column].Vertizes[(ME_2DMAP_VERTEXPOSITION)i].z = 0.0f;
    m_Vertizes[Line][Column].Vertizes[(ME_2DMAP_VERTEXPOSITION)i].rhw = 1.0f;
   }
  }
}

// Definiert in Header
struct meTile
{
    int TexNumber;
    int TileNumber;
};


// m_TileData ist ein 2D-Array aus meTile


// Dann die Arrays mit den Texturkoordinaten füllen



me2DMapTile* tile;
int TileNumber;
int TexNumber;
    
for(Line = TileY; Line < (m_MapHeight < m_TilesPerScreenY ? TileY + m_MapHeight : m_TilesPerScreenY +  TileY); Line++)
{
  for(int Column = TileX; Column < (m_MapWidth < m_TilesPerScreenX ? TileX + m_MapWidth : m_TilesPerScreenX + TileX); Column++)
  {
    // Das Tile bestimmen, welches an der Position gezeichnet werden soll
    TileNumber = m_TileData[Layer][Line][Column].TileNumber;
    TexNumber = m_TileData[Layer][Line][Column].TexNumber;
    tile = &m_Tiles[TexNumber][TileNumber];
    
   // Linke obere Ecke des Vertex
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPLEFT].u = tile->u;
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPLEFT].v = tile->v;

   // Rechte obere Ecke des Vertex
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T1].u = tile->u + m_TileWidthUV[TexNumber];
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T1].v = tile->v;

   // Linke untere Ecke des Vertex
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T1].u = tile->u;
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T1].v = tile->v + m_TileHeightUV[TexNumber];

   // Rechte obere, Dreieck 2
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T2].u = m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T1].u;
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T2].v = m_Vertizes[Line - TileY][Column - TileX].Vertizes[TOPRIGHT_T1].v;

   // Linke untere, Dreieck 2
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T2].u = m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T1].u;
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T2].v = m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMLEFT_T1].v;

   // Rechte untere Ecke
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMRIGHT].u = tile->u + m_TileWidthUV[TexNumber];
   m_Vertizes[Line - TileY][Column - TileX].Vertizes[BOTTOMRIGHT].v = tile->v + m_TileHeightUV[TexNumber];
   }
 }

PDIRECT3DDEVICE9 Device = me_g_D3D->GetDevice();  // Der D3D-Device zum zeichnen
meTile Tile;  // Gibt das aktuelle Tile an, welches gezeichnet wird
PDIRECT3DTEXTURE9 CurrentTexture = NULL;  // Gibt an, welche Textur gerade geldaen ist

#define ME_2DMAP_VERTEXFVF (D3DFVF_XYZRHW | D3DFVF_TEX1)
Device->SetFVF(ME_2DMAP_VERTEXFVF); // Vertexformat setzen

for(int l = 0; l < (m_TilesPerScreenY < m_MapHeight ? m_TilesPerScreenY : m_MapWidth); l++)
{
  for(int c = 0; c < (m_TilesPerScreenX < m_MapWidth ? m_TilesPerScreenX : m_MapWidth); c++)
  {
    Tile = m_TileData[Layer][l + TileY][c + TileX];
    if(CurrentTexture != m_Textures[Tile.TexNumber])
    {
    // Wenn Textur schon gesetzt ist, dann nicht nochmal setzen
    Device->SetTexture(0, m_Textures[Tile.TexNumber]);
    CurrentTexture = m_Textures[Tile.TexNumber];
    }
                
    // Rechtecke zeichnen, Geschwindigkeit wird noch verbessert...
    if(FAILED(Device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, &m_Vertizes[l][c], sizeof(me2DMap::me2DMapVertex))))
    {
    // Bei Fehler beenden, tritt aber nciht auf
    char d[256];
    sprintf(d, "Fehler in me2DMap::Render(): DrawPrimitiveUP");
    meErrorLog(d);
    return ME_STOP;
    }
  }
}

Sorry, is doch ganz schön viel geworden... aber ich weiß nicht wo ich noch kürzen sollte

Naja, und ich hab nen bissel von TriBase abgeguckt, ich hoffe, das stört dich nicht all zu doll.

Gruß, Maxi

PS: Ich finde, dass die Code-Schrift-Größe nen bissel zu groß ist, das leist sich irgendwie schlecht.
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

6

23.11.2003, 20:14

warum hilft mir denn keiner...
ich habs immernoch nicht hingekriegt buhu..
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

7

24.11.2003, 19:00

Kann jetzt keinen Fehler finden. Geh mal mit dem Debuger durch und schau dir die Werte an.

Dann schalte mal das D3DRS_COLORWITEENABLE Explizit ab. Was anderes kann ich dir leider nicht raten.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige