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

Anonymous

unregistriert

1

12.06.2004, 17:17

MeshMaterialList

Halli hallo, ich hab da mal ne frage,

ich baue einen simplen Editor für primitve Objekte,
klappt auch ganz gut mit d3dxcreate... und d3dxsavemeshtox

ABER: Fehlt da nicht ein Parameter? Ich möchte gerne an
MeshMaterialList ran, um verschiedene Materialien und Texturen zu benutzen, aber dafür ist kein Parameter vorgesehen.

Ist ein Template, steht aber schon drin, wenn ich mit obigen Funktionen das erstellen tu. Wie tausche ich das aus? Wie heisst die Funktion dafür?

Bitte sagt jetzt keiner, ich muss das mit den stdio-Funktionen ganz selbst schreiben ??? :crying:

Vielen Dank

Anonymous

unregistriert

2

12.06.2004, 17:41

p.s.

automatisch geht es jedenfalls nicht --> wenn ich 2 oder mehr Materialien übergebe, dann schreibt er das zwar rein aber bei MeshMaterialList steht immer noch für jedes Face 0,0,0,0,0,0,0,0,0,0 usw.

irgendwie muss ich doch da rankönnen, ist
doch nicht im Sinne des Erfinders, da ein Material-Array zu übergeben und es wird nur Material 0 überall reingeschreiben.

aber wie?
Vielen Dank :dance:

3

12.06.2004, 19:49

Hmm.....hab nachgeschaut und die Funktion D3DXSaveMeshToX hat alle nötigen Parameter. Und bei D3DXCreateMesh ist auch alles da was nötig ist. Ein Material Array gehört da ja auch nicht rein.

Arbeite eigentlich gar nicht mit der X Bibi, aber wird denn das Materiel in der gespeicherten X Datei denn beschrieben? Wenn ja wieviele haste angegeben? Wenn du nur eines hast, dann ist ja auch alles bestens, wenn für jedes Face immer Material 0 benutzt wird.

Aber schau dir mal das Mesh Inerface an. Dort gibbet ne Methode namens SetAttributeTable. Dort ist alles was du brauchst.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

4

12.06.2004, 23:20

Geht nicht, habs mal erstmal für n einfachen würfel probiert.
Die ersten 6 Faces soll Material 0 benutzt werden,
die nächsten 6 dann Material1.

Wird aber weder angezeigt noch richtig gespeichert.
Steht immer noch 0,0,0,0,0,0...

Ich nehme mal an, das AttribId das Material beinhaltet oder?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 D3DXATTRIBUTERANGE* at = new D3DXATTRIBUTERANGE[2];

 at[0].AttribId = 0; 
 at[0].FaceStart = 1; 
 at[0].FaceCount = 6; 
 at[0].VertexStart = 1; 
 at[0].VertexCount = 9; 

 at[1].AttribId = 1; 
 at[1].FaceStart = 7; 
 at[1].FaceCount = 12; 
 at[1].VertexStart = 10; 
 at[1].VertexCount = 18; 

 pMesh->SetAttributeTable(at, 2);


Was ich bei der SaveMeshToX()-Funktion vermisse, ist ein Parameter wie
DWORD[] WhichMaterialForWhichFace

5

13.06.2004, 10:32

Hmm.....komisch. Also das steht jedenfalls in der MSDN bei ID3DXMesh::GetAttributeTable

Zitat

An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier when drawing the frame.
Also eindeutig auch für die Materialzuweisung.

Das Mesh sollte nach dem setzen neuer Atribute auch Optimiert werden. Steht ebenfalls in der MSDN. Die einzelnen Primitive werden dann nach den Attributen Sortiert. Die ID kann man dann ja auch in DrawSubSet angeben.


@D3DXSaveMeshToX:
Dieser Parameter ist nicht notwendig da diese Information eigentlich im Mesh Objekt gespeichert werden sollte. Da dieses Objekt ja nun auch passend gerendert werden muss, kann ja nicht jedes Dreieck anders Rendern.

Hast du es schon mal über den Weg der Effekte versucht? Vieleicht geht es ja über diese Kante. Dort kann man ja neben Material auch noch vieles andere speichern.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

6

14.06.2004, 18:42

Ich schreibs doch selbst, kann ich wenigst auch Primitive zusammenkloppen.

Beim selbst schreiben geht alles bis auf das, dass im SDK ein Fehler drin ist.

Dort steht unter "creating a simple cube" ein Würfel, aber da stimmen entweder die Texturkoordinaten nicht oder die Faces sind falsch gemalt.
Auf jeden Fall werden 2 Seiten nicht richtig texturiert.

Wo ist der Texturfehler? Den mit den fehlenden Simikolon hab ich schon ;D

Aus dem SDK:

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
Defining a Simple Cube 

--------------------------------------------------------------------------------

The following file defines a simple cube that has four red sides and two green sides. In this file, optional information is used to add information to the data object defined by the Mesh template. 

Material RedMaterial {
1.000000;0.000000;0.000000;1.000000;;    // R = 1.0, G = 0.0, B = 0.0
0.000000;
0.000000;0.000000;0.000000;;
0.000000;0.000000;0.000000;;
}

Material GreenMaterial {
0.000000;1.000000;0.000000;1.000000;;     // R = 0.0, G = 1.0, B = 0.0
0.000000;
0.000000;0.000000;0.000000;;
0.000000;0.000000;0.000000;;
}

// Define a mesh with 8 vertices and 12 faces (triangles). Use 
// optional data objects in the mesh to specify materials, normals,
// and texture coordinates.
Mesh CubeMesh {
8;                                // 8 vertices.
1.000000;1.000000;-1.000000;,     // Vertex 0.
-1.000000;1.000000;-1.000000;,    // Vertex 1.
-1.000000;1.000000;1.000000;,     // And so on.
1.000000;1.000000;1.000000;,
1.000000;-1.000000;-1.000000;,
-1.000000;-1.000000;-1.000000;,
-1.000000;-1.000000;1.000000;,
1.000000;-1.000000;1.000000;;

12;                      // 12 faces.
3;0,1,2;,                // Face 0 has three vertices.
3;0,2,3;,                // And so on.
3;0,4,5;,
3;0,5,1;,
3;1,5,6;,
3;1,6,2;,
3;2,6,7;,
3;2,7,3;,
3;3,7,4;,
3;3,4,0;,
3;4,7,6;,
3;4,6,5;;

// All required data has been defined. Now define optional data
// using the hierarchical nature of the file format.
MeshMaterialList {
2;                    // Number of materials used.
12;                   // A material for each face.
0,                    // Face 0 uses the first material.
0,
0,
0,
0,
0,
0,
0,
1,                    // Face 8 uses the second material.
1,
1,
1;;
{RedMaterial}         // References to the definitions
{GreenMaterial}       // of material 0 and 1.
}
MeshNormals {
8;                    // Define 8 normals.
0.333333;0.666667;-0.666667;,
-0.816497;0.408248;-0.408248;,
-0.333333;0.666667;0.666667;,
0.816497;0.408248;0.408248;,
0.666667;-0.666667;-0.333333;,
-0.408248;-0.408248;-0.816497;,
-0.666667;-0.666667;0.333333;,
0.408248;-0.408248;0.816497;;
12;                   // For the 12 faces, define the normals.
3;0,1,2;,
3;0,2,3;,
3;0,4,5;,
3;0,5,1;,
3;1,5,6;,
3;1,6,2;,
3;2,6,7;,
3;2,7,3;,
3;3,7,4;,
3;3,4,0;,
3;4,7,6;,
3;4,6,5;;
}
MeshTextureCoords {
8;                        // Define texture coords for each vertex.
0.000000;1.000000;
1.000000;1.000000;
0.000000;1.000000;
1.000000;1.000000;
0.000000;0.000000;
1.000000;0.000000;
0.000000;0.000000;
1.000000;0.000000;;
}

7

14.06.2004, 18:56

Such mal im Forum nach dem Problem. Dann wirste schon fündig. Bist nicht der erste der Versucht hat das zu machen ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige