Seite 2 von 2

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 01:14
von Fluid Byte
super_spacken hat geschrieben:na denn..., ich bin mal gespannt...
Auf was? Das der "Arbeiterabgrund" dir hilft?
super_spacken hat geschrieben:Gruss
Erstick dran :allright:

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 08:23
von Nino
c4s hat geschrieben:Wann sehen wir dein erstes Ergebnis?
Sobald er hier fertigen Code zum Kopieren findet. :lol: :lol:

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 10:00
von super_castle
ich habe foxel-code von freebasic, welches kurzen und knackigen asm-code erzeugt.

purebasic wird da wohl zu langsam für sein.
das "StartDrawing(...)" ist die bremse, weil es zu oft aufgerufen werden muss in der dynamik.

steuerbar mit den pfeiltasten (freebasic) :

Code: Alles auswählen

Dim Shared As single  posx, posy, posz 
Dim Shared As Single x, y, z 
Dim Shared As Single dd, de, dx, dy, dz, dyi, dxi 
Dim Shared As Single horiz, sdz, p, d, h 
Dim Shared As Integer hei(4096 - 1), col(4096 - 1) 
Dim Shared As Integer sx,i
Dim Shared As Single sinang,cosang,ang, r160

Screen 13

'Generate palette
For z = 0 To 63
   Palette z, Rgb(z / 2, z, z)
Next z

For z = 0 To 63
   Palette z + 64, Rgb(z, z, z \ 2)
Next z
   
'Generate interesting height & color maps
p = 0
For y = 0 To 63
   For x = 0 To 63
      d = 15 * 15 - ((x And 31) - 16) ^ 2 - ((y And 31) - 16) ^ 2
      If d > 0 And ((x Xor y) And 32) Then
         hei(p) = 64 - Sqr(d)
         col(p) = (x + y) * .5
      Else
         hei(p) = 64
         col(p) = (Cos(x * .2) + Sin(y * .3)) * 3 + 88
      End If
      p = p + 1
   Next x
Next y

'Initialize starting position
posx = 0
posy = 0
posz = 40 * 65536
ang = 0
horiz = -50
r160 = 1 / 160
dd = 65536 * r160 'Increment size
de = dd * 128     'Scan out 128 units
sdz = (100 - horiz) * 65536 * r160

Do
   cosang = Cos(ang) * 65536
   sinang = Sin(ang) * 65536
   dx = sinang + cosang
   dxi = -sinang * r160
   dy = sinang - cosang
   dyi = cosang * r160

   'For each column in 320*200 mode...
   For sx = 0 To 319
      'Fast ray trace! No *'s or /'s in here (\ 65536 is a shift)
      x = posx
      y = posy
      z = posz
      dz = sdz
      p = sx + 63680
      For d = 0 To de Step dd
         x += dx
         y += dy
         z += dz
         i = (((x * 64) And &HFC00000) + (y And &H3F0000)) \ 65536
         h = hei(i) * 65536
         Do While h < z
            PSet (p Mod 320, p \ 320), col(i)
            p -= 320
            z -= d
            dz -= dd
         Loop
      Next d
      dx += dxi
      dy += dyi
   
      'Finish off rest of line
      Do While p >= 19200
         PSet (p Mod 320, p \ 320), 0
         p = p - 320
      Loop
   Next sx

   'Move position & angle
   If Multikey(&h50) Then
      posx -= cosang * 4
      posy -= sinang * 4
   End If
   If Multikey(&h48) Then
      posx += cosang * 4
      posy += sinang * 4
   End If
   If Multikey(&h1E) And posz < 2621440 Then posz += 1 * 65536
   If Multikey(&h10) And posz > 0 Then posz -= 1 * 65536
   If Multikey(&h4B) Then ang -= .04
   If Multikey(&h4D) Then ang += .04
   
   Sleep 1
Loop Until Multikey(&h01)

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 10:14
von STARGÅTE
purebasic wird da wohl zu langsam für sein.
das "StartDrawing(...)" ist die bremse, weil es zu oft aufgerufen werden muss in der dynamik.
Wie ich dir schon mehrmals gesagt habe, musst du StartDrawing() bei der richtigen Benutzung nur ein mal zur Laufzeit aufrufen (also vor allen Schleifen usw.)!
Deine Aussage ist also falsch!

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 12:32
von c4s
STARGÅTE hat geschrieben:Deine Aussage ist also falsch!
Lass ihn blubbern und quaken was er will... bei manchen Leuten hat es leider keinen Sinn mehr.
Er lacht sich doch sowieso ins Fäustchen, dass er hier auf meistens auf höchst beleidigendem Niveau herumtrollt und trotzdem jede Hilfe bekommt, die er erwartet.

Re: Voxelgrafik mit Purebasic.

Verfasst: 26.01.2011 21:31
von Nino
Nino hat geschrieben:
c4s hat geschrieben:Wann sehen wir dein erstes Ergebnis?
Sobald er hier fertigen Code zum Kopieren findet. :lol: :lol:
Ich muss mich korrigieren:
Sobald er hier oder woanders fertigen Code zum Kopieren findet. :lol: :lol:

Re: Voxelgrafik mit Purebasic.

Verfasst: 27.01.2011 09:06
von Kukulkan
purebasic wird da wohl zu langsam für sein.
das "StartDrawing(...)" ist die bremse, weil es zu oft aufgerufen werden muss in der dynamik.
Normalerweise wird das maximal einmal je Frame aufgerufen. Wenn nicht, machst Du was falsch...

PureBasic-Hilfe:
Der FlipBuffers() Befehl muss stets außerhalb eines StartDrawing() : ... : StopDrawing() Programmblocks aufgerufen werden.
Also jeden Frame einmal. Ich hab damit aber gute Erfahrung. Der StartDrawing() Befehl wird bei Voxelgrafik sowieso den wenigsten Teil beanspruchen...

Grüße,

Kukulkan

Re: Voxelgrafik mit Purebasic.

Verfasst: 27.01.2011 10:14
von super_castle
Kukulkan, da hast du recht, es reicht wahrscheinlich aus "pro Frame".

Wenn ich es in Freebasic laufen lassen und ein Sleep in die For-schleife reinsetze, sehe ich jede einzelne Pixeländerung auf dem Screen, was ja bei Purebasic nicht sofort sichtbar wird , sondern erst nach dem Flip.

Da wird wohl auch die Flipperei ausreichen ohne sichtbaren Geschwindigkeitsverlust.

gruss