PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]wieso WinAPI statt .NET


amida maru
2008-01-01, 20:39:09
Hallo. Wieso benutzen die meisten C++ programmierer eigentlich WinAPI obwohl C++ auch mit .NET kompatibel ist?

Thomas(:
2008-01-01, 20:54:46
Hallo. Wieso benutzen die meisten C++ programmierer eigentlich WinAPI obwohl C++ auch mit .NET kompatibel ist?

C++ != C++.NET

amida maru
2008-01-01, 21:24:40
????

Trap
2008-01-01, 21:34:26
Man kann in .NET kein C++ benutzen. Nur C++/CLI oder managed C++ und beides ist kein C++

amida maru
2008-01-01, 22:43:55
wieso machen die das dann net so das man auch "C++" benutzen kann?

Coda
2008-01-01, 22:45:38
Kann man ja mit C++/CLI. Nur ist das dann kein platformunabhängiges C++ mehr. Wobei das mit .NET eh vorbei ist.

Zudem muss man dann managed code verwenden, was potentiell langsamer ist.

Trap
2008-01-01, 23:02:25
wieso machen die das dann net so das man auch "C++" benutzen kann?
Weil sie .NET nicht für C++ ändern wollen und es beim bestehenden .NET nicht klar ist wie man "C++" dafür implementieren kann.

Demirug
2008-01-01, 23:02:26
Kann man ja mit C++/CLI. Nur ist das dann kein platformunabhängiges C++ mehr. Wobei das mit .NET eh vorbei ist.

Zudem muss man dann managed code verwenden, was potentiell langsamer ist.

C++/CLR kennt auch den mixed mode.

Deswegen nimmt man ja gerne C++\CLR wenn man einen managed Wrapper schreiben will.

rotalever
2008-01-01, 23:18:54
Was willst du denn mit WinAPI?

amida maru
2008-01-02, 13:04:47
tja jetzt wird mit DirectDraw angefangen^^

][immy
2008-01-02, 13:54:04
tja jetzt wird mit DirectDraw angefangen^^
direct draw solltest du nach möglichkeit nicht mehr einsetzen, da es von microsoft nicht mehr weiterentwickelt wird. die komplette entwicklung geht nur noch in direct3D (wie man ja an vista unschwer erkennen kann).

amida maru
2008-01-02, 14:01:27
ist mir klar ;). Aber für Direct3D direkt für 2D gibts fast keine tutorials. Ich habe jedenfalls keine gefunden. Und DD ist ein guter einstieg in DirectX.

MfG
Tibo

rotalever
2008-01-02, 14:28:25
Also für OpenGL hab ich in 10minuten folgendes gefunden (da du dich ja schon ein wenig mit SDL auskennst):

Textur/Grafik/Sprite laden (wie auch immer du es nennen willst)...
http://gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL
oder
http://www.devolution.com/pipermail/sdl/2002-September/049078.html
wobei das letzte definitiv funktioniert und das erste noch ein bisschen was zu initialisierung von SDL und co sagt.

http://www.libsdl.org/archives/sdldoc-ps.zip (ab ca. seite 18 kommt was zu opengl)

Zwischen 3d und 2d gibt auch nur sehr wenige Unterschiede:
-Viewport wird ein wenig ander gemacht, insb. keine Perspektive sondern Orthogonal oder wie das noch gleich hieß

Markus89
2008-01-02, 15:39:47
In OpenGL kann man einfach mit glOrtho in den "2D-Modus" umschalten, wodurch es keine 3D Perspektive mehr gibt.

Die Z-Koordinate dient dann nurnoch zum unterscheiden von Vorder- und Hintergründen.

Aber du willst ja bei DirectDraw bleiben...

rotalever
2008-01-02, 15:44:57
In OpenGL kann man einfach mit glOrtho in den "2D-Modus" umschalten, wodurch es keine 3D Perspektive mehr gibt.

genau. das meinte ich

Aber du willst ja bei DirectDraw bleiben...
Und ich will ihn überzeugen, dass er es nicht machen soll ;)

The_Invisible
2008-01-02, 20:00:24
reines sdl reicht für ein 2d-rpg auch.

ich hatte so 1-3% cpu auslastung (c2d@3ghz) für ein 800x600 vollbildscrolling inklusive ein paar animierte sprites, geschrieben in c# + sdl.net

mfg

rotalever
2008-01-02, 20:07:48
reines sdl reicht für ein 2d-rpg auch.

ich hatte so 1-3% cpu auslastung (c2d@3ghz) für ein 800x600 vollbildscrolling inklusive ein paar animierte sprites, geschrieben in c# + sdl.net

