JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Direct3D Grundlagen Tutorial
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 23:06    Titel: Antworten mit Zitat

boah was soll man dazu sagen? einfach big fat THX!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 38
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 04:54    Titel: Antworten mit Zitat

Hi Patrick,

ich hab schonmal einen Verbesserungsvorschlag. Smile

In deinen Tutorials 1-6 hast du für einen Fenstermodus AdjustWindowRect benutzt um die Fenstergröße anzupassen. Dabei ist mir aufgefallen, dass das RECT nicht verändert wird. Es bleibt bei 0,0,800,600. Das liegt an den Window Styles. Du musst WS_CAPTION beim globalen window_style hinzufügen.

Auszug MSDN
WS_CAPTION
Creates a window that has a title bar (includes the WS_BORDER style).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 38
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 05:59    Titel: Antworten mit Zitat

Ich hab einen weiteren Tipp für dich, der sich auf das texture-Tutorial bezieht.

In intro::restore würde ich den vertex rect Teil folgendermaßen erweitern.
CPP:
   const float fTexX = 0.5f / 800.0f;
   const float fTexY = 0.5f / 600.0f;

        // Rechteck
    vertex rect[] =
    {
            // x,      y,    z,      color, u,         v,
        {   0.0f,   0.0f, 0.5f, 0xFFFFFFFF, 0 + fTexX, 0 + fTexY},
        { 800.0f,   0.0f, 0.5f, 0xFFFFFFFF, 1        , 0 + fTexY},
        { 800.0f, 128.0f, 0.5f, 0xFFFFFFFF, 1        , 1},
        {   0.0f, 128.0f, 0.5f, 0xFFFFFFFF, 0 + fTexX, 1},
    };

Dadurch wird das Texturing in einer 2D-Umgebung(sprich: bei gesetzter orthogaler Projektionsmatrix) verbessert, wenn der POINT (Nearest Neighbour) Filter aktiviert ist.

Hier ist ein Screenshot. Da sieht man den Unterschied.
Vergleiche die obere mit der unteren Darstellung. (Die obere ist die fehlerhafte; achte auf die Kante oben und links)

P.S. Ich hab die Textur aus Testzwecken etwas verändert. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 12:02    Titel: Antworten mit Zitat

Moin,

zum WS_CAPTION: Nimm mal WS_CAPTION dazu und dann Drück ein paar mal F1 (Wechsel zwischen Vollbild/Fenstermodus). Im Fenstermodus greift das gerenderte Bild über die Titelleiste hinweg und das ist sicherlich nicht im Sinne des Erfinders Smile

Ok dadurch wird alles halt etwas gequetscht aber besser als gar nichts Smile Ich werd das im darauf folgenden Tutorial etwas abändern, das das Bild bei 800x600 bleibt im Fenstermodus und das Fenster automatisch vergrößert wird auf 810x350 Smile oder ich baue Streching ein, damit man im Fenstermodus das Bild strecken kann Smile

Zu den Texturen: Ich seh nur einen extrem minimalen unterschied, kann auch hier wieder an der streckung im Fenstermodus liegen. Ich gucks mir auf jedenfall nochmal genauer an wenn ich richtig wach bin Smile

- Patrick
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 38
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 15:47    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Moin,

zum WS_CAPTION: Nimm mal WS_CAPTION dazu und dann Drück ein paar mal F1 (Wechsel zwischen Vollbild/Fenstermodus). Im Fenstermodus greift das gerenderte Bild über die Titelleiste hinweg und das ist sicherlich nicht im Sinne des Erfinders Smile

Ja. Jetzt sehe ich es auch. Aber den Wechsel zwischen Fullscreen und Fenstermodus muss man doch irgendwie besser hinkriegen können.
Ansonsten kannst du AdjustWindowRect direkt weglassen, da das überflüssig ist.

Patrick hat Folgendes geschrieben:

