Laden...

Forenbeiträge von mcs Ingesamt 8 Beiträge

01.07.2008 - 19:43 Uhr

hi,

ist ein bisschen schwer ohne den restlichen Code, aber was mir aufgefallen ist:



Graphics.Instance.getDevice().SetTexture(0, Graphics.Instance.getTexture(textures[i].TextureID));  // hier 
                        Graphics.Instance.getDevice().TextureState[0].ColorArgument1 = Microsoft.DirectX.Direct3D.TextureArgument.TextureColor;
                        Graphics.Instance.getDevice().TextureState[0].ColorOperation = Microsoft.DirectX.Direct3D.TextureOperation.SelectArg1;

                        Graphics.Instance.getDevice().SetTexture(1, Graphics.Instance.getTexture(textures[i].TextureID)); // und hier (textures[i]) zweimal die gleiche Textur


mfg

01.07.2008 - 19:25 Uhr

hi,

habe vor kurzem auch mit einem kleinen Spiel angefangen und kämpfe auch an allen Ecken und Enden mit Problemen ;O).
Zum Timer: Ich denke für deinen Verwendungszweck kann man den wahrscheinlich einspannen (sowohl den aus Threading wie auch aus Forms) ansonsten würde ich dir als Alternative die kernel32 dll (QueryPerformanceCounter) empfehlen, da viel genauer (der aus Forms liegt glaube ich im 20ms Bereich und ist auch nicht exakt also mal 19ms mal 20 usw, wenn ich das richtig im Kopf habe..)
Zum TexturenSpeicherFressProblem: Ne Art Textur Cache würde hier wahrscheinlich helfen. Einfach ne Klasse mit ner Funktion welcher du die gewünschte Textur angibst und die diese dann lädt und in nem Dictionary speichert, beim nächsten mal muss die Textur so nicht neu geladen werden.

pseudocode


Dictionary<String, Texture> dict;

getTexture(String Path) {
  if (dict.ContainsKey(Path) {
     dict.Add(Path, getTextureFromFile(Path);
    // Fehlerbehandlung...
  }
  return dict.get(Path);
}

Aber irgendein Problem besteht schon, ausser deine Texturen sind zusammen 256MB gross ;O).
Hier kann ich dir den Antsprofile empfehlen gib ne Testversion davon, einfach mal googeln. Damit kannst du dir anzeigen lassen welche Objekte wieviel Platz beanspruchen und kommst so evtl dem Problem auf die Spur. Was ich mir aber vorstellen könnte ist, dass der Garbage Collector einfach noch nicht durch ist, resp. da du die Texturen relativ oft neu lädst, kommt er sozusagen nicht nach...

mfg

06.06.2008 - 14:15 Uhr

Danke für Deine Antwort, war mir bei den Heightmaps nicht so sicher wie z.B. überhängende Steilwände zu realisieren sind und wie ich dann denn Rest (Bäume, Flüsse usw.) mit der reinen Heightmap verbinden soll. Oder z.B. war in einem Video zu Starcraft 2 so eine Art Raumschifflandeöffnung seitlich im Terrain, ist zwar so wie es aussah nicht zugänglich für den Spieler, aber die Schatten der darüberfliegenden Einheiten "gingen da rein" also scheint es nicht nur ne Textur zu sein die 3 dimensional wirkt... Darum habe ich mich gefragt wie die Jungs die Starcraft entwickeln, dass so machen. Ich nehme mal an die werden einen Leveleditor geschrieben haben, der dann ein riesiges Mesh erzeugt?

Guter Buchtipp - liegt hier gleich bei mir auf dem Tisch das Buch 😉

Gruss
Michael

06.06.2008 - 12:24 Uhr

Hallo zusammen,

ich habe vor kurzem ein Ingamevideo zu Starcraft 2 gesehen. Und seit dem juckt es mich in den Fingern auch ein 3D Strategiespiel zu schreiben. Ich hab mir einige Gedanken dazu gemacht und bin für den Anfang schon mal zufrieden wenn ich ein 3D Level hinkriege auf dem sich eine simple Einheit (ein Würfel oder so) dumm rumbewegt. Nun mein erstes Problem: wie werden die Levels in einem Spiel wie Startcraft 2 realisiert. Einige meiner Überlegungen:

  • ein riesiges Mesh (stelle ich mir jedoch etwas problematisch in Bezug auf die Performance vor, ausser man würde das irgendwie teilweise laden oder einzelne Sektor Meshes...?)
  • irgendein Binärfile mit Höhenwerten (für jeden Pixel wohl etwas übertrieben und mit interpolieren, resp. Kurven (evtl. Bezier) durchlegen, aber was wenn ich eine schiefe Ebene will...)
  • heightmaps mit Koordinatenfile für Bäume usw?
  • ...

schlussendlich muss wohl auch noch ein Level Editor her, auf dem ich so Krimskram wie Bäume usw. raufpappen kann, Texturen wären auch nicht schlecht 😄. Wie würde ich das lösen? Wenn ich das Level mit einem Mesh realisieren würde wäre wohl die Sache mit der Textur relativ einfach, die könnte man soweit ich weiss einfach dem Mesh File mitgeben? Müssten dann Bäume und ähnliche Elemente die evtl. manipuliert werden müssen als subset auf die Terrainmesh..?

und noch so'n paar Sachen für später 😁

  • Geländeverformung, Bäume umwalzen, fliessende Gewässer usw.

wie man sieht habe ich nicht gross Ahnung von der Materie und zu jeder meiner Überlegungen sind mir auch passende Probleme in den Sinn gekommen darum dachte ich mir ich frage mal nach wie das denn so professionell gelöst wird bevor ich mir den Kopf endültig zerbreche, da mir auch google nicht so recht helfen konnte..

Es würde mich grundlegend interessieren wie die Sache mit den Levels professionell gelöst wird - am liebsten bei Starcraft 2 😉 - oder was ihr von meinen Ansätzen haltet

Vielen Dank schon mal im Voraus
Michael

16.01.2007 - 13:26 Uhr

Danke Euch beiden für die Antworten, die Sache mit BlckBox sieht interessant aus - werd mich da mal reinlesen.

@Borg: bist Du Dir sicher, dass explorer.exe diese Arbeit übernimmt? Denn wenn ich den Prozesse beende verschwindet zwar die Startleiste, der Windowmanager zeigt sich davon jedoch unbeeindruckt. Und nenn versteckten zweiten explorer.exe Prozess kann ich mir nicht so recht vorstellen, selbst lsass ist ja z.B. ersichtlich.

12.01.2007 - 21:31 Uhr

Hallo zusammen

ich habe mich gefragt ob es eine Möglichkeit gibt den Windows eigenen Window Manager und oder die GUI (nur die Oberfläche) sofern diese nicht fest miteinander verbunden sind zu ersetzen, resp. Windows in einem Konsolemodus zu betreiben.

Was ich machen möchte wäre ein Versuch eines 3D beschleunigten Desktops ähnlich dem von MacOSX oder Vista z.B. möchte ich die Expose Funktion nachbauen.

Ich denke irgendwie müsste es zumindest theoretisch möglich sein. Ich denke da an die Möglichkeit des Umstellens von Luna zu XP Style.

Hat irgendwer eine Idee ob das hinhaut und wenn wie?

Besten Dank im Voraus
Michael

23.01.2005 - 13:51 Uhr

Original von hauptmann
spiel mal ein wenig mit den Parametern rum. Also z.B. das Vertex Processing mal auf Software stellen oder.

Danke für Deine Hilfe Hauptmann, die Parameter hatte ich schon bei allen, bei welchen dies möglich war auf software gestellt, hatte damit aber leider keinen Erfolg. Nun habe ich aber vor kurzen Visual Studio 2003 installiert und siehe da, es läuft. Sonst hat sich meines Wissens nichts relevantes geändert kein neuer GraKa Treiber, keine Neuinstallation von DirectX überhaupt nichts, aber was solls Hauptsache es funktioniert. Nochmals danke, bin sehr gespannt auf die weiteren Teile deines Tutorials - immer weiter so.

mcs

13.11.2004 - 16:22 Uhr

Hi,

echt super das Tutorial 👍, habe lange nach etwas in dieser Art gesucht.
Leider habe ich ein kleines Problem beim nachvollziehen, vielleicht kann mir jemand helfen.

Beim Erstellen des Device fall ich ins catch

m_Device = new Device(Manager.Adapters.Default.Adapter,DeviceType.Hardware,this,CreateFlags.HardwareVertexProcessing,pp);

Microsoft.DirectX.Direct3D.InvalidCallException

ErrorString: D3DERR_INVALIDCALL
ErrorCode: -2005530516

StackTrace
" at Microsoft.DirectX.Direct3D.Device..ctor(Int32 adapter, DeviceType deviceType, Control renderWindow, CreateFlags behaviorFlags, PresentParameters[] presentationParameters)

Hab mal rumgegoogelt, aber diesen Fehler nur im Zusammenhang mit Shadern und zu alten Grafikkarten gefunden, sollte hoffentlich bei mir kein Problem sein. Die neueste Shaderversion unterstützt meine Graka zwar nicht, aber um n blaues Fenster anzuzeigen sollte es wohl noch reichen 🙂

Ich arbeite mit Visual Studio 02 und hab ne Mobility Readeon 7500

TIA