mfg
Und ich hatte 100% Auslastung bei irgendso einem Spiel, das mit SDL gemacht wurde. Und es lag an der Grafik.

Coda
2008-01-02, 20:17:59
Das liegt dann am Gameloop. Der ist normal so ausgelegt, dass die CPU einen busy-loop macht bis die GPU fertig ist. Das kann man aber auch anders machen.

rotalever
2008-01-02, 20:33:17
Das liegt dann am Gameloop. Der ist normal so ausgelegt, dass die CPU einen busy-loop macht bis die GPU fertig ist. Das kann man aber auch anders machen.
Was macht denn die GPU bei SDL großes?

Coda
2008-01-02, 21:06:00
Lesen -> Verstehen -> Posten.

tokugawa
2008-01-02, 21:26:18
ist mir klar ;). Aber für Direct3D direkt für 2D gibts fast keine tutorials. Ich habe jedenfalls keine gefunden. Und DD ist ein guter einstieg in DirectX.


Eher nicht. DirectDraw ist schon so alt, dass es nicht mehr wirklich geeignet ist als Einstieg in DirectX. Da ist Direct3D als modernste Komponente eher geeignet.

DirectDraw macht nur mehr auf Windows Mobile Sinn, und auch dort gibt's mittlerweile schon Mobile Direct3D.

rotalever
2008-01-02, 22:17:51
Lesen -> Verstehen -> Posten.
achso danke.:|

Coda
2008-01-02, 22:59:31
Die GPU rendert immer so schnell wie es geht. Dann hast halt 10 Mio. FPS. Die CPU-Auslastung wird nicht unter 100% fallen.

Wenn du das anders haben willst musst du einen Frame-Limiter einbauen usw.

rotalever
2008-01-02, 23:03:54
Die GPU rendert immer so schnell wie es geht. Dann hast halt 10 Mio. FPS. Die CPU-Auslastung wird nicht unter 100% fallen.

Wenn du das anders haben willst musst du einen Frame-Limiter einbauen usw.
Achso das meinst du..
Ich hatte eigentlich gemeint, dass ich eine 2D (afaik SDL) Anwendung hatte, die so 30fps produziert hat und eben eine Auslastung von 100%. Und wenn man die Auflösung hochgestellt hat, waren es nur noch gut 10fps. Wollte damit sagen, dass man Hardwarebeschleunigung immer nutzen sollte, wenn sie vorhanden ist.

Coda
2008-01-02, 23:10:11
SDL verwendet aber eigentlich Hardwarebeschleunigung auch für die 2D-Funktionen.

The_Invisible
2008-01-03, 01:14:09
Achso das meinst du..
Ich hatte eigentlich gemeint, dass ich eine 2D (afaik SDL) Anwendung hatte, die so 30fps produziert hat und eben eine Auslastung von 100%. Und wenn man die Auflösung hochgestellt hat, waren es nur noch gut 10fps. Wollte damit sagen, dass man Hardwarebeschleunigung immer nutzen sollte, wenn sie vorhanden ist.

ich hatte ebenfalls ein 30fps limit und die auslastung tümpelte im einstelligen prozent-bereich herum. kommt halt draufan ob man die 33ms pro frame wirklich füllt oder den ungenutzen teil idlen lässt.

mfg

Shink
2008-01-04, 10:02:55
Wenn du keine allzu ambitionierten Ziele hast ist für 2D die eingesetzte Bibliothek relativ egal - HW-Beschleunigung bieten so gut wie alle und Performance versemmelt man sicher am ehesten durch "Dummheit".
SDL wäre sicher nicht die schlechteste Wahl und OpenGL oder Direct3D wäre lehrreich (wenn auch komplizierter).

PatkIllA
2008-01-04, 10:14:33
Meine XNA und MDX Anwendungen kommen im Fenster nicht über die Bildwiederholfrequenz. CPU Auslastung dann je nachdem wievel Calls abgeetzt wurden.

Gast
2008-01-04, 13:01:05
SDL verwendet aber eigentlich Hardwarebeschleunigung auch für die 2D-Funktionen.
Zumindest für die X-Server Version stimmt das meines Wissens nach nicht.

rotalever
2008-01-04, 13:23:03
Zumindest für die X-Server Version stimmt das meines Wissens nach nicht.
Hab ich auch immer das Gefühl oder warum laufen bei mir OpenGL schneller als SDL (gleiche Anwendung nur anderer Renderer)? Hmm... liegt wohl an der Hardwarebeschleunigung... Wollte ich das nicht schon die ganze Zeit sagen....

