Minecraft Umsetzung... wie macht man so etwas?

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

Chrise

BeitragSo, Sep 26, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenns schon länger her ist, Respekt, BIG BUG. So big scheint der bug nicht zu sein Wink Funktioniert aufjedenfall sehr sehr gut, werd ich mir auch mal näher ansehen.

Übrigens stimme ich dir zu, dass MineCraft schätze ich bestimmt so schlau war, das auf diese Art und Weise zu machen Wink
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

grafe

BeitragSo, Sep 26, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Starte mein programm einmal im debugmodus und schau in debuglog
dort wird die aktuelle anzahl der vertices beim momentanen surface angezeigt.

Du wirst feststellen das die vorherigen Surfaces alle tadellos funktionieren, obwohl sie genau gleich viele Vertices haben. Sad
 

BIG BUG

BeitragSo, Sep 26, 2010 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dir ist aber schon klar, dass Du hier über 125 Millionen Polygone erstellen möchtest?
Cubes die man nicht sieht DÜRFEN natürlich NICHT erstellt werden...

Nehme an dass Blitz / DX7 bei solchen Polygonmengen schlichtweg aussteigt...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Noobody

BeitragMo, Sep 27, 2010 6:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal eine sehr simple Herangehensweise ausprobiert und komme damit auf meinem mistigen Laptop immerhin noch auch 60 FPS. Im Vergleich dazu schnitt die "alles in ein Surface"-Methode mit drei Sekunden pro Frame eher schlecht ab.
user posted image

Man teilt einfach die Landschaft (512x64x512 in diesem Fall) einfach in kleinere Chunks (bei mir 32x32x32) auf, die alle ein eigenes Mesh und Surface haben. Diese Chunks beherbergen alle die Geometrie der umschlossenen Würfel und werden mit EntityAutoFade auf Entfernung ausgeblendet. Kombiniert mit traditionellem CameraRange und CameraFogRange fällt es kaum auf und bleibt trotzdem flott.

Ein weiterer Vorteil ist ausserdem, dass man Problemlos editieren kann. Wenn man einen Würfel setzt, muss man nur den umschliessenden Chunk neu erstellen statt gleich die ganze Levelgeometrie.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Angelo

BeitragMo, Sep 27, 2010 7:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Krasse sache ^^
Also für Lego Spiele, ist das einfach nur ein muss.
Alles was ich sagen kann, können auch andere ^^

grafe

BeitragMo, Sep 27, 2010 8:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Noobody. Das hilft mir echt weiter! Very Happy

Edit: Eine Frage habe ich noch. Wir texturiert man einen Würfel mit 8 Vertices? Ich schaffe es immer nur, dass 4 Flächen richtig angezeigt werden, 2 sind falsch.
BlitzBasic: [AUSKLAPPEN]
V1% = AddVertex(s\Surface, X - ScaleX, Y + ScaleY, Z - ScaleZ,0,1) 
V2% = AddVertex(s\Surface, X + ScaleX, Y + ScaleY, Z - ScaleZ,1,1)
V3% = AddVertex(s\Surface, X + ScaleX, Y - ScaleY, Z - ScaleZ,1,0)
V4% = AddVertex(s\Surface, X - ScaleX, Y - ScaleY, Z - ScaleZ,0,0)
V5% = AddVertex(s\Surface, X - ScaleX, Y + ScaleY, Z + ScaleZ,0,0)
V6% = AddVertex(s\Surface, X + ScaleX, Y + ScaleY, Z + ScaleZ,1,0)
V7% = AddVertex(s\Surface, X + ScaleX, Y - ScaleY, Z + ScaleZ,1,1)
V8% = AddVertex(s\Surface, X - ScaleX, Y - ScaleY, Z + ScaleZ,1,1)


Kann es sein, dass man einen Würfel mit 8 Vertices gar nicht richtig Texturieren kann?



mfg Grafe

ToeB

