Seite 1 von 1
Darstellung eines Polygons mit Direkt3d
Verfasst: 30.06.2006 08:29
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.
Verfasst: 30.06.2006 12:44
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
villeicht gantz nützlich:
http://www.purebasic-lounge.de/viewtopic.php?t=2863
Verfasst: 30.06.2006 14:41
von PureLust
Such mal im CodeArchiv nach "polygon", da dürftest Du was finden.
Gruß, PL.
Verfasst: 30.06.2006 15:25
von dllfreak2001
ich glaub danilo hat hier mal mit ner dx9lib rumgebstelt
Verfasst: 01.07.2006 11:50
von estate
Im Codearchiv finde ich leider nur ganz nomale Polygone mit nur einer Farbe.
Verfasst: 06.07.2006 16:47
von Stefan
Welche Direct3D Version möchtest du verwenden D3D7, D3D8 oder D3D9 ?
2D oder 3D ?
Verfasst: 07.07.2006 12:36
von estate
Eigentlich will ich nur möglichst effizienz texturierte Polygone darstellen.
Sprite3d ist viel langsam für meine Zwecke.
Verfasst: 07.07.2006 15:09
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.
Verfasst: 07.07.2006 16:29
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
Verfasst: 09.07.2006 08:44
von estate
Danke vielmals!