Coda
2008-01-04, 15:34:23
2D-Hardwarebeschleunigung != 3D-Hardwarebeschleunigung.

3D ist natürlich um einiges schneller heute, aber Stretch/Bitblits sind trotzdem auch in 2D hardwarebeschleunigt.

rotalever
2008-01-04, 16:31:38
2D-Hardwarebeschleunigung != 3D-Hardwarebeschleunigung.

3D ist natürlich um einiges schneller heute, aber Stretch/Bitblits sind trotzdem auch in 2D hardwarebeschleunigt.
Mag sein, aber was am Ende (für den User) zählt ist Gesamtgeschwindigkeit und da hat man eben mit 3D Beschleunigung deutlich die Nase vorn. Und darum geht es natürlich letztendlich. Sicher, man bekommt das auch mit SDL vernünftig hin, aber man muss da bei der Entwicklung deutlich mehr aufpassen. Und nichts ist blöder, als wenn das erste größere Projekt zwar gut ist, aber aufgrund von Unerfahrenheit (die ich jetzt einfach mal unterstelle, ohne zu sagen, dass das schlimm ist) zu langsam für die meisten PCs ist und man es deshalb in die Tonne treten kann. Da macht man das ganze lieber mit OpenGL oder DirectX und hat gleich mehrere Vorteile: 1. i.d.R. schneller, 2. Lerneffekt für später, wenn man mal was mit 3D machen will.

Gast
2008-01-04, 16:39:37
2D-Hardwarebeschleunigung != 3D-Hardwarebeschleunigung.

3D ist natürlich um einiges schneller heute, aber Stretch/Bitblits sind trotzdem auch in 2D hardwarebeschleunigt.
Mag sein, wird aber von SDL so trotzdem nicht Hardwaremäßig unterstützt.

Coda
2008-01-04, 16:55:29
Unter Windows wird DirectDraw verwendet. Das ist hardwarebeschleunigt.

Gast
2008-01-04, 17:25:25
Naja wie gesagt unter X11 zumindest nicht.

amida maru
2008-01-04, 18:36:40
Naja ich habe ja ein sehr gutes eBook wo 400 seiten DD ist. Ich werds mir auf jedenfall mal reinziehen. Und wenn wer tutorials für D3D9 extra für 2D hat dann immer nur her damit :).
Hmm wird es bald irgendwas neues geben was WinAPI ersetzt?

MfG
Tibo

Markus89
2008-01-04, 19:28:26
.Net ist ja wohl sowas wie ein "Nachfolger" der WinAPI.

rotalever
2008-01-04, 20:23:01
400seiten ebook? Was soll denn da alles drinstehen? Meiner Meinung braucht man doch nur
Fenster initialisieren
Bilder in den Speicher laden
Blenden/Blitten (oder wie das auch immer heißen mag) von geladenen Bildern auf den Backbuffer
Backbuffer umdrehen
Bisschen Tastatur I/O und Maus und das wars schon, damit kann man meiner Meinung schon sehr viel machen.
Kann man sowas nicht in 2 Seiten abhandeln?

Ich weiß nicht, ob du es bereits angeschaut hast, aber hier ist ein Tutorial zu OpenGL mit 2d, hab ich bereits gepostet. Ich sehe auch keinen Grund, warum man nun ausgerechnet DirectX lernen muss. OpenGL hat eigentlich schon paar Vorteile.
http://gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL

tokugawa
2008-01-05, 02:44:39
400seiten ebook? Was soll denn da alles drinstehen? Meiner Meinung braucht man doch nur
Fenster initialisieren
Bilder in den Speicher laden
Blenden/Blitten (oder wie das auch immer heißen mag) von geladenen Bildern auf den Backbuffer
Backbuffer umdrehen
Bisschen Tastatur I/O und Maus und das wars schon, damit kann man meiner Meinung schon sehr viel machen.
Kann man sowas nicht in 2 Seiten abhandeln?


Finde ich auch - gerade bei 2D!


Ich weiß nicht, ob du es bereits angeschaut hast, aber hier ist ein Tutorial zu OpenGL mit 2d, hab ich bereits gepostet. Ich sehe auch keinen Grund, warum man nun ausgerechnet DirectX lernen muss. OpenGL hat eigentlich schon paar Vorteile.
http://gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL

Naja, nicht nur Vorteile... ich würde jetzt an deiner Stelle keinem einreden dass OpenGL besser wäre als DirectX. Es ist letztendlich Geschmackssache, aber ich kenn viele OpenGL-Jünger, die nach diversen GLSL-Erlebnissen mittlerweile meinen dass sie auf DirectX umsteigen werden...

