Darstellung eines Polygons mit Direkt3d

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Darstellung eines Polygons mit Direkt3d

Beitrag von estate »

Hallo,
für mein neues Projekt muss ich einzellne Polygone darstellen können.
Sprite3d ist ja viereckig. Gibt es eine Möglichkeit, gleich direkt mit ein 3eckiges Polygon darzustellen?
Damit währe mit viel geholfen.
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Mit Open GL ja, aber DX/3D krig ich nicht zum laufen.
Ich fände es super wenn jemand schreibt wie es geht.
schohn mal :allright:

villeicht gantz nützlich:
http://www.purebasic-lounge.de/viewtopic.php?t=2863
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Such mal im CodeArchiv nach "polygon", da dürftest Du was finden.

Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

ich glaub danilo hat hier mal mit ner dx9lib rumgebstelt
I´a dllfreak2001
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Im Codearchiv finde ich leider nur ganz nomale Polygone mit nur einer Farbe.
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Welche Direct3D Version möchtest du verwenden D3D7, D3D8 oder D3D9 ?
2D oder 3D ?
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Eigentlich will ich nur möglichst effizienz texturierte Polygone darstellen.
Sprite3d ist viel langsam für meine Zwecke.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

ahh, gutes Deutsch du sprechen :).
Unter OpenGL ist das afaik einfacher zu handhaben. Ich habe zwar noch
nicht mit DirectX gearbeitet, was mich eigentlich zu der Stellungnahme
disqualifiziert aber ich habe mit OpenGL gearbeitet und es dort als recht
einfach empfunden. Es gab zwar 1-2 Probleme, aber die Leute hier aus
dem Board konnten mir dabei helfen.
Bild
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Ist zwar nicht die schnellste Lösung, aber dafür einfach:

Code: Alles auswählen

#D3DPT_TRIANGLESTRIP=5
#D3DFVF_XYZRHW=4
#D3DFVF_TEX1=256

Structure MyVertex
x.f
y.f
z.f
rhw.f
tu.f
tv.f
EndStructure


;Gibt das Direct3D Device zurück
Procedure GetD3DDevice()
!EXTRN _PB_Direct3D_Device
!MOV EAX,[_PB_Direct3D_Device]
ProcedureReturn 
EndProcedure

;Zeichnet ein Triangle strip
Procedure DrawTriStrip(Sprite,*Ptr,NumVertices)
D3DDevice.IDirect3DDevice7=GetD3DDevice()
D3DDevice\SetTexture(0,PeekL(IsSprite(Sprite)))
ProcedureReturn D3DDevice\DrawPrimitive(#D3DPT_TRIANGLESTRIP,#D3DFVF_TEX1|#D3DFVF_XYZRHW,*Ptr,NumVertices,0) 
EndProcedure


InitSprite()
InitSprite3D()

OpenWindow(1,0,0,640,480,"D3D7 Triangle strips")
OpenWindowedScreen(WindowID(1),0,0,640,480,0,0,0)

LoadSprite(1,"C:\PB4\Examples\Sources\Data\Background.bmp",#PB_Sprite_Texture)

Dim v.MyVertex(4)

Repeat


ClearScreen(0)
Start3D()


; ein Dreieck zeichnen
v(0)\x=50
v(0)\y=50
v(0)\rhw=1.0 
v(0)\tu=0 ; horizontalen texture koordinate (0.0 bis 1.0)
v(0)\tv=0 ; vertikale texture koordinate (0.0 bis 1.0)

v(1)\x=100
v(1)\y=50
v(1)\rhw=1.0
v(1)\tu=1
v(1)\tv=0

v(2)\x=50
v(2)\y=100
v(2)\rhw=1.0
v(2)\tu=0
v(2)\tv=1

DrawTriStrip(1,@v(0),3)


; ein Fünfeck zeichnen
v(0)\x=200
v(0)\y=150
v(0)\rhw=1.0
v(0)\tu=0
v(0)\tv=0

v(1)\x=400
v(1)\y=200
v(1)\rhw=1.0
v(1)\tu=1
v(1)\tv=0

v(2)\x=300
v(2)\y=400
v(2)\rhw=1.0
v(2)\tu=0
v(2)\tv=1

v(3)\x=400
v(3)\y=250
v(3)\rhw=1.0
v(3)\tu=1
v(3)\tv=0.5

v(4)\x=500
v(4)\y=400
v(4)\rhw=1.0
v(4)\tu=1
v(4)\tv=1

DrawTriStrip(1,@v(0),5)


Stop3D()
FlipBuffers()

Until WindowEvent()=#PB_Event_CloseWindow
estate
Beiträge: 110
Registriert: 10.09.2004 08:53
Wohnort: nähe Graz
Kontaktdaten:

Beitrag von estate »

Danke vielmals!
Antworten