Doom3 2D-Fake

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Triton

Betreff: Doom3 2D-Fake

BeitragFr, Okt 08, 2004 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Als ich Doom3 gezockt habe, fand ich eigentlich die ganze Grafik toll.
Besonders aber diese ganzen, unglaublich detailierten und gut gemachten
Pads im Spiel. u.A eines mit diesem Diagramm:
user posted image

Das fand ich toll und habs nachgecodet:

user posted image

Code: [AUSKLAPPEN]

;*** Doom3 2D-Fake
;*** 8.10.2004, by Triton
;*** http://www.silizium-net.de/
Graphics 800,600,16,3
SetBuffer BackBuffer()
SeedRnd MilliSecs()
font1=LoadFont("verdana",32,1)
font2=LoadFont("verdana",24,1)
;Dim balken(3,3)      ;hier kann man manuell unterschiedliche Balkenverschiebungen eingeben
;For x = 1 To 3
;   For y = 1 To 3
;      balken(x,y)=Rand(0,180)
;   Next
;Next
Global originx = 370
Global originy = 400

time1 = MilliSecs()
While Not KeyDown(1)
loops = loops+1
If MilliSecs() - time1 > 1000 Then fps = loops:loops = 0:time1 = MilliSecs()
a = a + 3
If a > 360 Then a=0
Color 100,123,157 ;Ganz außen
Rect 0,0,800,600

Color 40,50,65 ;Mitte
Rect 10,10,790,520

Color 70,86,112   ;Balkenbg   
Rect 400,100,340,400
Color 190,200,215   ;balkenrand
Rect 400,100,340,400,0

Color 75,108,118  ;"fps"-balken
Rect 0,540,800,10
Rect 690,550,200,40
filltri(650,550,690,550,690,590,75,108,118,75,108,118)

SetFont font1
Color 168,171,181
Text 50,50, "F L U C T U A T I O N"
Text 685,550, fps+" FPS"
Color 68,71,90
Text 20,550, "S C I E N C E   S T A T I O N   -   S C A N"
Color Abs(Sin(a*5)*127+128),Abs(Sin(a*5)*100+100),Abs(Sin(a*5)*32+32)
Text 50,450, "R E C O R D I N G"
Color 78,81,91
Text 50,480,"D A T A   S T R E A M"
SetFont font2

   For x = 3 To 1 Step -1
   For y = 1 To 3 Step 1
      h# = Abs(Sin(a+(x-2*y)*50)*100+100)      ;höhe der Balken
      r=h/2+155
      g=h*0.8
      b=h*0.8
      rgb=255*$1000000 + r*$10000 + 0*$100 + 0
      filltri(xneu(x,y),yneu(x,y)-h,xneu(x+1,y),yneu(x+1,y)-h,xneu(x,y+1),yneu(x,y+1)-h,r,g,b,r,g,b)
      filltri(xneu(x+1,y+1),yneu(x+1,y+1)-h,xneu(x+1,y),yneu(x+1,y)-h,xneu(x,y+1),yneu(x,y+1)-h,r,g,b,r,g,b)
      filltri(xneu(x,y),yneu(x,y),xneu(x,y),yneu(x,y)-h,xneu(x,y+1),yneu(x,y+1),r*0.8,g*0.8,b*0.8,r*0.8,g*0.8,b*0.8)
      filltri(xneu(x,y+1),yneu(x,y+1)-h,xneu(x,y),yneu(x,y)-h,xneu(x,y+1),yneu(x,y+1),r*0.8,g*0.8,b*0.8,r*0.8,g*0.8,b*0.8)
      filltri(xneu(x,y+1),yneu(x,y+1),xneu(x,y+1),yneu(x,y+1)-h,xneu(x+1,y+1),yneu(x+1,y+1),r*0.6,g*0.6,b*0.6,r*0.6,g*0.6,b*0.6)
      filltri(xneu(x,y+1),yneu(x,y+1)-h,xneu(x+1,y+1),yneu(x+1,y+1),xneu(x+1,y+1),yneu(x+1,y+1)-h,r*0.6,g*0.6,b*0.6,r*0.6,g*0.6,b*0.6)
      Color 126,146,141
      Text (x-1)*100+50, (y-1)*26+100, Int(h+23)
      Text (x-1)*100+50, (y-1)*26+180, r
      Text (x-1)*100+50, (y-1)*26+260, g
      Text (x-1)*100+50, (y-1)*26+340, b
      Text 350, 100, "H"
      Text 350, 180, "R"
      Text 350, 260, "G"
      Text 350, 340, "B"
   Next
   Next
If KeyDown(1) Then End
Flip
Cls
Wend

;---
Function xneu(x,y)
Return (x*2+y*2)*20+originx
End Function

;---
Function yneu(x,y)
Return (y*2-x*2)/2*20+originy
End Function

;---
Function filltri(x1,y1,x2,y2,x3,y3,r,g,b,borderr,borderg,borderb)
For oft = 0 To 1
If x1 > x2 Then
   p=x2
   x2=x1
   x1=p
   q=y2
   y2=y1
   y1=q
End If
If x1 > x3 Then
   p=x3
   x3=x1
   x1=p
   q=y3
   y3=y1
   y1=q
End If
If x2 > x3 Then
   p=x3
   x3=x2
   x2=p
   q=y3
   y3=y2
   y2=q
End If
Next

Color r,g,b
For bx1# = x1 To x2
   m13# = (Float(y3-y1)/(x3-x1))
   n13# = -m13*x1+y1
   by1# = m13*bx1+n13
   
   m12# = (Float(y2-y1)/(x2-x1))
   n12# = -m12*x1+y1
   by2# = m12*bx1+n12
   If by2-by1 > 0 Then Rect bx1,by1,1,by2-by1
   If by2-by1 < 0 Then Rect bx1,by2,1,by1-by2
Next
For bx2 = x2 To x3
   m13# = (Float(y3-y1)/(x3-x1))
   n13# = -m13*x3+y3
   by3# = m13*bx2+n13
   
   m23# = (Float(y3-y2)/(x3-x2))
   n23# = -m23*x2+y2
   by4# = m23*bx2+n23
   If by4-by3 > 0 Then Rect bx2,by3,1,by4-by3
   If by4-by3 < 0 Then Rect bx2,by4,1,by3-by4
Next

Color borderr,borderg,borderb
Line x1,y1,x2,y2
Line x1,y1,x3,y3
Line x2,y2,x3,y3
End Function
Coding: silizium-net.de | Portfolio: Triton.ch.vu
  • Zuletzt bearbeitet von Triton am So, Dez 02, 2012 17:33, insgesamt 5-mal bearbeitet
 

OJay

BeitragFr, Okt 08, 2004 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr geil, auch wenn langsam...aber da ist noch genug optimierungspotential Smile

wir sollten wirklich mal ein doom2d machen Very Happy

Bms

BeitragFr, Okt 08, 2004 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ja korrekt is des krass!!!! einfach nur geil. genial. leider hab ich nur 6 FPS Crying or Very sad

<edit> ohne debugger und text(außer fps-text) 20 fps mehr!!!
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download
  • Zuletzt bearbeitet von Bms am Sa, Okt 09, 2004 12:59, insgesamt einmal bearbeitet
 

x.Force

BeitragFr, Okt 08, 2004 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ist wirklich geil (30-34 FPS)

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-

Triton

BeitragFr, Okt 08, 2004 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns schneller laufen soll, kann man z.B a=a+5 statt a+3 schreiben.
Sind zwar nicht mehr fps, aber die balken bewegen sich schneller Smile
Coding: silizium-net.de | Portfolio: Triton.ch.vu

rambo256

BeitragFr, Okt 08, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Boar,geil... Shocked
Das sieht ja genauso aus wie in Doom.... Dachte mir zuerst,"ach als wenn das jetzt gut aussieht....",aber ich hab mich getäuscht,sieht echt wie in Doom aus.Nagut bis auf diese Transparents... Wink
Asus F53z

Das Leben ist eine reine Konkatenation...

jungle

BeitragFr, Okt 08, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr sehr nice!

@x.force
wie athlon xp 2000+ und ~34fps ? Shocked

bei mir ~16fps auf einem xp 2600+ Question
In der Realität ist die Wirklichkeit ganz anders.

