C# DirectX Terrain Texturen zuweisen nach tilemap

07/31/2010 00:48 Anohros#1
Hallo Leute in der epvp*coders Sektion,
ich habe eine Frage an euch Directx/ C# + Directx Coders.

Ich Arbeite momentan an einem Terrain Viewer für Metin2, den schreibe ich in C#.
Zur Darstellung von 2D und 3D verwende ich Directx.


Meine Frage bezieht sich auf das Texturieren eines Terrains:

Ich verwende eine tilemap "tile.raw" in der Abgespeichert ist, an welchen stellen sich die Texturen auf dem Terrain befinden.

Die "tile.raw" lade ich mit diesem Code:
Code:
private float[,] tileData;

private void loadTileMap()
{
	tileData = new float[259, 259];

	FileStream fs = new FileStream("C:\\Map Viewer\\tile.raw", FileMode.Open, FileAccess.Read);
	BinaryReader tileMap = new BinaryReader(fs);

	for (int X = 0;i< 258;i++)
	{
		for (int Y=0; Y< 258; Y++)
		{
			byte tile = (byte)(tileMap.ReadByte());
			tileData[258 - 1 - Y, 258 - 1 - X] = tile;
		}
	}
	tileMap.Close();
}
Mein Terrain hat eine Größe von 258*258 PX, und die "tile.raw" hat auch eine Größe von 258*258 PX.

Momentan wird das Terrain nur durch die Vertex.Color texturiert.
Code:
private void VertexDeclaration()
{
	vb = new VertexBuffer(typeof(CustomVertex.PositionColored), WIDTH * HEIGHT, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default);
	vertices = new CustomVertex.PositionColored[WIDTH * HEIGHT];

	for (int x = 0; x < WIDTH; x++)
	{
		for (int y = 0; y < HEIGHT; y++)
		{
			vertices[x + y * WIDTH].Position = new Vector3(x, y, heightData[x, y]);
			if (tileData[x, y] == 1) {
				vertices[x + y * WIDTH].Color = Color.Orange.ToArgb();
			} else if (tileData[x, y] == 3) {
				vertices[x + y * WIDTH].Color = Color.YellowGreen.ToArgb();
			} else if (tileData[x, y] == 4) {
				vertices[x + y * WIDTH].Color = Color.Yellow.ToArgb();
			} else if (tileData[x, y] == 5) {
				vertices[x + y * WIDTH].Color = Color.Green.ToArgb();
			} else if (tileData[x, y] == 6) {
				vertices[x + y * WIDTH].Color = Color.LightGreen.ToArgb();
			} else if (tileData[x, y] == 8) {
				vertices[x + y * WIDTH].Color = Color.Gray.ToArgb();
			} else if (tileData[x, y] == 9) {
				vertices[x + y * WIDTH].Color = Color.Silver.ToArgb();
			} else if (tileData[x, y] == 12) {
				vertices[x + y * WIDTH].Color = Color.OrangeRed.ToArgb();
			} else {
				vertices[x + y * WIDTH].Color = Color.White.ToArgb();
			}
		}
	}
	vb.SetData(vertices, 0, LockFlags.None);
}
Im Terrain Viewer sieht das dann so aus:
[Only registered and activated users can see links. Click Here To Register...]

Ich möchte von euch Wissen, wie man Texturen aus einer Datei zbs . "gras.jpg" benutzt, ähnlich wie meine Methode :
Code:
} else if (tileData[x, y] == 12) {
    vertices[x + y * WIDTH].Color = Color.OrangeRed.ToArgb();
Es muss mehrere Texturen unterstützen können wenn möglich!

(Hab auch schon Gegoogelt aber nichts geeignetes gefunden!)

Freue mich auf eure Antworten!!
Wäre dankbar wenn mir jemand weiterhelfen kann mit Source, Links zu Tutorials oder Beispielen!
07/31/2010 19:31 .BritainAndy#2
Free push :awesome:
08/01/2010 11:59 .BritainAndy#3
Push
08/01/2010 12:18 P-a-i-n#4
gibt doch bsp im i-net
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

und dein bild was du da hast das ist kein texture das wird mehr oder weniger mit meshes gemacht
[Only registered and activated users can see links. Click Here To Register...]
08/02/2010 06:40 Anohros#5
Morgen,
Das 1. Tutorial zeigt wie man eine Texture für das ganze Terrain verwendet.
Ich brauch Multitexturing das nach einem Array (das Aussagt welche Texture sich an Punkt X/Y befindet) das Terrain Texturiert;
(Aber konnt noch was anderes daraus entnehmen, und bei mir im Code verbessern)

Das 2. Tutorial befasst sich mit dem Rendern der RAW Heightmap.
Das 3. Tutorial macht es auch über Vertex.Color.
08/02/2010 12:19 P-a-i-n#6
du findest doch alles auf der seite

[Only registered and activated users can see links. Click Here To Register...]