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

1

15.02.2007, 13:53

Meshes Malen

Hallo,

wenn man ein Mesh malen will, das nur aus einer Dreiecksammlung betseht (etwa
ein TeePot), geht das ja z.B. so:

Quellcode

1
2
3
4
//Pseudo-C#
Mesh mesh = Mesh.TeaPot(device);
...
mesh.DrawSub(0);

Meshes, die aus mehreren Objekten bestehen, lassen sich z.B. so ausgeben:

Quellcode

1
2
3
4
5
//Pseudo-C#
Mesh mesh = (eine .x-Datei laden);
...
for(int i = 0; i < grosse_Zahl; i++)
   mesh.DrawSub(i);

:?: Das ist natürlich nicht der Sinn der Sache - aber wie geht das richtig?

Dann ist mir noch aufgefallen, daß sich Meshes anscheinend nicht in Listen (C#) laden
und danach verwenden lassen - so gehts nicht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
//Pseudo-C#
List<Mesh> Meshes = new List<Mesh>();
...
for(int i = 0; i<10; i++)
{
    Meshes.Add(Mesh.TeaPot(device));
}
...
foreach(Mesh mesh in Meshes)
{
    mesh.DrawSub(0);
}

Mit Arrays geht das problemlos:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
//Pseudo-C#
Mesh[] Meshes = new Mesh[];
...
for(int i = 0; i<10; i++)
{
    Meshes[i] = Mesh.TeaPot(device);
}
...
for(int i = 0; i< 10; i++)
{
    mesh.DrawSub(0);
}

:?: Weiß jemand, wieso das so ist?


Vielen Dank schon mal!

Peter Bucher

Frischling

Beiträge: 28

Wohnort: Schweiz

Beruf: IT

  • Private Nachricht senden

2

15.02.2007, 14:46

Hallo

Was heisst für dich "es geht nicht mit Listen"?


Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET
http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET

3

15.02.2007, 20:17

Öm foreach benutze ich nicht oft aber ich glaube es kann kein automatisches typecasting

Die Arraylist aus C# die du wohl verwendest speichert Daten vom Typ object. Also musst du das mit einer for-Schleife durchlaufen und casten.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Pseudo-C# 

List<Mesh> Meshes = new List<Mesh>(); 
... 
{
 for(int i = 0; i<10; i++) 
 { 
     Meshes.Add(Mesh.TeaPot(device)); 
 }
} 
... 
{
 for(int i=0; i< Meshes.Length; i++) 
 { 
      // Mesh aus der Liste holen

      Mesh mesh = (Mesh)Meshes[i];

      // Subset zeichnen

      mesh.DrawSub(0); 
 } 
}

4

21.02.2007, 15:15

Grüß Got,

C# List<...> ist doch generisch - also typsicher!?

Das sollte also meiner naiven Vorstellung nach eigentlich funktionieren:

C-/C++-Quelltext

1
2
3
4
//pseudo c#

List<aClass> MyList = new  List<aClass>();

foreach (aClass x in MyList) { x.aClassMethod(); }


Wenn man dies aber mit "Class" := "Mesh" und "aClassMethod()" := "DrawSubset()"
versucht, gehts nicht - ich muß noch mal schauen, was er genau sagt - jedenfalls hat er
sich schlichtweg geweigert, diese Methode aufzurufen.

Werbeanzeige