[B3D] 3D-Brillen Skript(Rot/Grün)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

pirahni

Betreff: [B3D] 3D-Brillen Skript(Rot/Grün)

BeitragSo, Dez 07, 2008 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich lieeeeebe 3D Bilder(Red/Green) und habe deswegen einen Stereoskopieskript geschriebendiesen findet ihr unten.

Stereoskopie ist wenn man durch ein Werkzeug(meistens 3D Brillen) schaut und dann 3D Bilder sieht. Diese entstehen indem man 2 Bilder aus verschiedenen Perspektiven aufnimmt und dann zusammenmischt. Die Mischart ist von Brille zu Brille anders. Wie oben schon erwähnt wird hier eine rot/grün Brille benötigt. Wem dass nicht reicht hier ein Wikipedialink: http://de.wikipedia.org/wiki/Stereoskopie

Und hier jetzt endlich der Code: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()

cameratex1=CreateTexture(512,512)
cameratex2=CreateTexture(512,512)

camcube1=CreateCube(camera)
EntityTexture camcube1,cameratex1
ScaleEntity camcube1,1.2,1.2,1.2
EntityColor camcube1,255,0,0
EntityAlpha camcube1,0.5
EntityFX camcube1,1
FlipMesh camcube1

camcube2=CreateCube(camera)
EntityTexture camcube2,cameratex2
ScaleEntity camcube2,1.2,1.2,1.2
EntityColor camcube2,0,255,0
EntityAlpha camcube2,0.5
EntityFX camcube2,1
FlipMesh camcube2

camcube3=CreateCube(camera)
ScaleEntity camcube3,1.3,1.3,1.3
EntityFX camcube3,1
FlipMesh camcube3

;AB HIER SIND ES SACHEN, DIE NUR ZUR DEMONSTRATION DIENEN
light=CreateLight()
RotateEntity light,90,0,0

cube=CreateCube()
PositionEntity cube,0,0,5
;AB HIER NICHT MEHR.

Repeat
;AB HIER SIND ES SACHEN, DIE NUR ZUR DEMONSTRATION DIENEN
  t=MilliSecs()
;AB HIER NICHT MEHR.
  EntityAlpha camcube1,0
  EntityAlpha camcube2,0
  EntityAlpha camcube3,0

;AB HIER SIND ES SACHEN, DIE NUR ZUR DEMONSTRATION DIENEN
  TurnEntity cube,1,1,0
;AB HIER NICHT MEHR.

  MoveEntity camera,-0.05,0,0
  RenderWorld()
  CopyRect 0,0,640,480,-64,32,BackBuffer(),TextureBuffer(cameratex1)

  MoveEntity camera,0.1,0,0
  RenderWorld()
  MoveEntity camera,-0.05,0,0
  CopyRect 0,0,640,480,-64,32,BackBuffer(),TextureBuffer(cameratex2)

  EntityAlpha camcube1,0.5
  EntityAlpha camcube2,0.5
  EntityAlpha camcube3,1
  RenderWorld()

;AB HIER SIND ES SACHEN, DIE NUR ZUR DEMONSTRATION DIENEN
  If (MilliSecs()-t)<>0 Then Text 20,20,1000/(MilliSecs()-t)+" FPS"
;AB HIER NICHT MEHR.
  Flip
Until KeyDown(1)


Ist leider etwas langsam:( aber funktioniert:)!!!

PS: Würde mich über Tipps zum Schnellermachen freuen, bei mir sind es nur 10 FPS[/url]

Hier kommen noch Screenshots von verschiedenen Anwendungen in denen ich diesen Code verwendet habe:
user posted image
user posted image

PPS: Ein besserer Code ist unten aufgelistet.
  • Zuletzt bearbeitet von pirahni am Mo, Dez 08, 2008 21:56, insgesamt 5-mal bearbeitet

TimBo

BeitragSo, Dez 07, 2008 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich zwar wenig ahnung davon, ist es aber nicht auch möglich 2 Cameras zu machen, die das ganze von verschiedenen Winkeln Filmen ?
Die eine kannste ja durch einee grün-transparente Textur blicken lassen, die andere durch ne rote.

Weiß nicht, ob das klappt.
Aber vor kurzem hat doch schon mal jemand sow as geschrieben.

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

pirahni

BeitragSo, Dez 07, 2008 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte ich schon machen, wüsste aber net wie man das zusammenfügen sollte:(
 

CN

BeitragSo, Dez 07, 2008 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm?
Bei mir läuft das mit 200 FPS oO
Schöner Effekt!

PS: Ja, ich meine mich daran zu erinnern dass hier schonmal was in der Art da war.
Bin mir aber nicht sicher.

Edit: Hier mein System:
Windows XP
Nvidia Geforce 8600 GT
AMD Athlon 64 X2 4000+
2,09 GHz
2GB RAM
[url=unrealstuff.bplaced.de]all rites reversed[/url]

pirahni

BeitragSo, Dez 07, 2008 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Schön, dann werde ich es auf einem anderem System versuchen. Vielleicht funzts bei meinem Bruder besser.

PS: 2000 FPS??? Kann dein PC halbe Millisekunden messen, denn zur ermitlung der Zeit verwende ich ja die Formel 1000/(MilliSecs()-t)
 

CN

BeitragSo, Dez 07, 2008 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image
Ich weiss nicht was da los ist.
Muss wohl an deinem System liegen, dass du nur 10 FPS hast.
[url=unrealstuff.bplaced.de]all rites reversed[/url]

pirahni

BeitragSo, Dez 07, 2008 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, liegt an meinem PC. Bei meiner Mutter läuft es zwischen 25 und 30. Naja, wie dem auch sei, in einem größerem Spiel siehts wunderbar aus^^.

ozzi789

BeitragMo, Dez 08, 2008 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte circa 250-270
liegt jedenfalls nicht am code.
Hast du eine onboard grafikkarte?

Denke es liegt an dem Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Nicdel

BeitragMo, Dez 08, 2008 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
5 FPS mit Onboard 64 MB.

Xaymar

ehemals "Cgamer"

BeitragMo, Dez 08, 2008 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
66 FPS @ Mein System
Amd Sempron 2,4+(derzeit 1,8 ghz)
Ati Radeon 8800
3/4 gb Ram
Warbseite

TimBo

BeitragMo, Dez 08, 2008 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

deine Frame-Anzeige scheint nicht zu stimmen.

Code: [AUSKLAPPEN]

ms=MilliSecs():Text 0,50,fps
If ms>mt Then mt=ms+500:fps=frame1:frame1=0 Else frame1=frame1+2


ergibt bei mir anderes als

Code: [AUSKLAPPEN]
t= millisecs()
If (MilliSecs()-t)<>0 Then Text 20,20,1000/(MilliSecs()-t)+" FPS"


Edit: Vergesst es , bin doof.

Bei meiner Version habe ich mit Flip(0) so um die 160-170FPS

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

pirahni

BeitragMo, Dez 08, 2008 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe es jetzt allgemein gültiger gemacht, nähmlich als Include Datei. sie wird einfach aufgerufen, die ganzen Sachen normal gemacht und dann statt Renderworld einfach Renderworld3d aufrufen. Schon erscheint es eben für 3D Brillen. Hier der Code: [AUSKLAPPEN]
;Voreinstellungen, mit Kamerainitalisierung
;Voreinstellungen, mit Kamerainitalisierung

Global camera=CreateCamera()

Global cameratex1=CreateTexture(512,512)
Global cameratex2=CreateTexture(512,512)

Global camcube1=CreateCube(camera)
ScaleEntity camcube1,1.1,1.1,1.1
EntityTexture camcube1,cameratex1
EntityColor camcube1,255,0,0
EntityAlpha camcube1,0.5
EntityFX camcube1,1
FlipMesh camcube1

Global camcube2=CreateCube(camera)
ScaleEntity camcube2,1.1,1.1,1.1
EntityTexture camcube2,cameratex2
EntityColor camcube2,0,255,0
EntityAlpha camcube2,0.5
EntityFX camcube2,1
FlipMesh camcube2

Global camcube3=CreateCube(camera)
ScaleEntity camcube3,1.2,1.2,1.2
EntityFX camcube3,1
FlipMesh camcube3

;Renderworld3D bewirkt das gleiche wir renderworld,
;nur dass die Welt in rot/grün ist und somit für 3D Brillen geeignet.
Function renderworld3d()
  MoveEntity camera,-0.05,0,0
  RenderWorld()
  CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),256-GraphicsWidth()/2,256-GraphicsHeight()/2,BackBuffer(),TextureBuffer(cameratex1)

  MoveEntity camera,0.1,0,0
  RenderWorld()
  MoveEntity camera,-0.05,0,0
  CopyRect 0,0,GraphicsWidth(),GraphicsHeight(),256-GraphicsWidth()/2,256-GraphicsHeight()/2,BackBuffer(),TextureBuffer(cameratex2)

  EntityAlpha camcube1,0.5
  EntityAlpha camcube2,0.5
  EntityAlpha camcube3,1
  RenderWorld()
  EntityAlpha camcube1,0
  EntityAlpha camcube2,0
  EntityAlpha camcube3,0
End Function
  • Zuletzt bearbeitet von pirahni am Mo, Dez 08, 2008 21:55, insgesamt 2-mal bearbeitet

The_Nici

BeitragMo, Dez 08, 2008 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist modern nicht Cyan anstatt Grün sehr verbreitet?
(Cyan = 0,255,255)
MfG

EDIT: Mach EntityAlpha vor der Hauptschleife, und benutze in der Hauptschleife HideEntity bzw. ShowEntity

pirahni

BeitragMo, Dez 08, 2008 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, cyan ist sehr verbreitet. Ich habe aber eine rot/grün-Brille. Ich hielt die Leute in diesem Forum Intelliegent genug um das zu ändern. trotzdem Danke für den Tipp(der mit Show und Hide)

Edit: Habe es versucht, werde es aber nicht ändern, denn die Farbe flackert dann(je nachdem wie die Kamera bewegt wird) und es ist nicht schneller. Wenn du es für dich änderst ist es aber auch in Ordnung. (Verwende es mal mit einer rotierenden Kamera, dann wirst du sehen was ich meine)

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group