BeitragMo, Sep 27, 2010 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, du musst ja auch bedenken das 2 Seiten IMMER den Selben VErtexpunkt bzw. die SELBEN U/V Koordinaten haben. Dann hast du bei der Fläche eins die Koordinaten 0/0 und 0/1 und bei Fläche zwei auch, das kann ja nicht gut gehen Wink also müsstest du für jede Fläche 4 Vertices erstellen...


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

onkelz89

BeitragMo, Sep 27, 2010 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe auch mal meine bisherigen Stand hoch geladen...
Der letzte Post hat mich schon auf einen Fehler aufmerksam gemacht - ich benutze ebenfalls bislang 8 Punkte pro Würfel...

Naja meine Probleme sind aber noch die Performance, die ungenauigkeit beim "schießen" vor allem wenn man weiter rechts zum nächsten Levelteil kommt und die Texturen, was sich aber nun aufgeklärt hat...

W,A,S,D zum laufen
linke Maustaste - schießen
space - springen
Wink


Hoffe ihr könnt mir helfen. Bzw. ist mein Ansatz soweit OK oder mache ich schon große Fehler?

user posted image

Nur zum testen, dann müsst ihr selbst nix basteln...
user posted image

Code zum laden (Rechtsklick > speichern ... ihr kennt das ja)
http://creativnix.de/B3D/Start.bb

Code: [AUSKLAPPEN]
;Print "1 - 1024/768/32"
;Print "2 - 800/600/32"
;Print "3 - 600/480/32"
;Print "4 - 1024/768/16"
;Print "5 - 800/600/16"
;Print "6 - 600/480/16"
;grafikmode = Input("Grafikmodus wählen: ")
grafikmode=2
If grafikmode=1 Then gfmx=1024 gfmy=768 gbit=32
If grafikmode=2 Then gfmx=800 gfmy=600 gbit=32
If grafikmode=3 Then gfmx=600 gfmy=480 gbit=32
If grafikmode=4 Then gfmx=1024 gfmy=768 gbit=16
If grafikmode=5 Then gfmx=800 gfmy=600 gbit=16
If grafikmode=6 Then gfmx=600 gfmy=480 gbit=16
If grafikmode<1 Or grafikmode>6 Then gfmx=1024 gfmy=768 gbit=32

Graphics3D gfmx,gfmy,gbit,2
SetBuffer BackBuffer()
font=LoadFont( "arial",14 )
SetFont font


Global test=LoadTexture("tex.jpg")
Const TSize#=.5   ;64/128 = 0.5 Textur Size (eine Teil Textur aus der Datei)
Global TexS#,TexZ#

;###################################### Create/Load  Objekte
Global cam2=CreateCube()
EntityRadius cam2,1.5
EntityType cam2,1
Global cam = CreateCamera()
CameraRange cam,.1,250
EntityRadius cam,2

MoveEntity cam2,0,160,-5

licht=CreateLight(2)
PositionEntity licht,0,100,0

Global fpsrate,fpstime,loops

Type Feld
Field feldwert%
Field TS;tex Spalte
Field TZ;tex Zeile
;Field ress%
;Field anzahl
End Type

Type Map
Field mesh
Field surf
End Type

Const BSize%=4 ;Block size
Const Size%=16;Anzahl Blocks in einem "Level Teil" Size X Size X Size

;!!!!!!!! ACHTUNG nicht mehr als 2 sonst hängt es mal schnell !!!!!!!!
Const MSize%=1;Map Size


Dim Felder.Feld(Size*(MSize+1),Size*(MSize+1),Size*(MSize+1))

Dim Level.Map(MSize,MSize,MSize)

;Dim Felder.Feld(100,100,100)
Global x,y,z,Mx,My,Mz