| P3 550Mhz | P90Mhz | AMD 1Ghz | XP 2600@3200Mhz l P2 400Mhz | Dual XP 2000Mhz |

Lord_Vader

BeitragFr, Okt 08, 2004 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den FPS liegt wie bei meiner benchmark NUR an den vielen sachen die verändert werden. Macht mal nen timer rein von 50 oder 75 millisekunden für den update der balken...

Desweiteren sind es die rects Wink

Edit: ACH gut natürlich Wink Sieht zumindest sehr identisch aus Smile

Edit2: 18-25 FPS Very Happy
 

Combine

BeitragDo, Feb 03, 2005 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
24 fps
Wow sehr gut Very Happy
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragDo, Feb 03, 2005 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Fein gemacht.

Und auch recht schnell bei mir. 50 FPS.

Ich würde sagen: Hut ab ! Aber ich hab leider keinen Smile

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***
 

Blitzkrieg Bop

BeitragDo, Feb 03, 2005 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Jaja, schleim dich ruhig ein Hot-Bit Very Happy
Scherz - aber an dieser Stelle auch von mir: Sehr gut. *THUMBS UP*
~ Hey Ho Let's Go ~
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragDo, Feb 03, 2005 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Sehr witzig !

Habe mir aber gedacht, daß sowas in der Art kommt...

tztztz

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***
 

Nox

BeitragDo, Feb 03, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, also am Speed kann man definitiv was machen. Wink Habe mal prompt ne alternative Zeichenmethode "dahingeklatscht" (unoptimiert).
Läuft bei mir ohne Debugmode und im Fullscreen mit 128 Pixel breiten Quads noch sehr flüssig (Athlon XP2400+, GF2 Smile ).

Momentan fällt mir ein, dass das Zeichnen bei mir absolut hirnrissig ist...und zwar wird pro Höhe das Image gezeichnet, was bei mehreren Quads total die Performance beeinflusst. Da ist auf jeden Fall noch was machbar und da liegt auch die größte Bremse.

Spielt ein wenig mit folgenden Werten rum:
Const QUAD_WIDTH% = 128 (Breite eines Quads)
Const QUAD_COUNT% = 2 (Anzahl + 1)
Const MOVE_AMOUNT% = 5 (Bewegung pro Frame)

Code: [AUSKLAPPEN]

Const QUAD_WIDTH% = 128
Const QUAD_HEIGHT% = QUAD_WIDTH% / 2
Const QUAD_HH% = QUAD_HEIGHT% / 2
Const QUAD_COLOR% = $00000100
Const QUAD_COUNT% = 2
Const OFFX% = 400
Const OFFY% = 300
Const MOVE_AMOUNT% = 5


Dim quads%(QUAD_COUNT%, QUAD_COUNT%)

Graphics(800, 600, 16, 1)
SetBuffer(BackBuffer())

SeedRnd(MilliSecs())

mainfont% = LoadFont("Tahoma", 16, 1)
isoquad% = BuildIsoQuad%(QUAD_WIDTH%, QUAD_HEIGHT%, QUAD_COLOR%)

For y% = 0 To QUAD_COUNT%
   For x% = 0 To QUAD_COUNT%
      quads%(x%, y%) = Rand(0, 255)
   Next
Next

While Not KeyHit(1)
   Cls
   
   For y% = 0 To QUAD_COUNT%
      For x% = 0 To QUAD_COUNT%
         quads%(x%, y%) = (quads%(x%, y%) + MOVE_AMOUNT%) Mod 255

         px% = Sin(quads(x%, y%)) * 255
         dx% = OFFX% + x% * (QUAD_HEIGHT%) - y% * (QUAD_HEIGHT%)
         dy% = OFFY% + x% * (QUAD_HH%) + y% * (QUAD_HH%)
                  
         For h% = 0 To px%
         
            DrawImage isoquad%, dx%, dy% - h%, px%
         Next
      Next
   Next
   
   Flip 1
Wend




Function BuildIsoQuad%(width%, height%, col%)

   image% = CreateImage(width%, height%, 256)

   Local halfw# = Float(width% / 2)
   Local halfh# = Float(height% / 2)
   Local startx# = halfw#
   Local stepx# = Float(width%) / Float(height%)
   
   For frame% = 0 To 255
      LockBuffer(ImageBuffer(image%, frame%))

      framecol% = col% * frame%

      For y% = 0 To height% - 1
   
         If (y% <= halfh#) Then startx# = halfw# - (y% * stepx#)
         If (y% > halfh#) Then startx# = y% Mod halfh# * stepx#

         endx# = Float(width%) - startx# - 1.0
      
         For x# = startx# To endx#
            If (x# > endx#-2.0 And y% => halfh#) Then
               bf% = frame% - 10
               If (bf% < 0) Then bf% = 0
               
               finalcol% = col% * bf%
            Else
               finalcol% = framecol%
            EndIf
         
            WritePixelFast x#, y%, finalcol%, ImageBuffer(image%, frame%)
         Next
      Next   
   
      UnlockBuffer(ImageBuffer(image%, frame%))
   
   Next
   
   Return image%
   
End Function
 

Blitzkrieg Bop

BeitragDo, Feb 03, 2005 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Surprised
War ja nur Spaß Hot-Bit Very Happy Wink

@Nox: Jo, läuft gut. Smile
~ Hey Ho Let's Go ~

Triton

BeitragDo, Feb 03, 2005 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist aber nicht so optisch perfektioniert wie meins (welches ja noch viele Text und paar andere Zeichenbefehle drin hat) Smile

Hab jetzt auch ne bischen optimierte Version reineditiert.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Kernle 32DLL

BeitragFr, Feb 04, 2005 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin wirklich begeistert !
Hab zwar nie Doom³ gespielt,aber das sieht einfach
so schon mega hammer geil aus !

Was man alles mit BB machen kann Rolling Eyes
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog]
Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89
Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009

Suco-X

Betreff: .......

BeitragFr, Feb 04, 2005 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habe das ganze mal aus Fun Bmax tauglich gemacht.
Kriege 425 fps.

Code: [AUSKLAPPEN]

Graphics 800,600,32


SeedRnd MilliSecs()


Global originx = 370
Global originy = 400
Global loops:Int = 0

time1 = MilliSecs()

bglSetSwapInterval(0)
While Not KeyDown(1)
   loops = loops+1
   If MilliSecs() - time1 > 1000
      fps = loops
      loops = 0
      time1 = MilliSecs()
   EndIf
   
   a = a + 3
   If a > 360
      a=0
   EndIf
   
   
SetColor 100,123,157
DrawRect 0,0,800,600

SetColor 40,50,65
DrawRect 10,10,790,520

SetColor 70,86,112   
DrawRect 400,100,340,400
SetColor 190,200,215   
DrawRect 400,100,340,400

SetColor 75,108,118 
DrawRect 0,540,800,10
DrawRect 690,550,200,40
filltri(650,550,690,550,690,590,75,108,118,75,108,118)


SetColor 168,171,181
DrawText "F L U C T U A T I O N",50,50
DrawText fps+" FPS",685,550

SetColor 68,71,90
DrawText "S C I E N C E   S T A T I O N   -   S C A N",20,550
SetColor Abs(Sin(a*5)*127+128),Abs(Sin(a*5)*100+100),Abs(Sin(a*5)*32+32)

DrawText "R E C O R D I N G",50,450
SetColor 78,81,91
DrawText "D A T A   S T R E A M",50,480


   For Local x:Int = 3 To 1 Step -1
   For Local y:Int = 1 To 3 Step 1
      h# = Abs(Sin(a+(x-2*y)*50)*100+100)      'h”he der Balken
      r=h/2+155
      g=h*0.8
      b=h*0.8
      rgb=255*$1000000 + r*$10000 + 0*$100 + 0
      filltri(xneu(x,y),yneu(x,y)-h,xneu(x+1,y),yneu(x+1,y)-h,xneu(x,y+1),yneu(x,y+1)-h,r,g,b,r,g,b)
      filltri(xneu(x+1,y+1),yneu(x+1,y+1)-h,xneu(x+1,y),yneu(x+1,y)-h,xneu(x,y+1),yneu(x,y+1)-h,r,g,b,r,g,b)
      filltri(xneu(x,y),yneu(x,y),xneu(x,y),yneu(x,y)-h,xneu(x,y+1),yneu(x,y+1),r*0.8,g*0.8,b*0.8,r*0.8,g*0.8,b*0.8)
      filltri(xneu(x,y+1),yneu(x,y+1)-h,xneu(x,y),yneu(x,y)-h,xneu(x,y+1),yneu(x,y+1),r*0.8,g*0.8,b*0.8,r*0.8,g*0.8,b*0.8)
      filltri(xneu(x,y+1),yneu(x,y+1),xneu(x,y+1),yneu(x,y+1)-h,xneu(x+1,y+1),yneu(x+1,y+1),r*0.6,g*0.6,b*0.6,r*0.6,g*0.6,b*0.6)
      filltri(xneu(x,y+1),yneu(x,y+1)-h,xneu(x+1,y+1),yneu(x+1,y+1),xneu(x+1,y+1),yneu(x+1,y+1)-h,r*0.6,g*0.6,b*0.6,r*0.6,g*0.6,b*0.6)
      SetColor 126,146,141
      DrawText Int(h+23),(x-1)*100+50, (y-1)*26+100
      DrawText r,(x-1)*100+50, (y-1)*26+180
      DrawText g,(x-1)*100+50, (y-1)*26+260
      DrawText b,(x-1)*100+50, (y-1)*26+340
      DrawText "H",350, 100
      DrawText  "R",350, 180
      DrawText  "G",350, 260
      DrawText "B",350, 340
   Next
   Next
If KeyDown(1) Then End
Flip
FlushMem()
Cls
Wend

'---
Function xneu(x,y)
Return (x*2+y*2)*20+originx
End Function

'---
Function yneu(x,y)
Return (y*2-x*2)/2*20+originy
End Function

'---
Function filltri(x1,y1,x2,y2,x3,y3,r,g,b,borderr,borderg,borderb)
For oft = 0 To 1
If x1 > x2 Then
   p=x2
   x2=x1
   x1=p
   q=y2
   y2=y1
   y1=q
End If
If x1 > x3 Then
   p=x3
   x3=x1
   x1=p
   q=y3
   y3=y1
   y1=q
End If
If x2 > x3 Then
   p=x3
   x3=x2
   x2=p
   q=y3
   y3=y2
   y2=q
End If
Next

SetColor r,g,b
For Local bx1:Float = x1 To x2
   m13# = (Float(y3-y1)/(x3-x1))
   n13# = -m13*x1+y1
   by1# = m13*bx1+n13
   
   m12# = (Float(y2-y1)/(x2-x1))
   n12# = -m12*x1+y1
   by2# = m12*bx1+n12
   If by2-by1 > 0
      DrawRect bx1,by1,1,by2-by1
   EndIf
   
   If by2-by1 < 0
      DrawRect bx1,by2,1,by1-by2
   EndIf
   
Next
For Local bx2:Float = x2 To x3
   m13# = (Float(y3-y1)/(x3-x1))
   n13# = -m13*x3+y3
   by3# = m13*bx2+n13
   
   m23# = (Float(y3-y2)/(x3-x2))
   n23# = -m23*x2+y2
   by4# = m23*bx2+n23
   If by4-by3 > 0
      DrawRect bx2,by3,1,by4-by3
   EndIf
   
   If by4-by3 < 0
      DrawRect bx2,by4,1,by3-by4
   EndIf
   
Next

SetColor borderr,borderg,borderb
DrawLine x1,y1,x2,y2
DrawLine x1,y1,x3,y3
DrawLine x2,y2,x3,y3
End Function


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

OJay

BeitragFr, Feb 04, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
bmax ist keine kunst. das nutzt ja 3D Razz
 

.Yukito.

BeitragFr, Feb 04, 2005 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso ist das keine kunst? atm sieht das stark nach 2d aus (aber bmax nutzt eben kein directdraw, was eben das ganze schneller macht) sieht aufjedenfall nett aus Wink
AMD 2000+, 512MB DDR, ATI Radeon 9000, 80 GB HDD, DX9.0, C4D 8.0, Adobe Photoshop 7.0
 

sven123

BeitragSa, Feb 05, 2005 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
@Triton
Ein klasse Effekt hat mich schwer beindruckt dass du sowas einfach mal "nachzucoden".
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group