des commandes purebasic pour dessiner sous directX

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

des commandes purebasic pour dessiner sous directX

Message par kelly »

bon, j'espere que sur ce forum on pourra me renseigner car voila : ya til des commandes directX en purebasic qui permette de dessiner des traits, des cercles, des triangles et autres polygones ? car jusqu'a present, je "dessine en openGL" mais c'est la galere et il semblerait que ogre dessine en non openGL (enfin j'me comprends =)
Dernière modification par kelly le jeu. 09/sept./2004 18:10, modifié 1 fois.
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Oui e purebasic tu peux faire des traits, des cercles et des carrés, il y a aussi un post sur le forum pour faire des triangles pleins. La meilleure façon de savoir si PureBasic correspond à tes besoins (et il correspond à tous les besoins :D :D ) c'est de telecharger la démo sur www.purebasic.fr
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

http://purebasic.myforums.net/viewtopic.php?t=9637
Ici il y avait tout ce que je voulais savoir pour programmer en directX (DirectX = Direct3D ??????) sous purebasic mais tous les liens de telechargements de cette page sont morts.
Comprends bien qu'un triangle plein, tout le monde peux le faire. La question n'est pas de savoir le faire mais la rapidité a laquelle le PC l'affichera. En openGL par exemple, j'affiche des triangles pleins a la vitesse de la lumiere (sous purebasic)! Mais je trouve des inconvenients a l'openGL que je ne pense pas trouver en D3D. Aussi, sous pure, les commandes openGL sont gltruc, glmachin, glbidule, donc, quelqu'un sait il ce que sont les commandes D3D ?
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

quelqu'un sait il ce que sont les commandes D3D ?
Oui, MicroSoft.
Sinon, j'ai retrouvé ça sur mon disque, je ne sais pas si ça t'aidera.

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2756&highlight=
; Author: Stefan Moebius
; Date: 06. November 2003

;Direct3D 8.0 Beispiel 

;Alle Farbwerte müssen im BGR Farbformat angegeben werden. 
Declare BGR(B,G,R) 
Declare D3D_SetPixel(x,y,color) 
Declare D3D_DrawLine(x1,y1,x2,y2,color) 
Declare D3D_OpenScreen(Width,Height,BPP,Title$) 
Declare D3D_Cls(color) 
Declare D3D_Box(x1,y1,x2,y2,color) 
Declare D3D_Flip() 
Declare D3D_End() 

Structure D3D_TLVERTEX8 
  x.f 
  y.f 
  z.f 
  rhw.f;res.l 
  color.l 
EndStructure 

Structure D3DPresent_Parameters 
  BackBufferWidth.l 
  BackBufferHeight.l 
  BackBufferFormat.l 
  BackBufferCount.l 
  MultiSampleType.l 
  SwapEffect.l 
  hDeviceWindow.l 
  Windowed.l 
  EnableAutoDepthStencil.l 
  AutoDepthStencilFormat.l 
  flags.l 
  FullScreen_RefreshRateInHz.l 
  FullScreen_PresentationInterval.l 
EndStructure 


#D3DFVF_XYZRHW=4 
#D3DFVF_DIFFUSE=64 

#D3DSWAPEFFECT_FLIP=2 
#D3DSWAPEFFECT_COPY=3 

#D3DCLEAR_TARGET=1 

#D3DADAPTER_DEFAULT=0 
#D3DDEVTYPE_HAL=1 
#D3DDEVTYPE_REF=2 
#D3DDEVTYPE_SW=3 

#D3DCREATE_SOFTWARE_VERTEXPROCESSING=32 
#D3DCREATE_HARDWARE_VERTEXPROCESSING=64 
#D3DCREATE_MIXED_VERTEXPROCESSING=128 

#D3DPT_POINTLIST=1 
#D3DPT_LINELIST=2 
#D3DPT_LINESTRIP=3 
#D3DPT_TRIANGLELIST=4 
#D3DPT_TRIANGLESTRIP=5 