For Mx = 0 To MSize
For My = 0 To MSize
For Mz = 0 To MSize

   Level( Mx,My,Mz ) = New Map
   Level( Mx,My,Mz )\mesh = CreateMesh()
   Level( Mx,My,Mz )\surf = CreateSurface(  Level( Mx,My,Mz )\mesh  )

   EntityType Level( Mx,My,Mz )\mesh,2
   EntityPickMode Level( Mx,My,Mz )\mesh,2
   EntityTexture Level( Mx,My,Mz )\mesh,test
   
   MoveEntity Level( Mx,My,Mz )\mesh,Mx*BSize,My*BSize,Mz*BSize

      For x = Mx*Size To Mx*Size+Size
      For y = My*Size To My*Size+Size
      For z = Mz*Size To Mz*Size+Size
      
         Felder( x, y, z ) = New Feld
         If y>29 Then Felder( x, y, z )\feldwert = 0 Else Felder( x, y, z )\feldwert = 1;Rand( 0, 1 )
         
         If y<3 Then
            Felder( x, y, z )\ts = 0
            Felder( x, y, z )\tz = 1
         ElseIf y<5 Then
            Felder( x, y, z )\ts = 1
            Felder( x, y, z )\tz = 0
         ElseIf y=9 Then
            Felder( x, y, z )\ts = 1
            Felder( x, y, z )\tz = 1
         Else
            Felder( x, y, z )\ts = 0
            Felder( x, y, z )\tz = 0   
         EndIf
      Next
      Next
      Next



      ;Version mit nur einem Mesh (Single Surface) = schnell
      
   
      
      For x = Mx*Size To Mx*Size+Size
      For y = My*Size To My*Size+Size
      For z = Mz*Size To Mz*Size+Size

         
      xMax=Mx*Size+Size
      yMax=My*Size+Size
      zMax=Mz*Size+Size
      
            
      If  Felder( x, y, z )\feldwert <> 0 Then
         
         NichtSichtBar=0
         ;X
         If x>0 Then
            If  Felder( x-1, y, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If x<xMax Then
            If  Felder( x+1, y, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         ;Y
         If y>0 Then
            If  Felder( x, y-1, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If y<yMax Then
            If  Felder( x, y+1, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         ;Z
         If z>0 Then
            If  Felder( x, y, z-1 )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If z<zMax Then
            If  Felder( x, y, z+1 )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
      
      ;6 = An allen Seiten ist ein andere Block, der dem Spieler die Sicht versperrt !
      
         If  NichtSichtBar<6 Then
      
         TexZ=Felder( x, y, z )\tz*TSize   ;Zeile
         TexS=Felder( x, y, z )\ts*TSize   ;Spalte
         
      
         v0 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize         ,z*BSize      ,TexZ      ,TexS      )
         v1 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize         ,z*BSize      ,TexZ+TSize   ,TexS      )
         v2 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize+BSize      ,z*BSize      ,TexZ      ,TexS+TSize )
         v3 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize+BSize      ,z*BSize      ,TexZ+TSize   ,TexS+TSize )
         v4 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize         ,z*BSize+BSize   ,TexZ+TSize   ,TexS      )
         v5 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize         ,z*BSize+BSize   ,TexZ      ,TexS      )
         v6 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize+BSize      ,z*BSize+BSize   ,TexZ+TSize   ,TexS+TSize )
         v7 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize+BSize      ,z*BSize+BSize   ,TexZ      ,TexS+TSize )
      
      ;Z      
         If z>0 Then
            If  Felder( x, y, z-1 )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v2,v1,v0)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v1,v2,v3)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v2,v1,v0)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v1,v2,v3)
         EndIf
         If z<zMax Then
            If  Felder( x, y, z+1 )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v7,v4,v5)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v4,v7,v6)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v7,v4,v5)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v4,v7,v6)
         EndIf
      
      
      ;X
         If x>0 Then
            If  Felder( x-1, y, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v0,v4)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v6,v2)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v0,v4)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v6,v2)
         EndIf
            
         If x<xMax Then
            If  Felder( x+1, y, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v5,v1)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v3,v7)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v5,v1)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v3,v7)
         EndIf
            
      
      ;Y
         If y>0 Then
            If  Felder( x, y-1, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v5,v4)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v0,v1)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v5,v4)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v0,v1)
         EndIf
         
         If y<yMax Then
            If  Felder( x, y+1, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v2,v7)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v7,v2)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v2,v7)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v7,v2)
         EndIf
         
         
         EndIf
      EndIf
      
      Next
      Next
      Next
Next
Next
Next





timer=CreateTimer(30)
;######################################################################## ***Hauptschleife***
While Not KeyHit(1)


If MouseHit(1) Then
   CameraPick (cam,400,300)
   
   PX=Int(PickedX#())/BSize
   PY=Int(PickedY#())/BSize
   PZ=Int(PickedZ#())/BSize
   
   Felder( px, py, pz)\feldwert=0
   
   If KeyDown(29) Then
   
   If px>0 Then Felder( px-1, py, pz)\feldwert=0
   If px<Size Then Felder( px+1, py, pz)\feldwert=0
   If py>0 Then Felder( px, py-1, pz)\feldwert=0
   If py<Size Then Felder( px, py+1, pz)\feldwert=0
   If pz>0 Then Felder( px, py, pz-1)\feldwert=0
   If pz<Size Then Felder( px, py, pz+1)\feldwert=0

   EndIf
   
   
   Mx=Px/Size
   My=Py/Size
   Mz=Pz/Size
   
   FreeEntity Level( Mx,My,Mz )\mesh
   
   Level( Mx,My,Mz ) = New Map
   Level( Mx,My,Mz )\mesh = CreateMesh()
   Level( Mx,My,Mz )\surf = CreateSurface(  Level( Mx,My,Mz )\mesh  )

   EntityType Level( Mx,My,Mz )\mesh,2
   EntityPickMode Level( Mx,My,Mz )\mesh,2
   EntityTexture Level( Mx,My,Mz )\mesh,test
   
   MoveEntity Level( Mx,My,Mz )\mesh,Mx*BSize,My*BSize,Mz*BSize

   
   
   For x = Mx*Size To Mx*Size+Size
      For y = My*Size To My*Size+Size
      For z = Mz*Size To Mz*Size+Size

         
      xMax=Mx*Size+Size
      yMax=My*Size+Size
      zMax=Mz*Size+Size
      
            
      If  Felder( x, y, z )\feldwert <> 0 Then
         
         NichtSichtBar=0
         ;X
         If x>0 Then
            If  Felder( x-1, y, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If x<xMax Then
            If  Felder( x+1, y, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         ;Y
         If y>0 Then
            If  Felder( x, y-1, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If y<yMax Then
            If  Felder( x, y+1, z )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         ;Z
         If z>0 Then
            If  Felder( x, y, z-1 )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
         If z<zMax Then
            If  Felder( x, y, z+1 )\feldwert <> 0 Then NichtSichtBar=NichtSichtBar+1
         EndIf
      
      ;6 = An allen Seiten ist ein andere Block, der dem Spieler die Sicht versperrt !
      
         If  NichtSichtBar<6 Then
      
         TexZ=Felder( x, y, z )\tz*TSize   ;Zeile
         TexS=Felder( x, y, z )\ts*TSize   ;Spalte
         
      
         v0 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize         ,z*BSize      ,TexZ      ,TexS      )
         v1 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize         ,z*BSize      ,TexZ+TSize   ,TexS      )
         v2 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize+BSize      ,z*BSize      ,TexZ      ,TexS+TSize )
         v3 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize+BSize      ,z*BSize      ,TexZ+TSize   ,TexS+TSize )
         v4 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize         ,z*BSize+BSize   ,TexZ+TSize   ,TexS      )
         v5 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize         ,z*BSize+BSize   ,TexZ      ,TexS      )
         v6 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize         ,y*BSize+BSize      ,z*BSize+BSize   ,TexZ+TSize   ,TexS+TSize )
         v7 = AddVertex (Level( Mx,My,Mz )\surf   ,x*BSize+BSize      ,y*BSize+BSize      ,z*BSize+BSize   ,TexZ      ,TexS+TSize )
      
      ;Z      
         If z>0 Then
            If  Felder( x, y, z-1 )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v2,v1,v0)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v1,v2,v3)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v2,v1,v0)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v1,v2,v3)
         EndIf
         If z<zMax Then
            If  Felder( x, y, z+1 )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v7,v4,v5)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v4,v7,v6)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v7,v4,v5)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v4,v7,v6)
         EndIf
      
      
      ;X
         If x>0 Then
            If  Felder( x-1, y, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v0,v4)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v6,v2)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v0,v4)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v6,v2)
         EndIf
            
         If x<xMax Then
            If  Felder( x+1, y, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v5,v1)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v3,v7)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v5,v1)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v3,v7)
         EndIf
            
      
      ;Y
         If y>0 Then
            If  Felder( x, y-1, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v5,v4)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v0,v1)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v0,v5,v4)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v5,v0,v1)
         EndIf
         
         If y<yMax Then
            If  Felder( x, y+1, z )\feldwert = 0 Then
               AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v2,v7)
               AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v7,v2)
            EndIf
         Else
            AddTriangle (Level( Mx,My,Mz )\surf   ,v3,v2,v7)
            AddTriangle (Level( Mx,My,Mz )\surf   ,v6,v7,v2)
         EndIf
         
         
         EndIf
      EndIf
      
      Next
      Next
      Next

