3d-ebenen und objekte

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Nun redest du aber WIRR Kaeru :o

Was ist eine Engine?

Ich spreche nicht von HalfLife2 oder Doom 3

Wenn man ein System entwickelt, was die Darstellung von Objekten ermöglicht, dann ist das schon eine Engine.

Auch das Spritehandling im 2D-Spiel ist eine Art Engine.

Wie perfekt sie ist, ist eine andere Frage.


Klar braucht es einiges an Zeit, wenn sie sich messen will mit gängigen Engines. Aber ich denke schon, dass es möglich ist, wenn man sich reinhängt. Ob es sich lohnt oder man es machen sollte, ist eine andere Frage ...

alles sehr phylosophisch ... :shock:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Nun redest du aber WIRR Kaeru

keine sorge, es wird mir nicht gelingen, dich zu überbieten.


egal, wie billig du deine 3D-engine halten willst.
"ganz schnell" und "kein Problem" ist einfach maßlos übertrieben.

und egal wie viel man drumrumredet, dein erstes posting hat ganz einfach das thema verfehlt,
da hilft auch deine wortgewalt nix um es zu retten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Klar, ne 3D Engine schreibt man nicht mal "einfach schnell"... dennoch stimme ich Xaby zu, dass man sich mit der 3D Mathematik zumindest ansatzweise auskennen sollte... Der Threadstarter will ja wohl ein 3D Game herstellen, und in einem solchen muss man ja viel im 3D Raum mit Punkten, evt. Vektoren/Strahlen und so Zeugs hantieren.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hi Leute,

wollte schon nen neuen Thread öffnen, dachte mir aber das passt hier genauso gut rein. Da ihr schon geschrieben habt man könne seine eigene Engine proggen.

Hab den Code aus dem "Racingtest" Codebeispiel von Purebasic.de "rausgeschweißt".
Läuft auch soweit nur wenn man sich bewegt werden einige Sprites falsch transformiert...
Woran liegt das?

Um den Code zu test solltet ihr euch bidde die Daten von Purebasic.de runterladen und den Code dann einfach in den Ordner einsetzen.

Code: Alles auswählen

;*******************************************************************
;*                                                                 *
;* StreetRace by Scarabol\2006 (E-Mail: Scarabol@web.de)           *
;*                                                                 *
;* Tested with Windows XP                                          *
;* Compiled with PureBasic 4.00                                    *
;*                                                                 *
;*******************************************************************

#ERRMSG="Error"

Global fullscreen.b

Macro RGB(Red, Green, Blue)
  Red + Green*256 + Blue*65536
EndMacro