In diesem Fall würde ich jedoch auch OpenGL empfehlen, da Anfänger wohl bei der Fixed-Function Pipeline bleiben werden und vermutlich auch nicht viel mit FBOs machen werden, und man bei OpenGL einfach schneller (dank Immediate Mode) zu sichtbaren Ergebnissen kommt als bei DirectX.

Das angesprochene Tutorial lässt aber sich im Prinzip mit jeder 3D-API machen.

Ich finde amida maru sollte vielleicht mal grundlegend über die 3D-Rendering-Pipeline (speziell Viewing, weil genau dort findet ja der Kernpunkt bei "2D in einer 3D API" statt) sich schlau machen.

Vor allem engt man sich in der Sichtweise zu sehr ein wenn man 400 Seiten über 2D liest.

amida maru
2008-01-05, 12:41:48
Für mich steht in der nächsten zeit nur 2D-programmierung an.... Die leute in meinem alter die ich kenne fangen gleich mit 3D programmierung an weil sie denken sie können was ;). Dann starten sie ein Projekt und im nächsten jahr haben sie 50zeilen code :D. Naja In dem Buch steht am ende auch drin wie man ein Spiel proggt. Und genau das ist was ich suche. 2D Spiele mit sourcecode damit ich mir da was abgucken kann und die Techniken lerne^^. In dem eBook wird auch physik und AI behandelt und sowas

rotalever
2008-01-05, 12:45:23
Naja, nicht nur Vorteile... ich würde jetzt an deiner Stelle keinem einreden dass OpenGL besser wäre als DirectX. Es ist letztendlich Geschmackssache, aber ich kenn viele OpenGL-Jünger, die nach diversen GLSL-Erlebnissen mittlerweile meinen dass sie auf DirectX umsteigen werden...

Natürlich auch OpenGL ist nicht nonplusultra, aber meiner Meinung nach ist es auch nicht schlecht ein solches Cross-Platformtoolkit zu beherrschen. Wer weiß, was nach Vista kommen wird? Apple wird langsam immer beliebter und Linux wird auch schon vorinstalliert verkauft. Programmiert man eine Anwendung richtig, braucht man sie nur noch für das andere System zu kompilieren. Nicht das ich damit sagen möchte, dass Windows bald ausstirbt, aber ein bisschen im Hinterkopf behalten sollte man es meiner Meinung nach schon.

Zu GLSL kann ich nichts sagen, ich benutze nur CG Shader von Nvidia und das funktioniert eigentlich prima.

del_4901
2008-01-05, 13:02:52
Ich bin auch von OpenGL geheilt! Wenn ich selber noch auf der API rumkrebse dann nur noch mit DX10. Da kommt man meiner Meinung nach schnell zu Ergebnissen! GLSL ist eine einzige Krankheit, es ist echt arm das die bis heute noch kein Effect-File-Format haben. Ich hab ja auch früher Cg genommen, das ist aber für einen Einsteiger ein ganz schöner Hammer. Wie gesagt DX10 ist da schön einfach.

amida maru
2008-01-05, 21:41:18
ah ich habe eine kleine Frage hier der Code:

#define WIN32_LEAN_AND_MEAN
#include "windows.h"

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
const char szHello[] = "Hello";
MessageBoxW(NULL,szHello, "Hahaha", MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);

return (0);
}

der compiler sagt mir folgendes:
'MessageBoxW': Konvertierung des Parameters 2 von 'const char [6]' in 'LPCWSTR' nicht möglich
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Wenn ich den string direkt übergebe funzts auch net... und wenn ich das W beim MessageBox bezeichner weglasse kommt der gleiche fehler wieso?

Gast
2008-01-05, 22:11:16
^^

wchar_t *label = L"Hallo";
wchar_t *text = L"Hallo";

MessageBox(NULL, text, label, MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);

Neomi
2008-01-05, 22:32:36
Entweder Unicode durchgängig nutzen, wie es der Gast vor mir schon macht, oder...

- TCHAR und entsprechende generische Makros und Funktionen nutzen, das ist wohl die flexibelste Variante und mappt je nach Setting auf ANSI bzw. Unicode.
- In den Projektsettings auf Multibyte-Charset umstellen, evtl. noch UNICODE-Defines in den Präprozessor-Settings entfernen. Dazu dann das generische MessageBox statt MessageBoxW nutzen.
- Explizit ANSI-Funktionen benutzen, in dem Fall also MessageBoxA.

