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

19.02.2006, 22:06

generelles Modelproblem C#

hi,hab gehört,das ihr hier netter seit und nicht gleich auf google verweist.^^'

Also...
Ich hab das Programm MAYA.Seit dem DirectX-SDK vom October hat Microsoft einen Exporter für Maya gemacht.
Damit kann ich dann in .X Models umwandeln.Leider exportiert nicht die Textur bzw den Pfad der Textur mit.
Ich hab dann spaßenshalber die .X geöffnet und per Hand die Textur eingetragen(viereck model).

Jedoch erscheint mein Model schwarz im Spiel.
Ich schreib hier mal den Code hin,wie ein Model(.X) bei mir ausgelesen wird.

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
...
private Vector3 _position;
        private float _radius;
        private Device _device;
        private string _meshFile;
        private float _scale;
        private Mesh _mesh = null;
        private Material[] _meshMaterials;
        private Texture[] _meshTextures;
...
        private void LoadMesh ( )
        {
            ExtendedMaterial[] materials = null;

            Directory.SetCurrentDirectory ( Application.StartupPath + @"\..\..\..\Resources\" );

            _mesh = Mesh.FromFile ( _meshFile, MeshFlags.Managed, _device, out materials );

            if ( ( materials != null ) && ( materials.Length > 0 ) )
            {
                _meshTextures  = new Texture [ materials.Length ];
                _meshMaterials = new Material [ materials.Length ];

                for ( int i = 0 ; i < materials.Length ; i++ )
                {
                    _meshMaterials[i] = materials[i].Material3D;
                    _meshMaterials[i].Ambient = _meshMaterials[i].Ambient;
                    _meshMaterials[i].Diffuse = _meshMaterials[i].Diffuse;

                    if ( materials[i].TextureFilename != null && ( materials[i].TextureFilename != string.Empty ) )
                        _meshTextures[i] = TextureLoader.FromFile ( _device, materials[i].TextureFilename );
                }
            }
        }

So...den Code hab ich von Beginning Game Development
Also von den Tutorials.
Alle anderen Models,die ich von einem Kumpel bekommen habe und die ,die von Microsoft Sampels sind, werden ordentllich dargestellt.

Kennt vielleicht einer das Problem?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

19.02.2006, 23:03

Jupp ich glaube ich weiß woran das liegt. Schau doch mal nach wie die Materialen Farben definiert sind. Am leichtesten geht das per Breakpoint im Code.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

19.02.2006, 23:09

hm...hab vorhin mal im Microsoft Forum nachgeschaut,da scheint einer ein ähnliches Problem gehabt zu haben.Und es wurde auch erwähnt das das irgendwie mit den Material farben zusammenhängt.
Wo setze ich die richtig?
Hab noch nicht so richtig viel Erfahrung ^^'

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

19.02.2006, 23:21

Zum einfachen setzen diese Zeilen hier:

_meshMaterials.Ambient = _meshMaterials[i].Ambient;
_meshMaterials[i].Diffuse = _meshMaterials[i].Diffuse;

in

_meshMaterials[i].Ambient = RGB(255,255,255);
_meshMaterials[i].Diffuse = RGB(255,255,255);

ändern(sollte zumindest funzen ->nicht getestet)

Aber das überschreibt natürlich alle Farbangaben, was nicht gerade ideal ist...
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

5

19.02.2006, 23:49

_meshMaterials.Ambient = _meshMaterials[i].Ambient;
_meshMaterials[i].Diffuse = _meshMaterials[i].Diffuse;

Ambient hat (255,0,0,0); also schwarz und
Diffuse hat (255,16,13,255) also blau

Hab zwar in Maya gemacht,das das model die Farbe blau hat.
Aber auch das es eine Textur hat.Diese wurde aber nicht mit exportiert(pfad nicht)

thx für die antwort

6

21.02.2006, 09:53

so...ich beschreib jetzt nochmal von vorne.

Also.Ich habe gestern ordentlich herumgetestet und folgende Sachen festgestellt.

1. Wenn ich ein normales Modell bei mir einfüg und das anstrahle(Point und auch Spot) wird alles so wie man sich das vorstellt angezeigt.
Hier dieses Modell
Hier das Bild wies aussieht

2. Dann bin ich zu dem 2. Model (links unten) und das Licht,was den Planeten angestrahlt hatte, angelassen.
Hier das Bild
Wie man sieht wird das Model mit Texturen angezeigt(bild mit schriftzug).

3. Hab ich dann das Licht vom Planeten ausgeschalten,was ja zuvor das eigentliche Objekt indirekt angestrahlt hat.
Und hab direkt vor diesem Objekt ein Licht gemacht.
Hier das Bild
Wie man sieht wird nun keine Textur angezeigt.Warum auch immer

Hier das 2. Modell

So...Der Meshloader ist ja ganz oben dargestellt. Wenn ihr sonst irgendwelchen Code braucht,dann poste ich den gerne.

Die Frage die mich bedrückt ist, warum das erste Model(planet) direkt angestrahlt werden kann und das 2. nicht.
Im DirectX Viewer werden beide normal dargestellt.Nur scheint beim 1.kein effect zu seien wie beim 2.(blinn-material ähnlich)

Im Compiler hab ich bei Test herausgefunden,dass das 1. Modell eine Dimension hat und das 2. Modell aber 2 Dimensionen hat.Leider kann ich die 2.Dimension nicht enfernen und daher wird es wohl an meinem Meshloader liegen.Das der eventuell probleme hat,eins dieser 2 auszuwählen.

Gruß Gaara

7

22.02.2006, 13:56

kann bitte jemand helfen?
Ich weiß echt nicht was ich jetzt machen soll.

Werbeanzeige