Primitive Rendern- wie macht man?

Anfängerfragen zum Programmieren mit PureBasic.
ReneMiner
Beiträge: 58
Registriert: 20.07.2007 14:54
Wohnort: zwischen Westerwald und Siegerland

Primitive Rendern- wie macht man?

Beitrag von ReneMiner »

Ich hab PB erst seit gestern :)

Der Grund es zu kaufen war ganz einfach- bisher hab ich nur vb6 bzw. zig verschiedene andere, ältere Basic-Versionen benutzt. vb6 kann leider nur bis DirectX 8.1 umgehen- ich wollt aber nun mal etwas moderner werden und mit der Zeit gehen- auf der PB-Packung stand eben: "Einfaches Einbinden von DirectX 9 möglich" - da musst ich's haben.

Jetzt zu meiner Frage:

Wie erstelle ich ein DirectX9-Objekt so das ich die DirectX9-Funktionen (wie DrawPrimitiveUp) zum Rendern primitiver Shapes (z.B. TriangleList, TriangleStrip, LineList usw) benutzen kann? Gibts vieleicht sogar schon irgendwo eine fertige, einbindbare Routine wie z.B. beim enthaltenen DirectDraw-Beispiel?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

DX9 ist einbindbar mit einem dementsprechenden subsystem.
http://www.purebasic.fr/german/viewtopic.php?t=7623

wieviel dieser special-functions von DX9 die du erwähnt hast dort zur verfügung stehen, weiß ich nicht.

die umstellung der nativen funktionen auf DX9 ist allerdings in arbeit.

sorry, dass du auf ne leicht irreführende werbung reingefallen bist,
aber PEARL ist nicht der Hersteller von PB, nur ein Vertreiber.
und vertreiber übertreiben auch gerne mal.
da kann das programmierer-team nix für...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
ReneMiner
Beiträge: 58
Registriert: 20.07.2007 14:54
Wohnort: zwischen Westerwald und Siegerland

Beitrag von ReneMiner »

Kaeru Gaman hat geschrieben:...

die umstellung der nativen funktionen auf DX9 ist allerdings in arbeit.

sorry, dass du auf ne leicht irreführende werbung reingefallen bist,
aber PEARL ist nicht der Hersteller von PB, nur ein Vertreiber.
und vertreiber übertreiben auch gerne mal.
da kann das programmierer-team nix für...
1.

Wäre "traumhaft" wenn die DX9-Funktionen als "direkte" Befehle zur Verfügung stünden. So bewandert bin ich leider nicht das ich mir die ganze Chose aus'm Ärmel schütteln könnte- ich hab bisher noch nichtmal rausfinden können in welcher der vielen .dll's die entsprechenden Funktionen zu finden sind - ich tät vieleicht noch das Übertragen der in der DXSDK-Hilfe beschriebenen Strukturen hinkriegen...

OGRE überzeugt mich auch nicht so richtig- verwirrt bin ich darüber das ein eigentlich DX-basiertes Koordinatensystem verwendet wird (Y-Achse Senkrecht) - OGRE aber doch OpenGL (also Z-Achse Senkrecht?) verwendet- irgendwie passt das nicht so recht zusammen - Physik schön und gut aber ich fänd's besser wenn pb nicht so in dieser Richtung "festgefahren" wäre sondern alternativ eine DX9Engine mitbrächte die dem pb-User ein paar mehr Freiheiten lässt - wie das Benutzen einfacher X-Meshes oder eben das Rendern von Primitiven

Und 2.

Nix PEARL- der Vertreiber heisst dtp-entertainment-AG, ausserdem steht auch auf der Packung ich habe 10-Jahre-kostenlose-Upgrades mitbezahlt- aber wenn ich Smart-Update starte dann muss ich irgendein Passwort & E-Mail eingeben- hab aber garkeins :(
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das account mit password musst du meines wissens bei purebasic.com anfordern...
ich meine mich zu erinnern, dass es letztens schon einen fall gab, wo das relativ reibungslos funktioniert hat.

wenn du auf nummer sicher gehen willst, schreib ne PN Freak,
der gehört zum entwicklerteam.

scheint aber die aktuelle version zu sein, die auch von PEARL vertrieben
wird - sieht das cover genauso aus wie in dem thread den Fluid verlinkt hat?


DX sollte früher oder später wie jeder andere API-Aufruf funktionieren - der grundbefehl ergänzt um ein underscore.
(abgesehen von den nativen PB-Befehlen, die auf der Windows-Version DX benutzen)
beispiel:

Code: Alles auswählen

SendMessage_(hdc0, #WM_SETREDRAW, #False, 0)
hierbei ist SendMessage() der native API-call aus der MSDN,
mit einem underscore dran ruft man den ganz einfach ausm PB-code auf.

bei openGL funktioniert das grundsätzlich, jedoch mit einer einschränkung:
für befehle, die 64bit-argumente brauchen, braucht man noch import-befehle vorher,
weil die momentane API-implementierung nur 32bit-argumente unterstützt.
davon abgesehen ist openGL in PB genauso verwendbar wie in C++

für DX9 bleibt zu hoffen, dass das in absehbarer zeit auch komplett so ansprechbar ist...

die OGRE-implementierung ist schon ein wenig älter - Fred hat sich
die letzten zwei jahre mehr auf die optimierung der Application-fähigkeiten
und die schnelle umsetzung auf allen drei plattformen beschäftigt.

dass jetzt auch die spiele-fähigkeiten mal wieder dran wären,
wurde schon von verschiedenen seiten in allen communities gewünscht....

es gibt aber auch gute wrapper für Irrlicht, DreamMotion und XTreme3D
http://www.purebasic.fr/english/viewtopic.php?t=27118

ja, das sind engines, keine APIs, aber vielleicht auch für dich brauchbar.. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
ReneMiner
Beiträge: 58
Registriert: 20.07.2007 14:54
Wohnort: zwischen Westerwald und Siegerland

Beitrag von ReneMiner »

Ob das Cover so aussieht wie in dem oben verlinkten Thread kann ich nicht sagen: in dem Thread wird bei mir kein Bild gezeigt und wenn ich das Symbol rechtsklicke und die Grafik laden will bekomm ich 'ne Fehlermeldung- aber darum solls hier nicht gehen- alo auf meinem Cover steht "3D Game Developer", PureBasic 4 und es ist ne halbnackte blonde Schönheit mit nem roten Bogen drauf :D

Also mir wär's auch recht und ich könnt' noch ein halbes Jahr warten bis der InitDX9()-Kram sozusagen zur pb-Muttersprache gehört denn ich muss mich ja sowieso erstmal etwas da reinfummeln.

Z.B. ist das *-Zeichen nirgends dokumentiert, genausowenig wie der .BITMAP-Variablen-Typ - wer weiss was noch alles man erst nach zigmal durchlesen der Example-Listings herausfindet...
das das * wohl sowas wie ein Zeiger auf ne Speicherstelle oder byRef bedeuted beginne ich jetzt erstmal zu ahnen ;)

Zunächst werd ich mich also mal darauf beschränken mit simplen 2D-Spielereien zu üben um mit der Sprache etwas vertrauter zu werden
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> auf meinem Cover steht "3D Game Developer", PureBasic 4 und es ist ne halbnackte blonde Schönheit mit nem roten Bogen drauf
sic. diese ausgabe meinte ich. ist identisch mit der von pearl.

> das das * wohl sowas wie ein Zeiger auf ne Speicherstelle oder byRef bedeuted beginne ich jetzt erstmal zu ahnen
so ist es. das ist auch dokumentiert. in der Help\Verschiedene Themen\Zeiger und Speicherzugriff
auch an anderen stellen wird drauf eingegangen.
falls die mitgelieferte Help nicht aktuell ist, die aktuelle findest du auf der PureArea.
siehe dazu auch hier: http://www.purebasic.fr/german/viewtopi ... 175#160175
und auch innerhalb vieler forenthemen wird drauf eingegangen, weil immer wieder jemand dazu fragen hat.
einfach auch mal fleißig umsehen... ;)

> ist .. nirgends dokumentiert.. der .BITMAP-Variablen-Typ
das wiederum dürfte eine API-structure sein.
1. die IDE besitzt einen structure-viewer, und ein autocomplete, wo man auch API einschalten kann
2. der komplette API-stuff ist nicht in der PB help, weil das systemspezifisch ist.
für windows kannst du dich diesbezüglich an die MSDN wenden...

> Zunächst werd ich mich also mal darauf beschränken mit simplen 2D-Spielereien zu üben um mit der Sprache etwas vertrauter zu werden
das ist auf jeden fall ne gute idee.
die 2D-Geschichten (und ein paar special effects) sind schon länger implementiert,
wunderbar ausgereift, schnell, und super geeignet um kleine games zu proggen.

kleines beispiel: Diamondshift
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Hallo ReneMiner... wenn du direkte DirectX9 Anbindung haben willst dann empfehle ich dir die kostenlose Visual Basic.Net express Version bei Microsoft runter zu laden. Wenn das nämlich das Feature ist auf das du am meisten wert legst, dann ist PureBasic eine schlechte wahl.

Beim Koordinatensystem von OpenGL ist die z-Achse übrigens nicht die von oben nach unten... die Achsen sind bei beiden Koordinatensystemen identisch angeordnet, der einzige unterschied ist, dass bei OpenGL die z-Achse in den Bildschirm hinein negativ hoch zählt, bei DirectX positiv. Der Achsenvektor zeigt also bei OpenGL gewissermaßen auf den Betrachter und bei DirectX in den Bildschirm.

Ein weiterer unterschied ist, dass OpenGL unverständlicherweise mit Grad arbeitet, DirectX so wie man es erwarten würde mit Radianten.

Die Bezeichnung "3D Game Developer" kannst du durchstreichen... die Integration der 3D Engine ist rudimentär, mit PB ein 3D Spiel schreiben damit nicht weniger Aufwand als mit anderen Programmiersprachen auch.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die Achsen sind bei beiden Koordinatensystemen identisch angeordnet, der einzige unterschied ist, dass bei OpenGL die z-Achse in den Bildschirm hinein negativ hoch zählt, bei DirectX positiv.
für sich alleine sagt das wenig... wie ist die y-achse polarisiert?
wenn aufwärts, was logisch wäre, dann hat also openGL ein linkshändiges koordinatensystem wie POV.
Understanding POV-Ray's Coordinate System
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

x und y Achse sind wie man es gewohnt ist bei einem zweidimensionalen kartesischen Koordinatensystem, also rechts positiv und oben positiv.
Antworten