#D3D_SDK_VERSION=220 

#D3DFMT_R5G6B5=23     ;16 Bit 
#D3DFMT_R8G8B8=20     ;24 Bit 
#D3DFMT_X8R8G8B8=22   ;32 Bit 

Procedure BGR(B,G,R) 
  ProcedureReturn RGB(B,G,R) 
EndProcedure 

Procedure D3D_OpenScreen(Width,Height,BPP,Title$) 
  Global D3DWnd.D3DPresent_Parameters 
  Global D3D.IDirect3D8 
  Global D3DDevice.IDirect3DDevice8 
  Dim Points.D3D_TLVERTEX8(10);$FFFF 
  
  Select BPP 
    Case 16 
      PixelFormat=#D3DFMT_R5G6B5 
    Case 24 
      PixelFormat=#D3DFMT_R8G8B8 
    Case 32 
      PixelFormat=#D3DFMT_X8R8G8B8 
  EndSelect 
  
  OpenWindow(1,0,0,Width,Height,#WS_POPUP,Title$) 
  Inst=OpenLibrary(1,"D3D8.dll") 
  If Inst 
    D3D.IDirect3D8=CallFunction(1,"Direct3DCreate8",#D3D_SDK_VERSION) 
    
    D3DWnd\SwapEffect=#D3DSWAPEFFECT_FLIP 
    D3DWnd\BackBufferWidth=Width 
    D3DWnd\BackBufferHeight=Height 
    D3DWnd\BackBufferCount=1 
    D3DWnd\BackBufferFormat=PixelFormat 
    D3DWnd\hDeviceWindow=WindowID() 
    Result=0 
    If D3D\CreateDevice(0,1,WindowID(),#D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice)=0 
      D3DDevice\SetVertexShader(#D3DFVF_XYZRHW|#D3DFVF_DIFFUSE) 
      Result=1 
      ShowCursor_(0) 
    Else 
      If D3D\CreateDevice(0,1,WindowID(),#D3DCREATE_SOFTWARE_VERTEXPROCESSING,D3DWnd,@D3DDevice)=0 
        D3DDevice\SetVertexShader(#D3DFVF_XYZRHW|#D3DFVF_DIFFUSE) 
        Result=1 
        ShowCursor_(0) 
      Else 
        MessageRequester("","Fehler") 
        End 
      EndIf 
    EndIf 
  EndIf 

  ;ProcedureReturn Result      ;PB Bug ??????? 
EndProcedure 


Procedure D3D_End() 
  ShowCursor_(-1) 
  CloseLibrary(1) 
EndProcedure 

Procedure D3D_Cls(color) 
  D3DDevice\Clear(0,0,#D3DCLEAR_TARGET,color,0.0,0) 
EndProcedure 

Procedure D3D_Box(x1,y1,x2,y2,color) 
  Re.RECT 
  Re\Left=x1:Re\Right=x2:Re\Top=y1:Re\Bottom=y2 
  D3DDevice\Clear(1,@Re,#D3DCLEAR_TARGET,color,0.0,0) 
EndProcedure 

Procedure D3D_Flip() 
  D3DDevice\Present(0,0,0,0) 
EndProcedure 

Procedure D3D_SetPixel(x,y,color) 
  Points(0)\x=x 
  Points(0)\y=y 
  Points(0)\color=color 
  D3DDevice\BeginScene() 
  D3DDevice\DrawPrimitiveUP(#D3DPT_POINTLIST,1,@Points(0),20) 
  D3DDevice\EndScene() 
EndProcedure 

Procedure D3D_DrawLine(x1,y1,x2,y2,color) 
  Points(0)\x=x1 
  Points(0)\y=y1 
  Points(0)\color=color 
  Points(1)\x=x2 
  Points(1)\y=y2 
  Points(1)\color=color 
  D3DDevice\BeginScene() 
  D3DDevice\DrawPrimitiveUP(#D3DPT_LINELIST,1,@Points(0),20) 
  D3DDevice\EndScene() 
EndProcedure 

Procedure D3D_Draw2ColorLine(x1,y1,x2,y2,Color1,Color2) 
  Points(0)\x=x1 
  Points(0)\y=y1 
  Points(0)\color=Color1 
  Points(0)\rhw=1 
  Points(1)\x=x2 
  Points(1)\y=y2 
  Points(1)\color=Color2 
  Points(1)\rhw=1 
  D3DDevice\BeginScene() 
  D3DDevice\DrawPrimitiveUP(#D3DPT_LINELIST,1,@Points(0),20) 
  D3DDevice\EndScene() 
EndProcedure 

Procedure D3D_DrawTriangle(x1,y1,x2,y2,x3,y3,Color1,Color2,Color3) 
  Points(0)\x=x1 
  Points(0)\y=y1 
  Points(0)\color=Color1 
  Points(0)\rhw=1 
  Points(1)\x=x2 
  Points(1)\y=y2 
  Points(1)\color=Color2 
  Points(1)\rhw=1 
  Points(2)\x=x3 
  Points(2)\y=y3 
  Points(2)\color=Color3 
  Points(2)\rhw=1 
  D3DDevice\BeginScene() 
  D3DDevice\DrawPrimitiveUP(#D3DPT_TRIANGLESTRIP,1,@Points(0),20) 
  D3DDevice\EndScene() 
EndProcedure 













;-Beispiel: 
D3D_OpenScreen(800,600,32,"Direct3D 8.0 Test") 




Start=GetTickCount_() 
Repeat 
  RandomSeed(80) 
  D3D_Cls(BGR(255,0,0));blau 
  For M=0 To 1000 
    x=Random(800) 
    y=Random(600) 
    D3D_Box(x,y,x+Random(100),y+Random(100),Random($FFFFFF)) 
  Next 
  ;Maus 
  GetCursorPos_(pt.POINT) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+20,pt\y+20,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x,pt\y+10,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+10,pt\y,0,$FFFFFF) 
  D3D_Flip() 
  WaitWindowEvent() 
Until GetTickCount_()-Start>5000 



Start=GetTickCount_() 
Repeat 
  RandomSeed(80) 
  D3D_Cls(0);schwarz 
  For M=0 To 1000 
    D3D_DrawLine(Random(800),Random(600),Random(800),Random(600),Random($FFFFFF)) 
  Next 
  ;Maus 
  GetCursorPos_(pt.POINT) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+20,pt\y+20,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x,pt\y+10,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+10,pt\y,0,$FFFFFF) 
  D3D_Flip() 
  WaitWindowEvent() 
Until GetTickCount_()-Start>5000 



Start=GetTickCount_() 
Repeat 
  RandomSeed(80) 
  D3D_Cls($FFFFFF);weiß 
  For M=0 To 10000 
    D3D_SetPixel(Random(800),Random(600),Random($FFFFFF)) 
  Next 
  ;Maus 
  GetCursorPos_(pt.POINT) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+20,pt\y+20,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x,pt\y+10,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+10,pt\y,0,$FFFFFF) 
  D3D_Flip() 
  WaitWindowEvent() 
Until GetTickCount_()-Start>5000 



Start=GetTickCount_() 
Repeat 
  RandomSeed(80) 
  D3D_Cls(BGR(128,0,0)) 
  D3D_DrawTriangle(400,0,800,600,0,600,$FFFFFF,0,BGR(0,255,255)) 
  ;Maus 
  GetCursorPos_(pt.POINT) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+20,pt\y+20,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x,pt\y+10,0,$FFFFFF) 
  D3D_Draw2ColorLine(pt\x,pt\y,pt\x+10,pt\y,0,$FFFFFF)  
  D3D_Flip() 
  WaitWindowEvent() 
Until GetTickCount_()-Start>5000 



D3D_End() 
End 
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

merci, c'est exactement ce que je cherchais :lol:
Répondre