EndIf




mxs#=-MouseXSpeed()
mys#=MouseYSpeed()
If mxs#<>0 Then RotateEntity cam2,EntityPitch(cam2),EntityYaw(cam2)+mxs#,EntityRoll(cam2):RotateEntity cam,EntityPitch(cam),EntityYaw(cam)+mxs#,EntityRoll(cam)
   If mys#<>0 Then
      If mys#>0 Then
         If EntityPitch(cam)+mys#>70
            mys#=70-EntityPitch(cam)
         EndIf
     RotateEntity cam,EntityPitch(cam)+mys#,EntityYaw(cam),EntityRoll(cam)
   ElseIf mys#<0 Then
      If EntityPitch(cam)+mys#<-70
         mys#=-70-EntityPitch(cam)
      EndIf
   RotateEntity cam,EntityPitch(cam)+mys#,EntityYaw(cam),EntityRoll(cam)
   EndIf
EndIf
MoveMouse 320,240
speed0#=1
If KeyDown( 32 ) Then  speed5#=speed0# Else speed5#=0
If KeyDown( 30 ) Then  speed6#=-speed0# Else speed6#=0
If KeyDown( 31 ) Then  speed3#=-speed0# Else speed3#=0
If KeyDown( 17 ) Then speed4#=speed0# Else speed4#=0




MoveEntity cam2,speed5#,0,speed3#
MoveEntity cam2,speed6#,0,speed4#
MoveEntity cam2,0,0,0



If EntityY(cam2)>0 Then MoveEntity cam2,0,-0.5,0
If KeyHit(57) Then MoveEntity cam2,0,5,0
PositionEntity cam,EntityX#(cam2),EntityY#(cam2)+4.5,EntityZ#(cam2)


Collisions 1,2,2,2



UpdateWorld
RenderWorld

Text 10,10,"FPS: "+FPS()
Text 10,30,"Pick: "+PX+" / "+PY+" / "+PZ
Text 10,570,"Strg beim schießen gedrückt halten für Monster Schuss"

Text 400,300,"."


WaitTimer(timer)
Flip
Wend
End








Function FPS()

loops = loops + 1

If MilliSecs() - fpstime > 1000 Then
fpsrate = loops
loops = 0
fpstime = MilliSecs()
EndIf
Return fpsrate

End Function

End
  • Zuletzt bearbeitet von onkelz89 am Mo, Sep 27, 2010 14:03, insgesamt einmal bearbeitet
 

onkelz89

BeitragMo, Sep 27, 2010 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
war doppelt - wodurch auch immer - bitte löschen...
 

PacMani

BeitragMo, Sep 27, 2010 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bekomme hin und wieder Array Index Out Of Bounds bei deinem Programm Wink sonst finde ich es echt super.

Da ich seit wenigen Monaten auch ein blockiges Spiel programmiere, kommen mir alle Posts sehr gelegen. Momentan werden Würfel noch komplett und einzelständig erstellt, wobei ich den Performancegewinn hauptsächlich dadurch gewinne, das Nutzer die Blockbreite, -höhe und -tiefe festlegen können.
 

onkelz89

BeitragDi, Sep 28, 2010 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem mit Array Index... ist behoben. War ein - wie so häufig - Flüchtigkeitsfehler ^^

Ich lade gerade ein Video bei Youtube hoch um meinen aktuellen Stand zu präsentieren.
Es ist noch nicht viel, aber ich erhoffe mir sehr viel aus dieser "Grundstruktur"... später mehr

Sobald das Video ( ~55 MB ) oben ist, editiere ich diesen Beitrag.

http://www.youtube.com/watch?v=DAM9Uju3XJg

count-doku

BeitragDi, Sep 28, 2010 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht ganz cool aus.
Der Sauerbraten-Editor auch mit so Cubes.

lg,
count-doku

grafe

Betreff: Aktueller Stand

BeitragDi, Sep 28, 2010 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Puh da hab ich ja Konkurrenz Smile

Da will ich euch meinen Stand mal nicht vorenthalten Very Happy

Bei mir sieht das ganze mittlerweile so aus:

user posted image

Momentane Features:
Arrow Grosse CubeWelt (512*64*512 Würfel)
Arrow Löschen von Würfeln (Linke Maustaste)
Arrow Hinzufügen von Würfeln (Rechte Maustaste)
Arrow Block wechseln (Mausrad)

Wer will kann sich das ganze auch mal ansehen:
Download (547 Kb)

Freue mich auf jedes Feedback Very Happy
Grafe
  • Zuletzt bearbeitet von grafe am Mi, Sep 29, 2010 11:33, insgesamt einmal bearbeitet

ZaP

BeitragMi, Sep 29, 2010 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Teil sprengt meinen Speicher Sad ich werds später nochmal probieren. Woher kommt die lange Ladezeit?
Starfare: Worklog, Website (download)

grafe

BeitragMi, Sep 29, 2010 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt daran, dass es die Würfel aus einer Highlandmap ausliest, welche 512 * 512 Pixel hat
und bei ReadPixelFast gibt es immer ein MAV.
Darum verwende ich ReadPixel, welches funktioniert, aber dafür auch langsam ist...

Edit:

Ich habe eine neue Version hochgeladen. Dort kann man zwischen drei verschieden grossen Maps auswählen

Download(547 KB)

mfg grafe

Goodjee

BeitragMi, Sep 29, 2010 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
die mav kommt wahrscheinlich weil du einen pixel bei 512,0 auslesen willst die heighmap aber nur bit 511 geht. bei koprrekter benutzung von readpixelfast passieren eigentlich keine fehler
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

grafe

BeitragMi, Sep 29, 2010 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@Goodjee : Danke! Problem behoben Very Happy

Doch merke ich jetzt, dass es nicht spürbar schneller ist Rolling Eyes

trotzdem danke
 

onkelz89

BeitragMi, Sep 29, 2010 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Konnte deine Version leider nicht testen, da mein momentan laufender Rechner - mein auf der Brust etwas schwächerer programmier Rechner ist.