Wie kommst du eigentlich auf die Idee, MessageBoxW direkt zu nutzen?

Elemental
2008-01-05, 22:42:04
Das erinnert mich daran, wie ich die ganzen verschiedenen string-Typen in C++ immer gehasst habe. BSTR, CComBSTR, _bstr_t etc.

In .NET ist es so schön einfach...

Coda
2008-01-05, 22:48:51
Wieso? Man verwendet std::string und std::wstring und gut is...

Elemental
2008-01-05, 23:26:21
Nicht wenn man sich mit COM rumschlagen muss...

Coda
2008-01-06, 00:24:10
Inwiefern? Ich kenne COM nur von DirectX und dort will die API immer einen Pointer auf entweder einen char* oder wchar_t*. Dann benützt du halt .c_str() auf std::basic_string.

Elemental
2008-01-06, 09:58:26
Ich kenne COM so, dass in Interfaces nur BSTR akzeptiert wird. Bin aber weiss Gott kein COM Experte...

Gast
2008-01-06, 10:47:30
Gib doch mal den Download-Link zum E-Book! Oder ist das nicht frei erhältlich?

amida maru
2008-01-06, 11:14:08
zu meinem ebook? das habe ich von nem freund geschickt bekommen^^. Ach und wieso vor dem string ein großes L: wchar_t text = L"..."; ?

Coda
2008-01-06, 16:52:55
Weil's ein wchar_t-String ist.

tokugawa
2008-01-06, 17:29:08
Natürlich auch OpenGL ist nicht nonplusultra, aber meiner Meinung nach ist es auch nicht schlecht ein solches Cross-Platformtoolkit zu beherrschen. Wer weiß, was nach Vista kommen wird? Apple wird langsam immer beliebter und Linux wird auch schon vorinstalliert verkauft. Programmiert man eine Anwendung richtig, braucht man sie nur noch für das andere System zu kompilieren. Nicht das ich damit sagen möchte, dass Windows bald ausstirbt, aber ein bisschen im Hinterkopf behalten sollte man es meiner Meinung nach schon.


Das fettgedruckte ist der große Knackpunkt. Das ist ein immenser Aufwand OpenGL so zu programmieren dass man wirklich "nur mehr für das andere System" kompilieren braucht (mal abgesehen davon dass man sowieso plattformabhängige Teile in OpenGL immer hat, wenn man keine Lib wie SDL oder GLUT verwendet, also GLX oder WGL und ähnliches).