If InitSprite()=0
  MessageRequester(#ERRMSG,"Could not initialize DirectDraw",0):End
EndIf
If InitSprite3D()=0
  MessageRequester(#ERRMSG,"Could not initialize Direct3D",0):End
EndIf
If InitKeyboard()=0
  MessageRequester(#ERRMSG,"Could not initialize Keyboard",0):End
EndIf
If InitSound()=0
  MessageRequester(#ERRMSG,"Could not initialize Sound",0):End
EndIf
If fullscreen
  If InitMovie()=0
    MessageRequester(#ERRMSG,"Could not initialize Music",0):End
  EndIf
EndIf

UsePNGImageDecoder()
UseJPEGImageDecoder()

#SX=640
#SY=480
#MAXGFX=28
#VIEWPOINT=300
#BGMFILE="bgm.mp3"
#MAXLENK=0.0275

Global mapname.s
Global trees.b,bgmloaded.b,mp3found.b,billboardsactive.b,lastmp3.w,Debugy.b
Global fps.w,fpstemp.w,maxfps.w,avgfps.w
Global xan.f,yan.f,zan.f,Pspeed.f
Global mapx.w,mapy.w,startx.w,starty.w,view.b,steering.b
Global sichtweite.f
Global gridx.w,gridy.w,steering.b,crashready.b,coll_L.b,coll_M.b,coll_R.b
Global gridxl.w,gridyl.w,gridxr.w,gridyr.w
Global lenkeinschlag.f,lenkung.f,x.f,y.f,z.f,framelimit.b

billboardsactive=1
sichtweite=25
mp3found=0
gridx=0
gridy=0
framelimit=60

Debugy=0

degree.f=1.5 ;für Neigung der Strecke
crashready=100
coll_L=0
coll_M=0
coll_R=0

mapname="track.mkt"

Structure Tvektor
  x.f
  y.f
  z.f
  id.w
EndStructure

Structure Szbuffer
  i.w
  j.w
  z.f
  xs.f
  ys.f
EndStructure

Procedure loadgfx(sprnum.w,path.s,type.l)
  If LoadSprite(sprnum,path,type)=0
    MessageRequester(#ERRMSG,"Error while loading sprite <"+path+">",0):End
  EndIf
  If type=#PB_Sprite_Texture
    If CreateSprite3D(sprnum,sprnum)=0
      MessageRequester(#ERRMSG,"Error while creating texture <"+path+">",0):End
    EndIf
  EndIf
EndProcedure

Procedure loadJPEGgfx(sprnum.w,path.s,type.l)
  If LoadSprite(sprnum,path,type)=0
    MessageRequester(#ERRMSG,"Error while loading sprite <"+path+">",0):End
  EndIf
  If type=#PB_Sprite_Texture
    If CreateSprite3D(sprnum,sprnum)=0
      MessageRequester(#ERRMSG,"Error while creating texture <"+path+">",0):End
    EndIf
  EndIf
EndProcedure

Procedure fps()
  Repeat
    Delay(1000)
    fps=fpstemp
    avgfps=Round((avgfps+fps)/2,0)
    If fps>maxfps
      maxfps=fps
    EndIf
    fpstemp=0
  ForEver
EndProcedure

Procedure.s snapshot()
  GrabSprite(999,0,0,#SX,#SY)
  fileS.w=0
  screenS.s=""
  Repeat 
    screenS=Str(screen_num)
    If Len(screenS)=1
      screenS="00"+screenS
    EndIf
    If Len(screenS)=2
      screenS="0"+screenS
    EndIf
    screenS="screenshot"+screenS+".bmp"
    If ReadFile(0,screenS)<>0
      CloseFile(0)
    Else
      SaveSprite(999,screenS)
      FreeSprite(999)
      fileS=1
    EndIf
    screen_num=screen_num+1
  Until fileS=1
  ProcedureReturn screenS
EndProcedure

ReadFile(0,mapname) ;- Umgebung laden
;******************************************************************
mapx=ReadWord(0):mapy=ReadWord(0):startx=ReadWord(0):starty:ReadWord(0)
Dim course.b(mapx,mapy)
Dim gridOrigin.Tvektor(mapx,mapy)
Dim gridRot.Tvektor(mapx,mapy)
Dim grid3D.Tvektor(mapx,mapy)
Dim grid2D.Tvektor(mapx,mapy)
Dim gridWall.Tvektor(mapx,mapy)
Dim cx.w(4)
Dim cy.w(4)

startx=63
starty=64+2

For i=0 To mapx-1
  For j=0 To mapy-1
    course(i,j)=ReadByte(0)
    gridOrigin(i,j)\x=i-startx;mapx/2
    gridOrigin(i,j)\y=j-starty;mapx/2
    gridOrigin(i,j)\z=6.0-(ValF(Str(ReadByte(0))+"."+Str(ReadByte(0))))
        
    gridwall(i,j)\x=gridOrigin(i,j)\x
    gridwall(i,j)\y=gridOrigin(i,j)\y
  Next
Next

; LoadImage(0,mapname) ;- Umgebung laden
; ;******************************************************************
; mapx=ImageWidth(0)
; mapy=ImageHeight(0)
; Dim course.b(mapx,mapy)
; Dim gridOrigin.Tvektor(mapx,mapy)
; Dim gridRot.Tvektor(mapx,mapy)
; Dim grid3D.Tvektor(mapx,mapy)
; Dim grid2D.Tvektor(mapx,mapy)
; Dim gridWall.Tvektor(mapx,mapy)
; Dim cx.w(4)
; Dim cy.w(4)
; 
; startx=63
; starty=64+2
; 
; StartDrawing(ImageOutput(0))
; For i=0 To mapx-1
;   For j=0 To mapy-1
;     course(i,j)=8
;     gridOrigin(i,j)\x=i-startx
;     gridOrigin(i,j)\y=j-starty
;     gridOrigin(i,j)\z=Red(Point(i,j))
;         
;     gridwall(i,j)\x=gridOrigin(i,j)\x
;     gridwall(i,j)\y=gridOrigin(i,j)\y
;   Next
; Next
; StopDrawing()
; 
; ;******************************************************************
; FreeImage(0)

;SetRefreshRate(100)

If fullscreen
  OpenScreen(#SX,#SY,16,"MK-Test")
Else
  OpenWindow(1,#PB_Ignore,#PB_Ignore,640,480,"MK-Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetActiveWindow(1)
  OpenWindowedScreen(WindowID(1),0,0,#SX,#SY,0,0,0)
EndIf

SetFrameRate(framelimit)

TransparentSpriteColor(#PB_Default,RGB(255,0,255))
LoadFont(0,"Impact",30)
LoadFont(1,"Arial",10)
LoadFont(2,"Arial",8)
LoadFont(3,"Arial",6)

For i=0 To #MAXGFX
  nameStr.s=Str(i)
  If Len(nameStr)=1
    nameStr="0"+nameStr
  EndIf
  If i=21 Or i=22 Or i=23
    loadgfx(i,"gfx/"+nameStr+".bmp",#PB_Sprite_Texture)
  Else
    loadJPEGgfx(i,"gfx/"+nameStr+".jpg",#PB_Sprite_Texture)
  EndIf
Next

ClearScreen(0)


tid=CreateThread(@fps(),0)

Global s3dq.b
s3dq=0
Sprite3DQuality(s3dq)

;- Repeat Start
Repeat
  If fullscreen=0
    Event.l = WindowEvent()
  EndIf
  
  FlipBuffers()
  ClearScreen(RGB(157,157,159))
  
  ;Playfield*********************************************
  ;******************************************************
  ;- Umgebung darstellen
  ;Vorbereiten des 3D-Grids, Ansicht ändern
  For i=0 To mapx-1
    For j=0 To mapy-1
      gridOrigin(i,j)\y+Pspeed/10
    Next
  Next
  For i=0 To mapx-1
    For j=0 To mapy-1
;      gridOrigin(i,j)\y-Pspeed/70
    Next
  Next
  
;  If steering<>0
    lenkeinschlag.f=(-steering)
    If lenkeinschlag>#MAXLENK
      lenkeinschlag=#MAXLENK
    ElseIf lenkeinschlag<-#MAXLENK
      lenkeinschlag=-#MAXLENK
    EndIf
    If Pspeed<0
      lenkeinschlag=-lenkeinschlag
    EndIf
    If coll_R=1
;      lenkeinschlag=(0.05)
    EndIf
    Slenk.f=Sin(lenkeinschlag)
    Clenk.f=Cos(lenkeinschlag)
    For i=0 To mapx-1
      For j=0 To mapy-1
         yt.f=gridOrigin(i,j)\y
         xt.f=gridOrigin(i,j)\x
         gridOrigin(i,j)\x=xt*Clenk-yt*Slenk
         gridOrigin(i,j)\y=xt*Slenk+yt*Clenk
      Next
    Next
;  Else
;  EndIf
  steering=0


  Sdeg.f=Sin(-degree)
  Cdeg.f=Cos(-degree)
  For i=0 To mapx-1
    For j=0 To mapy-1
      z.f=gridOrigin(i,j)\z
      y.f=gridOrigin(i,j)\y
      grid3D(i,j)\z=y*Sdeg+z*Cdeg
      If ((grid3D(i,j)\z>0) And (grid3D(i,j)\z<SICHTWEITE))
        grid3D(i,j)\y=y*Cdeg-z*Sdeg
        grid3D(i,j)\y=grid3D(i,j)\y-4.8
        grid3D(i,j)\x=gridOrigin(i,j)\x
        ;Hier 2D-Ansicht in Array scrhreiben...
        x1=grid3D(i,j)\x*#VIEWPOINT/grid3D(i,j)\z+(#SX/2)
        y1=grid3D(i,j)\y*#VIEWPOINT/grid3D(i,j)\z+(#SY/2)          
        grid2D(i,j)\x=x1
        grid2D(i,j)\y=y1
      EndIf
    Next
  Next
  
  billboards.w = 0
  ;Texture-View
  NewList Lzbuffer.Szbuffer()

    For i=0 To mapx-2
      For j=0 To mapy-2
        If (grid3D(i,j)\z>0 And grid3D(i,j)\z<sichtweite And course(i,j)<>0) Or (grid3D(i,j)\z>0 And grid3D(i,j)\z<sichtweite And course(i,j)=0)
          x1=grid2D(i,j)\x
          y1=grid2D(i,j)\y
          x2=grid2D(i+1,j)\x
          y2=grid2D(i+1,j)\y
          x3=grid2D(i+1,j+1)\x
          y3=grid2D(i+1,j+1)\y
          x4=grid2D(i,j+1)\x
          y4=grid2D(i,j+1)\y
          If (x1>=0 And x1<=#SX And y1>=0 And y1<=#SY) Or (x2>=0 And x2<=#SX And y2>=0 And y2<=#SY) Or (x3>=0 And x3<=#SX And y3>=0 And y3<=#SY) Or (x4>=0 And x4<=#SX And y4>=0 And y4<=#SY)
            ;Vektoren, die man nicht sieht, sollen ausgeschlossen werden

            ;Elemente hinzufügen, die gezeigt werden
            AddElement(Lzbuffer())
            Lzbuffer()\i=i
            Lzbuffer()\j=j
            Lzbuffer()\z=grid3D(i,j)\z
          EndIf
        EndIf
      Next
    Next
      
  ;Elemente im Z-Buffer in Array legen und sortieren
  elements.w=CountList(Lzbuffer())
  Dim zbuffer.Szbuffer(elements)    
  
  i=0
  ResetList(Lzbuffer())
  While (NextElement(Lzbuffer()))
    zbuffer(i)\i=Lzbuffer()\i
    zbuffer(i)\j=Lzbuffer()\j
    zbuffer(i)\z=Lzbuffer()\z
    i+1
  Wend
      
  ClearList(Lzbuffer())
  
  ;Z-Buffer***************************
  TMPzbuffer.Szbuffer    
  For i=0 To elements-1
    min.w=i
    For j=(i+1) To elements-1
      If zbuffer(min)\z<zbuffer(j)\z
        min=j
      EndIf
    Next
    
    TMPzbuffer\i=zbuffer(min)\i
    TMPzbuffer\j=zbuffer(min)\j
    TMPzbuffer\z=zbuffer(min)\z

    zbuffer(min)\i=zbuffer(i)\i
    zbuffer(min)\j=zbuffer(i)\j
    zbuffer(min)\z=zbuffer(i)\z

    zbuffer(i)\i=TMPzbuffer\i
    zbuffer(i)\j=TMPzbuffer\j
    zbuffer(i)\z=TMPzbuffer\z      
  Next
  ;Z-Buffer***************************


  ;Grafiken im Z-Buffer können jetzt ausgegeben werden
  Start3D()
    For i=0 To (elements-1)
          x1=grid2D(zbuffer(i)\i,zbuffer(i)\j)\x
          y1=grid2D(zbuffer(i)\i,zbuffer(i)\j)\y
          x2=grid2D(zbuffer(i)\i+1,zbuffer(i)\j)\x
          y2=grid2D(zbuffer(i)\i+1,zbuffer(i)\j)\y
          x3=grid2D(zbuffer(i)\i+1,zbuffer(i)\j+1)\x
          y3=grid2D(zbuffer(i)\i+1,zbuffer(i)\j+1)\y
          x4=grid2D(zbuffer(i)\i,zbuffer(i)\j+1)\x
          y4=grid2D(zbuffer(i)\i,zbuffer(i)\j+1)\y
          
          If course(zbuffer(i)\i,zbuffer(i)\j)=21 Or course(zbuffer(i)\i,zbuffer(i)\j)=22 Or course(zbuffer(i)\i,zbuffer(i)\j)=23
            ;Hier werden die Billboards behandelt
            ;Untergrund zeichnen (Grass, etc.)
            TransformSprite3D(0,x1,y1,x2,y2,x3,y3,x4,y4)
            DisplaySprite3D(0,0,0)
            If billboardsactive
              billboards+1
              ;linken oberen Vektor finden
              xs=x1
              If xs>x2
                x2=xs
              EndIf
              If xs>x3
                x3=xs
              EndIf
              If xs>x4
                x4=xs
              EndIf
              ys=y1
              If ys>y2
                y2=ys
              EndIf
              If ys>y3
                y3=ys
              EndIf
              If ys>y4
                y4=ys
              EndIf
              ;Billboard zoomen und zeichnen
              zx=(SpriteWidth(course(zbuffer(i)\i,zbuffer(i)\j))*5/(zbuffer(i)\z))
              zy=(SpriteHeight(course(zbuffer(i)\i,zbuffer(i)\j))*5/(zbuffer(i)\z))
              ZoomSprite3D(course(zbuffer(i)\i,zbuffer(i)\j),zx,zy)

              DisplaySprite3D(course(zbuffer(i)\i,zbuffer(i)\j),xs-(zx/3),ys-(zy))

            EndIf
            
          Else
            TransformSprite3D(course(zbuffer(i)\i,zbuffer(i)\j),x1,y1,x2,y2,x3,y3,x4,y4)
            DisplaySprite3D(course(zbuffer(i)\i,zbuffer(i)\j),0,0)
          EndIf
    Next
    
  Stop3D()
  
  ;Frames per Second
  fpstemp+1
  ;Debug-Informationen
  If Debugy=1
    StartDrawing(ScreenOutput())
      DrawingMode(1)
      DrawingFont(FontID(1))
      
      FrontColor(RGB(255,255,0))
      DrawText(5,#SY-155,"Racingtest by Tomek Misztal / 2003")
      DrawText(5,#SY-140,"E-Mail: tomcat128@gmx.de")
      DrawText(5,#SY-125,"Compiled with PureBasic 3.51")

      FrontColor(#White)      
      DrawText(5,#SY-110,"Texture-Quality("+Str(s3dq)+")")
      If framelimit
        DrawText(5,#SY-95,"Framelimit: "+Str(framelimit))
      Else
        DrawText(5,#SY-95,"Framelimit: no limit")
      EndIf
      
      If coll_L=1
        FrontColor(#Red)
        DrawText(5,#SY-80,"L:("+Str(gridxl)+","+Str(gridyl)+")")
      ElseIf coll_L=2
        FrontColor(#Green)
        DrawText(5,#SY-80,"L:("+Str(gridxl)+","+Str(gridyl)+")")
      Else
        FrontColor(#White)
        DrawText(5,#SY-80,"L:("+Str(gridxl)+","+Str(gridyl)+")")
      EndIf
      If coll_M=1
        FrontColor(#Red)
        DrawText(75,#SY-80,"M:("+Str(gridx)+","+Str(gridy)+")")
      ElseIf coll_M=2
        FrontColor(#Green)
        DrawText(75,#SY-80,"M:("+Str(gridx)+","+Str(gridy)+")")
      Else
        FrontColor(#White)
        DrawText(75,#SY-80,"M:("+Str(gridx)+","+Str(gridy)+")")
      EndIf
      If coll_R=1
        FrontColor(#Red)
        DrawText(140,#SY-80,"R:("+Str(gridxr)+","+Str(gridyr)+")")
      ElseIf coll_R=2
        FrontColor(#Green)
        DrawText(140,#SY-80,"R:("+Str(gridxr)+","+Str(gridyr)+")")
      Else
        FrontColor(#White)
        DrawText(140,#SY-80,"R:("+Str(gridxr)+","+Str(gridyr)+")")
      EndIf
      FrontColor(#White)
      DrawText(5,#SY-65,"FPS (max): "+Str(fps)+ "("+Str(maxfps)+")")
      DrawText(5,#SY-50,"View-Distance (-/+): "+StrF(sichtweite))
      DrawText(5,#SY-35,"Z-Sorting: "+Str(elements))
      DrawText(5,#SY-20,"Billboards: "+Str(billboards))
        
    StopDrawing()
  EndIf
  
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Add) And sichtweite<50.0
    sichtweite+1
    If sichtweite>50.0
      sichtweite=50.0
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Subtract) And sichtweite>6.0
    sichtweite-1
    If sichtweite<6.0
      sichtweite=6.0
    EndIf
  EndIf
  
  If KeyboardReleased(#PB_Key_F5)
    If Debugy=1
      Debugy=0
    Else
      Debugy=1
    EndIf
  EndIf
  If KeyboardReleased(#PB_Key_F9)
    If s3dq
      s3dq=0
    Else
      s3dq=1
    EndIf
    Sprite3DQuality(s3dq)
  EndIf
  If KeyboardReleased(#PB_Key_F12)
    Snapshot()
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)
    Pspeed = -1
  ElseIf KeyboardPushed(#PB_Key_Up)
    Pspeed = 1
  Else
    Pspeed = 0
  EndIf


  ;*****************************************************  
  ;Lenkung
  If (KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Right)=0)
    steering=-1
  ElseIf (KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Left)=0)
    steering=1
  Else
    steering=0
  EndIf
  
  If fullscreen=0 And Event=#PB_Event_CloseWindow
    exit=1
  EndIf
Until KeyboardPushed(1) Or exit

KillThread(tid)

If fullscreen=0
  CloseScreen()
  CloseWindow(1)
EndIf

End
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Hier mal was von NicTheQuick

http://www.purebasic.fr/german/viewtopi ... w=previous

*Schulmathem... :allright:
Kinder an die Macht http://scratch.mit.edu/
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Beitrag von xperience2003 »

lol..was geht hier ab ^^

@topic
also "3d-ebenen" , willst du sowas wie nen level aus platten?
in verschiedenen hoehen?

egal wie, schnapp dir die irrlicht (der wrapper ist hier im forum) oder benutz die ogre engine (sind die 3d befehle von purebasic)

einen level mit ebenen kannst du dir mit den primitiven (wuerfel,kugel..etc) zusammensetzen oder mit einem
3d modeller gleich komplett bauen
kommt auf das spiel an, ob man nur ein paar levels braucht
oder viele viele kleine levels, welche man besser zusammensetzt

falls du ein komplett anfaenger bist, empfehle ich dir die irrlicht engine
(bessere performance und groesserer umfang als die jetzige ogre)

als 3d-modeller wings3d
3D Raum mit Punkten, evt. Vektoren/Strahlen und so Zeugs hantieren.
nicht wirklich, wenn man eine gute engine benutzt muss man sich selber garnicht mit vectoren und matrizen rumschlagen
man benutzt halt einfach die einfachen befehle ^^

Vielleicht dann erstmal Sprites ausprobieren und dich im 2D-Raum bewegen
wieso wird den leuten eigentlich immer vom 3d abgeraten?
oder wie kommt man auf das schmale brett das 3d schwerer sei als 2d,
bei den gaengigen engines ist es sogar einfacher :allright:
amiga rulez...
Rebirth Software
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

xperience2003 hat geschrieben:also "3d-ebenen" , willst du sowas wie nen level aus platten?
in verschiedenen hoehen?
Ebenen hat man früher noch Levels in Platformspielen genannt. Heute sinds unendliche Flächen (eigentlich ja 2D, da sie keine Tiefe besitzen) die im 3D Raum platziert und ausgerichtet werden. Das was du unter Polygon verstehst liegt auf einer solchen Ebene und begrenzt nur den Bereich darauf.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hallo Leute,

die Frage zu meinem Code hat sich erledigt...

Für weiteres verweise ich hier mal auf den anderen Thread von Nic mit dem man die Schulmathematik locker in einigen Stunden nachvollziehen kann (schreibe aus Erfahrung)...

http://www.purebasic.fr/german/viewtopic.php?t=13426

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Antworten