|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 11.02.2005, 22:06 Titel: |
|
|
boah was soll man dazu sagen? einfach big fat THX! |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 03:54 Titel: |
|
|
Hi Patrick,
ich hab schonmal einen Verbesserungsvorschlag.
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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 04:59 Titel: |
|
|
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. |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.02.2005, 11:02 Titel: |
|
|
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
Ok dadurch wird alles halt etwas gequetscht aber besser als gar nichts 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 oder ich baue Streching ein, damit man im Fenstermodus das Bild strecken kann
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
- 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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2005, 14:47 Titel: |
|
|
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 |
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 |
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.
Du benutzt als EntryPoint WinMain. Wäre es nicht sinnvoller bei einer reinen UNICODE Anwendung wWinMain als EntryPoint zu verwenden?
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.
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.02.2005, 15:13 Titel: |
|
|
Hi,
das AdjustWindowRect bringt was, wenn man das Programm direkt im Fenstermodus startet 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
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 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"
ZeroMemory: Das HWND hat 1 Argument namens unused vom typ "int", interessanterweise wird über dieses Argument die ID abgelegt.
Schreib ich jetzt einfach:
wird das argument nicht auf 0 gesetzt sondern hat noch immer seinen Defaultwert der idR. nie 0 ist Deshalb ZeroMemory
::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
Bei meinen Tests mit 6.000 Texturen hat die map gegenüber vector und list am besten abgeschnitten
- 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 |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 12.02.2005, 19:06 Titel: |
|
|
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
Sonst find ichs chill. _________________ "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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:13 Titel: |
|
|
Hi,
lass mich raten: VC++6, gell? da musst du die :: vor dem std entfernen.
Den Assemblercode kann der VC++6 natürlich nicht ohne SIMD-Pack compilieren. deshalb einfach auskommentieren Die Programme wurden ja auch auf den VC++7.0 oder höher zugeschnitten _________________ '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 |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:21 Titel: |
|
|
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:26 Titel: |
|
|
Natürlich auf dein nächstes tut _________________ »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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:28 Titel: |
|
|
Ihr seit wie die Geier *ggg*
Bin ja schon dabei
Diesmal: Textausgabe (Ohne GDI, Bitmaps oder D3DX) und die Maus evtl. sind auch schon Buttons für Menüs drin
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 |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 12.02.2005, 21:40 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Diesmal: Textausgabe (Ohne GDI, Bitmaps oder D3DX) und die Maus evtl. sind auch schon Buttons für Menüs drin |
_________________ 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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.02.2005, 23:07 Titel: |
|
|
So Textausgabe und Mausmanager laufen einwandfrei, jetzt mach ich nur noch die Buttonklasse und setz es dann morgen Mittag online Vorher geh ich pennen und morgen mach ich dann noch das Changelog fertig, es hat sich wieder einiges getan
- 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 |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.02.2005, 00:05 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Hi,
das AdjustWindowRect bringt was, wenn man das Programm direkt im Fenstermodus startet 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
|
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.
Schreib ich jetzt einfach:
wird das argument nicht auf 0 gesetzt sondern hat noch immer seinen Defaultwert der idR. nie 0 ist Deshalb ZeroMemory
|
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
|
Krass, das hast du alles getestet. |
|
Nach oben |
|
|
|
|
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
|