Scanlines wie im MS-DOS-Modus/80er Spielautomaten
Übersicht
BlitzBasic
Allgemein
BlizzardBetreff: Scanlines wie im MS-DOS-Modus/80er Spielautomaten |
Antworten mit Zitat |
|
|---|---|---|
|
Wie kriegt man so typische dünne, horizontale Leerzeilen auf dem Screen?
1024x768 nehmen und alle 2 Zeilen eine schwarze Linie einfügen? |
||
Kekskiller |
Antworten mit Zitat |
|
|---|---|---|
|
Ich wollte heute auch sowas machen, fällt mir gerade auf, für mein SpaceInvadersSpielchen.
Eigentlich ist das ganze recht einfach, du ziehst abwechselnd eine dunklere und eine hellere Linie über den Bildschirm, transparent versteht sich. So kriegst de sogar zusätzlich nen kleinen Flimmereffekt, vor allem, wenn man die Transparenzen kurz hebt und dann senkt. Naja, Schnickschnack. Aber toller Schnickschnack. |
||
|
|
Markus Rossé |
Antworten mit Zitat |
|---|---|---|
|
Code: [AUSKLAPPEN] Function DrawScanlines() For y=0 To GraphicsHeight() Step 2 Color 0,0,0 Line 0,y,GraphicsWidth(),y Next End Function Ist aber nicht sehr schön.. cu, Markus Rossé |
||
Blizzard |
Antworten mit Zitat |
|
|---|---|---|
|
Das ruckelt aber bei mir z.B. in einem Spiel...
Die Linien müßten halbtransparent gezeichnet werden... das geht in Realtime natürlich nicht. Wäre vielleicht ein transparentes PNG mit halbtransparenten 2er Zeilen eine Lösung, was man auf das Spiel einfach "oben" draufklatscht? |
||
|
|
Ayman |
Antworten mit Zitat |
|---|---|---|
|
Eine weitere Möglichkeit, so hab ich das das mal gelöst, ist es, alle im Spiel verwendeten Grafiken und BMP-Fonts so zu generieren, dass eben jede zweite Zeile schwarz bleibt.
Bei Bewegungen darauf achten, dass man in der Vertikalen immer um zwei Pixel verschiebt. Diese Lösung ist klar schneller, als jedes nachträgliche Darüberzeichnen. |
||
Blizzard |
Antworten mit Zitat |
|
|---|---|---|
| Hab grad festgestellt, daß bei 640x480 eine kleine Scanline automatisch dabei ist... | ||
|
|
Bigmichi |
Antworten mit Zitat |
|---|---|---|
| was ist das überhaupt ? =/ mir stellt sich die frage seit dem eröffnen des Threads o.O | ||
Blizzard |
Antworten mit Zitat |
|
|---|---|---|
|
||
|
|
Bigmichi |
Antworten mit Zitat |
|---|---|---|
| sowas hab ich noch nie gesehen o.O hab früher aber viele dosspiele gespielt o.O komisch wofür will man das machen also nachmachen ? =/ | ||
Blizzard |
Antworten mit Zitat |
|
|---|---|---|
|
Damit es bei Remakes von alten Spielen "authentischer" aussieht |
||
noir |
Antworten mit Zitat |
|
|---|---|---|
|
naja am einfachsten is es echt einfach die bilder davor zu bearbeiten
so z.b kannst es ja deinem geschmack anpassen Code: [AUSKLAPPEN] grafik = LoadImage ("grafik.bmp") Breit=ImageWidth (grafik) Hoch=ImageHeight (grafik) Graphics breit,hoch,0,2 grafik = LoadImage ("grafik.bmp");wegen graphics noch mal laden bild = CreateImage(breit,hoch) SetBuffer ImageBuffer(bild) DrawImage grafik,0,0 Color 0,0,0 For i = 1 To hoch Step 5 Rect 0,i,breit,2 Next SetBuffer BackBuffer() DrawImage bild,0,0 Flip SaveBuffer(BackBuffer(),"grafik1.bmp") WaitKey und wenn du es in echtzeit machen willst wie Markus Rossé es vorgeschlagen hat nimmt nicht line sondern rect. |
||
TOONY |
Antworten mit Zitat |
|
|---|---|---|
|
ich würde eine Bitmap erstellen mit der auflösung deines spieles und immer eine weiße, dann eine schwarze linie in diese bitmap zeichnen.
Die farbe weiß setzt du dann auf transparent. Nun zeichnest du diese bitmap immer vor flip in dein code ein.... |
||
|
|
Abrexxes |
Antworten mit Zitat |
|---|---|---|
|
Bigmichi hat Folgendes geschrieben: sowas hab ich noch nie gesehen o.O hab früher aber viele dosspiele gespielt o.O komisch wofür will man das machen also nachmachen ? =/
Bei DOS Spielen gab es das auch nicht. Der Effekt stammt von Spieleautomeaten wie meiner. Hier war ein TV-Bildröhre mit 50 oder 60 HZ eingebaut. Da diese Apparate nach dem Zeilenprinzip arbeiten hatte das umwandeln der Videodaten in ein PAL oder NTCS Videoformat den obigen Effekt. Auch bei Konsolen und Computer die an den TV Antenneneingang gesteckt wurden konnte mann den Effekt bewundern (Wenn auch nicht so drastisch wie oben) Heute werden Konsolen mit R-G-B Signal (EUro AV oder SCART genannt) an den Fernseher angeschlossen, ausserdem besitzen heutige Fernseher Filter die das nochmals reduzieren. (Hat nix mit 100Hz zu tun^^) cu Linux
|
||
|
|
Jan_Ehemaliger Admin |
Antworten mit Zitat |
|---|---|---|
|
hm,
Darf ich ne BB3D Lösung Posten oder nciht? |
||
| between angels and insects | ||
|
|
Abrexxes |
Antworten mit Zitat |
|---|---|---|
| Der Spatz in der Hand ist besser als die Taube auf dem Dach. | ||
getlose |
Antworten mit Zitat |
|
|---|---|---|
| @_jan, mach es doch einfach :) | ||
|
|
Jan_Ehemaliger Admin |
Antworten mit Zitat |
|---|---|---|
Einstellbar, dank B3D
Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 Bild=LoadImage("landschaft-tirol3.jpg") SL=Create_Scanlines() Repeat m=m+1 EntityAlpha SL,Abs(Sin(m)) DrawImage Bild,0,0 RenderWorld Flip Until KeyHit(1) Free_Scanline() End Global SL_cam Global SL_Tex Global SL_Mesh Function Create_Scanlines(Horizontalepixel=2) Local cam,s,m,rgb,tex,surface Local ScanlinesMesh,v0,v1,v2,v3 Local gh,gw If Not(SL_Cam) Cam=CreateCamera() CameraClsMode cam,0,1 sl_cam=cam tex=CreateTexture(1,GraphicsHeight(),1+4) SL_Tex=tex SetBuffer TextureBuffer(tex) rgb= (33 Shl 8)+(33 Shl 4)+33 For s = 0 To TextureHeight(tex)-1 If (s Mod Horizontalepixel) Then For m = 0 To TextureWidth(tex)-1 WritePixel m,s,rgb Next EndIf Next SetBuffer BackBuffer() ScanlinesMesh=CreateMesh() SL_Mesh = ScanlinesMesh Surface = CreateSurface(ScanlinesMesh) v0=AddVertex(surface,-4,-3,0,0,0) v1=AddVertex(surface,4,-3,0,1,0) v2=AddVertex(surface,-4,3,0,0,1) v3=AddVertex(surface,4,3,0,1,1) AddTriangle(surface,v1,v0,v2) AddTriangle(surface,v1,v2,v3) gw=1 Repeat gw=gw*2 Until gw >= GraphicsWidth() gh=1 Repeat gh=gh*2 Until gh >= GraphicsHeight() ScaleEntity ScanlinesMesh,Float(Float(gw)/Float(GraphicsWidth())),Float(Float(gh)/Float(GraphicsHeight())),1 EntityTexture ScanlinesMesh,tex PositionEntity ScanlinesMesh,0,0,4 EntityColor ScanlinesMesh,0,0,0 EntityOrder ScanlinesMesh,-5 EndIf Return SL_Mesh End Function Function Free_Scanline() FreeEntity SL_Mesh FreeTexture SL_Tex FreeEntity SL_Cam End Function So, bei mir Funzt es, wenn es bei euhc anders ist, bitte nen Screen Posten, damit ich sehe, was meine Graka Falsch angezeigt hat. Und, bitte Sagt was dazu. |
||
| between angels and insects | ||
|
|
Jan_Ehemaliger Admin |
Antworten mit Zitat |
|---|---|---|
|
HM, ich fühle mich so misbraucht.
Kein Kommentar kein Danke kein Schlag? |
||
| between angels and insects | ||
David |
Antworten mit Zitat |
|
|---|---|---|
|
Hi!
Jan_ schlag! Hehe, nein... Ich habs eben ausprobiert und finde es schon sehr cool, zumal es anscheinend auch für in Realtime zu gebrauchen ist. Gutes Stück Code! grüße |
||
|
|
Jan_Ehemaliger Admin |
Antworten mit Zitat |
|---|---|---|
|
Jap, ist es ganz sicher.
Der REchenaufwand ist sehr gering. |
||
| between angels and insects | ||
Übersicht
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group