Aber ich bin sicher das man da noch einiges optimieren kann Wink

Ich bin bei meinem "Editor" momentan dabei Licht zu integrieren... allerdings, bin ich am nachdenken, wie man am einfachsten prüfen kann (und performance sparsam) ob zwischen dem Licht und dem Block weitere Blöcke sind, die die Sicht verdecken...

Via VertexColor und EntityFx 1+2 habe ich es geschafft, schön aussehendes "Kugel Fake Licht" zu erstellen, aber der Punkt oben bedeutet, dass man zB einen Tunnel unter dem Licht baut und dieser Tunnel dennoch hell ist...

Ich hoffe die Erklärung ist soweit verständlich.

Hier noch ein Bild dazu:

user posted image

AnniXa

BeitragSo, Okt 03, 2010 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
cool, ich hatte auch so etwas gemacht, anfangs wollte ich auch nur simple blocke darstellen aber inzwischen ist es doch etwas komplexer geworden =)


Texturen passen sich ihren nachbarblöcken an, und die mesh der blöcke auch, dafür gibt es ein eigenes dateiformat, das jeder fläche die am "rand" des blocke ist eine eigenschaft geben kann, zum aussortieren von flächend ie ohnehin nie sichtbar wären, und daher auch nicht erzeugt werden, bzw nur erzeugt werden wenn die fläche sichtbar ist (also es in diese richtung keinen nachbarblock gibt) oder nur teilweise sichtbar ist.

Geschrieben ist es in blitzmax mit minib3d, Ziel ist es damit Große 3d welten zu realisieren, die jedoch nicht allzu simpel aufgebaut sind, für verschiedene spieleprojekte die ich mit einem freund umsetzen möchte, bzw gerade umsetze.

inzwischen arbeite ich seit ca einem halben jahr daran mal mit mehr, mal mit weniger elan.

Erste tests auf machbarkeit und leistung:

user posted imageuser posted imageuser posted image

Komplexere dinge als nur würfel:
user posted imageuser posted imageuser posted image

2d iso ansicht
user posted image

Wände, mauern, und dynamische dungeons
user posted imageuser posted imageuser posted image
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

AnniXa

BeitragSo, Okt 03, 2010 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
grafe hat Folgendes geschrieben:
Danke Noobody. Das hilft mir echt weiter! Very Happy

Edit: Eine Frage habe ich noch. Wir texturiert man einen Würfel mit 8 Vertices? Ich schaffe es immer nur, dass 4 Flächen richtig angezeigt werden, 2 sind falsch.
BlitzBasic: [AUSKLAPPEN]
V1% = AddVertex(s\Surface, X - ScaleX, Y + ScaleY, Z - ScaleZ,0,1) 
V2% = AddVertex(s\Surface, X + ScaleX, Y + ScaleY, Z - ScaleZ,1,1)
V3% = AddVertex(s\Surface, X + ScaleX, Y - ScaleY, Z - ScaleZ,1,0)
V4% = AddVertex(s\Surface, X - ScaleX, Y - ScaleY, Z - ScaleZ,0,0)
V5% = AddVertex(s\Surface, X - ScaleX, Y + ScaleY, Z + ScaleZ,0,0)
V6% = AddVertex(s\Surface, X + ScaleX, Y + ScaleY, Z + ScaleZ,1,0)
V7% = AddVertex(s\Surface, X + ScaleX, Y - ScaleY, Z + ScaleZ,1,1)
V8% = AddVertex(s\Surface, X - ScaleX, Y - ScaleY, Z + ScaleZ,1,1)


Kann es sein, dass man einen Würfel mit 8 Vertices gar nicht richtig Texturieren kann?



mfg Grafe


Die sache mit den würfeln hat mit viel kopfzerbrechen bereitet, man benötigt für eine vernünftuge UV map für einen würfel 12 vertixes, nach langem herumprobieren habe ich das erfahren müssen Smile
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group