Es ist auf keinen Fall trivial OpenGL wirklich plattformunabhängig zu programmieren (vor allem nicht wenn man State-of-the-Art-Technik verwendet, weil genau da hapert's dann). Vor allem wenn es schon auf einer Plattform zwischen mehreren Vendors (ATI und NVIDIA nämlich) unglaubliche Diskrepanzen gibt. Oder nur bei einem Vendor mit unterschiedlichen Treiberversionen.

Ich glaube wer sich schon etwas mehr mit OpenGL auf mehreren Plattformen + State-of-the-Art-Technik (das ist der Knackpunkt, einfache Fixed-Function-Sachen sind natürlich kein Problem, aber schon wenn man FBOs verwendet gibt's Troubles) gemacht hat, weiß davon ein Lied zu singen.

Aber das ist alles natürlich nicht schlecht, um bisserl plattformunabhängig programmieren zu lernen. Auch wenn in der Industriepraxis "plattformunabhängig programmieren" oft heißt DirectX für den PC-Port, und die jeweilige "native" API für die andere Plattform (wenn man Richtung Konsolen denkt etwa).


Zu GLSL kann ich nichts sagen, ich benutze nur CG Shader von Nvidia und das funktioniert eigentlich prima.

Jo, Cg ist super. GLSL ist ein Graus.

amida maru
2008-01-06, 18:20:48
und wie kann ich nem wchar_t einen anderen wchar_t zuweisen? So?
wchar_t *text1 = L"Hallo";
wchar_t *text2 = text1;

?

rotalever
2008-01-06, 19:11:45
und wie kann ich nem wchar_t einen anderen wchar_t zuweisen? So?
wchar_t *text1 = L"Hallo";
wchar_t *text2 = text1;
?
Es kommt drauf an, was du machen willst. Meinst du mit zuweisen "kopieren"? Da müsstest du wohl zunächst einmal Speicher für text2 beantragen also

wchar_t *text2 = new wchar_t [strlen (text1)+1];

ob strlen auch bei wchar funktioniert, weiß ich nicht, aber es gibt sicherlich Alternativen.
Und anschließend dann text1 nach text2 rüberkopieren. Da gibt es bestimmt eine Methode für, sowie strcpy bei char.
Man könnte doch auch memcpy benutzen, oder?


Ich glaube wer sich schon etwas mehr mit OpenGL auf mehreren Plattformen + State-of-the-Art-Technik (das ist der Knackpunkt, einfache Fixed-Function-Sachen sind natürlich kein Problem, aber schon wenn man FBOs verwendet gibt's Troubles) gemacht hat, weiß davon ein Lied zu singen.

Ja natürlich, aber ich glaube kaum, dass unser Threadstarter in der nächsten Zeit sowas machen würde. Zumal man bei 2D die meisten Sachen davon sowieso nicht braucht.
Ist denn DirectX in dem Gebiet besser? Habe noch nie was mit DX gemacht..

Coda
2008-01-06, 20:44:57
Einfach std::wstring verwenden... C-Strings sind auch mit wchar_t böse.

tokugawa
2008-01-06, 21:30:45
Ja natürlich, aber ich glaube kaum, dass unser Threadstarter in der nächsten Zeit sowas machen würde.
Zumal man bei 2D die meisten Sachen davon sowieso nicht braucht.


Ja, das stimmt allerdings. Würde daher auch OpenGL empfehlen für den Threadstarter.


Ist denn DirectX in dem Gebiet besser? Habe noch nie was mit DX gemacht..

Naja, bei DirectX muß man sich weniger Sorgen machen dass sich etwas auf einer anderen GPU komplett anders verhält. Aber es hat natürlich seine eigene Riege an Problemen.

Einsteigerfreundlicher ist jedenfalls schon OpenGL, vor allem wenn man ein Framework wie SDL verwendet das die plattformabhängigen Teile versteckt.

Coda
2008-01-06, 22:02:22
Einsteigerfreundlicher ist OpenGL ganz allein wegen den Immediate-Mode-Functions. Sonst wegen nix imho.

amida maru
2008-01-22, 20:39:45
lol OpenGL initialisieren ist eine reine zumutung... da brauchst du 5millionen zeilen code bis du irgendein fenster bekommst...

Monger
2008-01-22, 21:17:14
Wenn ich heute was mit 2D Grafik machen wollte (und mehr machen muss als nur mal ein paar Pixel auf ne Leinwand zu pinseln), würde ich zu XNA greifen. Sieht in meinen Augen ausgesprochen gut strukturiert aus, und scheint wohl von ganz kleinen bis zu mittelgroßen Projekten völlig ausreichend zu sein.
Kenn mich da zu wenig aus, aber mein Eindruck ist dass XNA insbesondere die Spieleentwicklung auf dem PC SEHR nachhaltig prägen wird.

rotalever
2008-01-22, 21:40:11
lol OpenGL initialisieren ist eine reine zumutung... da brauchst du 5millionen zeilen code bis du irgendein fenster bekommst...
Hast du das Tutorial durchgelesen, was ich verlinkt habe? Vermutlich nicht. Das ist weder Zumutung noch sonst was sondern eigentlich relativ wenig. Genaugenommen "initialisiert" man OpenGL mit nur sehr wenigen Befehlen.

Falls du aber nicht weißt wie man an den Anfang des Threads kommt, hier noch mal der Link...
http://gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL

Da macht man sich Mühe, und such mit Google extra noch Tutorials raus, und dann wird das vermutlich noch nicht einmal angeschaut.
Eigentlich schade.

tokugawa
2008-01-22, 21:50:18
lol OpenGL initialisieren ist eine reine zumutung... da brauchst du 5millionen zeilen code bis du irgendein fenster bekommst...

Was genau haben "Fenster" mit OpenGL-Initialisierung zu tun?

Ich glaube du verwechselst das mit der Fensterinitialisierung der Windows API.



amida maru, sorry, irgendwie klingst du nicht besonders kompetent, und für deine Kompetenz scheint du ein ziemlich großes Ego zu haben...

Wie wär's mit etwas mehr Bescheidenheit?

amida maru
2008-01-23, 14:40:41
wenn du mit reinem opengl arbeitest musst du ein Fenster erstellen. Das geht mit der winapi.
Die check ich ja auch. Aber in kombination mit OpenGl ist das echt nicht gut.
Sorry rotalever... ich habe die nehe tutorials angeschaut. Ich schau mir heute deins an :)
Für das SDL und OGL tutorial muss man ja auch viel in SDL können... muss man immer die ganzen formate und pixel ansprechen... das ist echt nicht schön... was bedeutet eigentlich
"// Check that the image's width is a power of 2"?

Greetz,
Tibo

patermatrix
2008-01-23, 14:53:50
was bedeutet eigentlich
"// Check that the image's width is a power of 2"?

Greetz,
Tibo
Die Breite des Bildes soll eine Zweierpotenz (2^n, n€N) sein.

The_Invisible
2008-01-23, 15:04:55
wenn du mit reinem opengl arbeitest musst du ein Fenster erstellen. Das geht mit der winapi.
Die check ich ja auch. Aber in kombination mit OpenGl ist das echt nicht gut.
Sorry rotalever... ich habe die nehe tutorials angeschaut. Ich schau mir heute deins an :)
Für das SDL und OGL tutorial muss man ja auch viel in SDL können... muss man immer die ganzen formate und pixel ansprechen... das ist echt nicht schön... was bedeutet eigentlich
"// Check that the image's width is a power of 2"?

Greetz,
Tibo

reines sdl ist im prinzip ganz einfach, wenn dir das schon probleme macht würde ich noch nen bogen um ogl/d3d machen.

mfg

Expandable
2008-01-23, 15:14:45
wenn du mit reinem opengl arbeitest musst du ein Fenster erstellen. Das geht mit der winapi.
Die check ich ja auch. Aber in kombination mit OpenGl ist das echt nicht gut.


Jaaaaa... und der Code zur Fenstererzeugung bei D3D ist exakt der selbe... also??

amida maru
2008-01-23, 15:49:02
ja... aber opengl initialisieren und alles drum und rum... das problem ist... die SDL tutorials erklären alles nur das grundlegendste...

rotalever
2008-01-23, 16:25:09
Wenn du aber das Grundlegenste noch nicht mal verstehst... Und mehr braucht man eig. sowieso nicht.

Außerdem ist die Fensterstellung sowie Nehe das macht eben ein bisschen mehr, sodass dier auch Fehler etc. angezeigt werden. Mit dem Tutorial was ich verlinkt hatte handeln die das mit SDL in ein paar Zeilen ab.

Texturen müssen in OpenGL immer eine Kantenlänge von einer Zweierpotenz (2,4,8,16,32,...) haben (mit einer Ausnahme, die soll dich aber nicht interessieren). Das ist aber kein Problem, wenn du eine Grafik von 90x60 pixel hast, packst du die halt in eine 128x64px Textur und lässt den Rest leer.

Expandable
2008-01-23, 16:36:23
ja... aber opengl initialisieren und alles drum und rum... das problem ist... die SDL tutorials erklären alles nur das grundlegendste...

Was ist da so kompliziert? Wenn du eine konkrete Frage stellst, kann ich gerne versuchen, sie dir zu beantworten. Im übrigen ist das bei D3D auch nicht einfacher.

Am einfachsten wäre es, du überlässt das Initialisierungszeugs einer Library wie GLUT, GLFW, SDL, SFML etc.

Texturen müssen in OpenGL immer eine Kantenlänge von einer Zweierpotenz (2,4,8,16,32,...) haben (mit einer Ausnahme, die soll dich aber nicht interessieren).

Sind NPOT-Texturen nicht seit OpenGL 2.0 im Core?

Markus89
2008-01-23, 16:38:07
Sie MÜSSEN das nicht haben, es kann aber auch vorkommen, dass du bei non-power of 2 Texturen einen Fehler bekommst.

amida maru
2008-01-23, 17:40:46
lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...

Gast
2008-01-23, 19:19:16
lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...
:lol::lol::lol:

rotalever
2008-01-23, 19:25:40
lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...
aha.

Besteht eigentlich irgendeine Verbindung zu diesem codinguser? :biggrin:

Markus89
2008-01-23, 20:16:36
lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...

Willst du die Leute hier eigentlich zum Narren halten, oder weißt du es wirklich nicht besser?

amida maru
2008-01-23, 21:08:50
vergessts einfach^^

SGT.Hawk
2008-01-23, 22:17:22
ICh weiß bei ihm immer nicht, ob was ernst gemeint ist oder er ein Spässchen draus macht, ich würde ihm ja gerne mal helfen, ich weiß aber nicht wie.:smile:

tokugawa
2008-01-23, 23:58:50
Ich persönlich finde amida maru sollte nach Tibet ziehen und in den Bergen einfacher Schafhirte werden.

amida maru
2008-01-24, 15:17:54
stfu^^

rotalever
2008-01-24, 15:41:34
Bitte closen, macht scheinbar keinen Sinn mehr.

Gast
2008-01-24, 15:56:36
wenn du mit reinem opengl arbeitest musst du ein Fenster erstellen. jetzt mußt du uns nur noch sagen, was "reines OpenGL" sein soll. Die OpenGL-API ohne alles? Mit der kannst du aber gar kein Fenster erstellen.
Um mit OpenGL zu arbeiten, brauchst du zwingend eine API, die dir Fenster liefert, damit OGL dann in die zeichnen kann. Das kann die Win32 sein, oder SDL, GLUT, QT, ... Sogar .NET ist möglich, wenn du ein entsprechendes OGL-Binding wie CsGL benutzt.

Das geht mit der winapi.
also wenn du um's verrecken die Win32 API benutzen willst...

Die check ich ja auch. Aber in kombination mit OpenGl ist das echt nicht gut.... dann brauchst du dich auch nicht beschweren.
Wenn du OGL+Win-API "echt nicht gut" findest, dann nimm halt nicht die Win-API.

Irgendwie habe ich den Eindruck, du denkst es gebe einen besonderen Zusammenhang zwischen "reinem OpenGL" und der Win-API. OpenGL hat mit der Win-API aber eigentlich gar nichts zu tun. OpenGL muß halt nur auf irgendeine API aufsetzen, die Fenster bereitstellt.

Gast
2008-01-24, 16:09:19
lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...du mußt ja nicht zwingend, wenn du eine 90*60 Grafik hast, die mit weißen (oder schwarzen) Pixeln auf 128*64 auffüllen, du kannst auch einfach (mit einem entsprechenden Grafikbearbeitungstool) die Grafik auf 128*64 strecken.
Was aber auch gehen sollte: die Grafik auffüllen, und dann beim Texturmapping nicht die ganze 128*64 Textur auf dein Polygon kleben, sondern nur den 90*60 Ausschnitt, glTexCoord2f ist dein Freund:

glTexCoord2f(0.0, 0.0); // oben links
glVertex3f(0.0, 0.0, 1.0);
glTexCoord2f(90.0/128.0, 0.0); // oben rechts
glVertex3f(1.0, 0.0, 1.0);
glTexCoord2f(90.0/128.0, 60.0/64.0); // unten rechts
glVertex3f(1.0, 1.0, 1.0);
glTexCoord2f(0.0, 60.0/64.0); // unten links
glVertex3f(0.0, 1.0, 1.0);

Die Auffüll-Texel fallen somit aus dem Rendering.

amida maru
2008-01-24, 20:02:11
danke Gast... das ist mal ne antwort

rotalever
2008-01-25, 11:57:06
Wenn man 2D-Grafik macht, sollte man die Bilder aber nicht auf die Texturgröße strecken. Das macht sie im Endeffekt am Ende noch unscharf.

Gast
2008-01-25, 12:52:48
danke Gast... das ist mal ne antwort
Ich glaub was dem Rest hier sauer aufstößt ist die Tatsache dass du mit solchen Aussagen

lol... das ist ja voll blöd wenn ein bild keine 2er potenz hat immer eine größere flächer erstellen muss... da lass ich das gleich sein.. das ist sowas von unflexibel...
den Entwicklern von Grafikchips, den Programmierern von Treibern & API und einer ganzen Menge anderer Leute die alle eine ganze Menge mehr Erfahrung als du haben pauschal Unwissen, Dummheit und Unflexibilität unterstellst. Nur weil du den Sinn von power-of-two Texturen nicht gleich siehst heißt das noch lange nicht dass es Blödsinn ist. Gewöhn dich dran.

TheGamer
2008-01-25, 13:18:57
wenn du mit reinem opengl arbeitest musst du ein Fenster erstellen. Das geht mit der winapi.



So ein Bullshit. Und was heisst schon rein lol

Ja sicher gehts mit der Winapi, aber eben auch sonst. und ich meine nicht sdl oder was weiss gott was (ich glaube das ist fuer dich unrein :D)

Aber was du schon fuer eine scheisse in diesem Forum verzapft hast musst du viel an dir aendern das mal etwas aus dir etwas in dem Bereich.

amida maru
2008-01-25, 14:40:19
jojo super informatiker :D

TheGamer
2008-01-25, 14:50:32
Im Gegenteil zu dir habe ich erhalte meine paar tausender im Monat aufgrund programmieren. Das liegt wohl daran das ich es nicht beherrsche. :rolleyes:


Ich schliesse mich einigen in diesem Thread an und plaediere fuer eine Schliessung dieses uneinsichtigen Kindergarten hier. Danke.