Zu den Texturen: Ich seh nur einen extrem minimalen unterschied, kann auch hier wieder an der streckung im Fenstermodus liegen. Ich gucks mir auf jedenfall nochmal genauer an wenn ich richtig wach bin Smile

Mmmh. Also mir fällt sowas direkt ins Auge. An der Streckung des Fensters liegt es diesmal nicht, da der Bereich in dem gerendert wird genau 800 mal 600 groß ist. Beim Verschieben der Polygonplatte können auch Darstellungsfehler der Textur auftreten.

Noch was.
Du schreibst HWND__*, obwohl HWND auch ausreichen würde. Wozu hat Microsoft denn die ganzen Definitionen gemacht. Wink

Du benutzt als EntryPoint WinMain. Wäre es nicht sinnvoller bei einer reinen UNICODE Anwendung wWinMain als EntryPoint zu verwenden? thinking
Du musst konsequent sein. Beim dritten Parameter der Main-Funktion steht char* cmdLine. Ich würde wchar_t* cmdLine benutzen.

Du schreibst ::ZeroMemory (&hwnd, sizeof(::HWND));.
Empfinde ich als etwas überflüssig. Es reicht hwnd = NULL;
Andererseits steht sonst nicht alles einheitlich untereinander. Wink

Bei setTexture benutzt eine stlmap. Das stelle ich mir ziemlich rechenaufwändig vor. Bei einer Framerate von 25 und 3 verschiedenen Texturen muss der Computer 25 mal pro Sekunde 3 verschiedene wStrings innerhalb der Map finden. (Zeichen vergleichen usw.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 16:13    Titel: Antworten mit Zitat

Hi,

das AdjustWindowRect bringt was, wenn man das Programm direkt im Fenstermodus startet Smile Ich mags halt gerne mittig *g*

Zum Strecken der Textur: Nein im Fenstermodus ist das Fenster 800x600 der Clientberech (in den Gerendert wird) ist kleiner aber es wird eine 800x600 Orthomatrix erstellt, das bedeutet streckung Smile

naja bei mir ist ein HWND so deklariert:
CPP:
#define HWND HWND__*

und beim Compiler meines Freundes so:
CPP:
typedef HWND__* HWND;


Deshalb hab ich halt die Urversion genommen Smile Hat auch damit was zu tun, das ich vor 10 Jahren auf NT Systemen auch so gecodet habe ^^

Ich hab WinMain aus gutem Grund genommen, pass auf es gibt ja die Funktion RegisterClassEx wo der Fehler dann ausgeführt wird "WinNT wird vorausgesetzt", wenn ich jetzt wWinMain benutze startet das Programm noch nicht mal wenn das OS kein UNICODE unterstützt und es kommt nur die Fehlermeldung "Dieses Programm ist keine Zulässige Win32 Anwendung blabla" Smile

ZeroMemory: Das HWND hat 1 Argument namens unused vom typ "int", interessanterweise wird über dieses Argument die ID abgelegt. Smile

Schreib ich jetzt einfach:
CPP:
hwnd = NULL;

wird das argument nicht auf 0 gesetzt sondern hat noch immer seinen Defaultwert der idR. nie 0 ist Smile Deshalb ZeroMemory Smile


::std::map, ich hab tests gemacht mit einem vector und einer map, die map hat den Vorteil das sie je nach implementierung eine Hashmap intern ablegt für schnelleren zugriff. Bei einem vector (oder list) muss ich jede String einzeln prüfen für alle Texturen, bei einer map geb ich den String an, die Hashmap geht die charaktere durch und sortiert bis nur noch 1 Eintrag da ist und der wird zurückgeworfen Smile

Bei meinen Tests mit 6.000 Texturen hat die map gegenüber vector und list am besten abgeschnitten Smile

- Patrick
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 35
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 20:06    Titel: Antworten mit Zitat

Hmmm ich habs mir auch angeschaut. Aber ich kann keins kompilieren, es kommt: 'std' kein namespace oder klasse mit diesem namen, oder so...
Außerdem gibts Fehler bei der Zeile mit den Assemblerdingens...liegt das an meim Compiler? Hab den von der Autorenedition Confused

Sonst find ichs chill. Very Happy
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:13    Titel: Antworten mit Zitat

Hi,

lass mich raten: VC++6, gell? Smile da musst du die :: vor dem std entfernen.

Den Assemblercode kann der VC++6 natürlich nicht ohne SIMD-Pack compilieren. deshalb einfach auskommentieren Smile Die Programme wurden ja auch auf den VC++7.0 oder höher zugeschnitten Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:21    Titel: Antworten mit Zitat

Wir warten...
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:25    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:
Wir warten...
Question
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:26    Titel: Antworten mit Zitat

Natürlich auf dein nächstes tut Very Happy
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:28    Titel: Antworten mit Zitat

Ihr seit wie die Geier *ggg*

Bin ja schon dabei Smile

Diesmal: Textausgabe (Ohne GDI, Bitmaps oder D3DX) und die Maus Smile evtl. sind auch schon Buttons für Menüs drin Smile

Dauert aber noch was ^^ Qualität braucht seine Zeit ^^
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 42
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 12.02.2005, 22:40    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Diesmal: Textausgabe (Ohne GDI, Bitmaps oder D3DX) und die Maus Smile evtl. sind auch schon Buttons für Menüs drin Smile


just make it clap just make it clap just make it clap just make it clap just make it clap just make it clap just make it clap
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 13.02.2005, 00:07    Titel: Antworten mit Zitat

So Textausgabe und Mausmanager laufen einwandfrei, jetzt mach ich nur noch die Buttonklasse und setz es dann morgen Mittag online Smile Vorher geh ich pennen und morgen mach ich dann noch das Changelog fertig, es hat sich wieder einiges getan Smile

- Patrick
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 38
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.02.2005, 01:05    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Hi,

das AdjustWindowRect bringt was, wenn man das Programm direkt im Fenstermodus startet Smile Ich mags halt gerne mittig *g*

Ich dachte MoveWindow sorgt für das Zentrieren.

Patrick hat Folgendes geschrieben:

Zum Strecken der Textur: Nein im Fenstermodus ist das Fenster 800x600 der Clientberech (in den Gerendert wird) ist kleiner aber es wird eine 800x600 Orthomatrix erstellt, das bedeutet streckung Smile

Ja das stimmt.
Mein Screenshot stammt allerdings von der Version, bei der ich die Styles mit WS_CAPTION erweitert habe. Was wiederum zur Folge hat, dass das AdjustWindowRect das Fenster entsprechend anpasst. Somit ist der ClientBereich genau 800*600 groß und es erfolgt keine Streckung.
Lässt sich anhand des Screenshots überprüfen.
Direct3D baut schon mal gerne Mist beim Mapping der Textur mit dem POINT-Filter.
Siehe... D3DXCreateTextureFromFileEx Problem
Die Lösung dafür habe ich oben beschrieben. Ist ja nur ein Vorschlag.

Patrick hat Folgendes geschrieben:

Ich hab WinMain aus gutem Grund genommen...

Das ist einleuchtend.

Patrick hat Folgendes geschrieben:

ZeroMemory: Das HWND hat 1 Argument namens unused vom typ "int", interessanterweise wird über dieses Argument die ID abgelegt. Smile

Schreib ich jetzt einfach:
CPP:
hwnd = NULL;

wird das argument nicht auf 0 gesetzt sondern hat noch immer seinen Defaultwert der idR. nie 0 ist Smile Deshalb ZeroMemory Smile

Aha. Man lernt nie aus.


Patrick hat Folgendes geschrieben:

Bei meinen Tests mit 6.000 Texturen hat die map gegenüber vector und list am besten abgeschnitten Smile

Krass, das hast du alles getestet. Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Projekte Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter
Seite 4 von 6

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum