[B3D] Camera auf Textur malen ohne das die Camera angezeigt
Übersicht

Davok`xardenBetreff: [B3D] Camera auf Textur malen ohne das die Camera angezeigt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie kann man das Bild einer Camera auf einer Textur anzeigen ohne das die Kamera uf dem sichtbaren bereich des Bildschirms gerendert wird.
Code: [AUSKLAPPEN] Graphics3D 800,600,16,1 Setbuffer Backbuffer() cam1 = CreateCamera() cameraviewwport cam1,0,0,800,600 texture_cam = createCmaera() cameraviewport texture_cam,800,600,100,100 .... Klappt ja nicht weil die texture_cam dann ja auf dem ganzen Bildschirm angezeigt wird. Ich hatte noch ne Lösung mit 2 Renderworld wo beim ersten die Camera angezeigt wird die Texture gespeichert und dann beim 2.RenderWorld die Texture_cam nicht angezeigt wird das ging aber irgenwie extrem auf die Speed. Wie löst man so was besser ?[/code] |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
- Zuletzt bearbeitet von Davok`xarden am Mi, Aug 02, 2006 14:19, insgesamt einmal bearbeitet
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, 1. nur 1ne Cam
2. jeden frame den Viewport anpassen 3. nach dem renderworld copyrect von backbuffer() auf texturebuffer(tex) Camera wieder resizen und dann die normale welt rendern dann flip - damit der Delphin auch was zu tuhen hat. sollte funzen |
||
between angels and insects |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sry aber ich kapier die antwort nicht so wirklich wäre schön wenns was in nomalem Deutsch wär. Außerdem hab ich Cameraprojekt mit Cameraviewport verwechselt habs oben editiert. | ||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Deine Überlegung war schon richtig.
du musst 2x RenderWorld aufrufen. Beim ersten Durchgang renderst du das für die Textur in den entsprechenden Viewport und Schreibst es dann mittels Copyrect in die Textur. Danach renderst du nocheinmal und zwar mit der "richtigen" Kamera (falls du nicht die ganze zeit viewportsettings ändern willst etc). Und ja das zieht an der Performance. Aber genau genommen brauchst du eh nur 60-80 FPS, also würde ich gleich vorweg über einen Timer dafür sorgen, dass nur 80x pro Sekunde gerendert wird. (je nachdem was der Texturrender macht kann man das sogar noch seltener machen, nur 20x oder 40x pro Sekunde) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
eigentlich brauch man nur 20FPS da der Mensch eh nicht mehr sieht. Mein Problem ist das ich immoment 40FPS und ich hab nur ne Plane mit Textur und ein Modell von nem SPieler zum rendern da, Gibt es da keine bessere Methode ?
Rechnerkonfiguration: 3,2Ghz : Nvidia Geforce 5200FX : 512MB Ram |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
5200 hat sehr lahmen ram. | ||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein gibt es nicht.
Es gibt keine Möglichkeiten auf eine Textur zu rendern. Wenn du allerdings so wenige FPS hast, dann muss schon was ganz komisches ablaufen. Da müsste das Modell schon fast animiert mit 50000 polygonen oder so sein, also definitiv nix brauchbares für Echtzeit 3D ... Ansonsten wüsste ich net wie du mit einer richtigen Grafikkarte soweit runter kommen solltest. Ausgenommen du hast das loadmesh fälschlicherweise in der Hauptschleife drin, wo es net hingehört. Hast du ein codebeispiel, dass das Problem zeigt? |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das mit dem Loadmesh in der Hauptschleife könnte sein hatte das beinem früheren Projekt auchschonmal das ich mir nochma angekuckt hab. Soviele Polys hat mein Mesh abber auch nicht. Ja ich hab ein Codebeispiel aber erst morgen das BB und Internet auf verschiedenen PC's sind.
MFG xarden |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier jetzt der Code:
Code: [AUSKLAPPEN] AppTitle "Minimap" Dim GFX(3) GFX(0) = 800 GFX(1) = 600 GFX(2) = 16 GFX(3) = 1 Graphics3D GFX(0),GFX(1),GFX(2),GFX(3) SetBuffer BackBuffer() Global FPS = MilliSecs() Global player = CreateSphere() PositionEntity player,0,2,0 Global cam1p = CreatePivot(Player) TurnEntity cam1p,30,0,0 Global cam1 = CreateCamera(cam1p) MoveEntity cam1,0,0,-5 Global l1 = CreateLight(cam1) Global Boden = CreatePlane() Global Boden_tex = CreateTexture(16,16) SetBuffer TextureBuffer(Boden_tex) : Color 155,155,155 : Rect 0,0,16,16 : Color 255,0,0 : Rect 4,4,8,8 : Line 0,0,15,15 : Line 0,15,15,0 : Color 0,0,0 : Rect 0,0,16,16,0 : SetBuffer BackBuffer() ScaleTexture Boden_tex,8,8 EntityTexture Boden,Boden_tex ;-man ben�igt fr diesen abschnitt die Media-datein-------- ;-die man im Samples Order "/castle/castle" finden---------- ;-diese einfach in einen "media"-order speichern und-------- ;-den im Order abspeichern in dem sich diese Datei befindet- Global world = LoadMesh("media/castle1.x") ScaleEntity world,0.2,0.2,0.2 PositionEntity world,0,-0.5,0 ScaleEntity player,2,2,2 PositionEntity player,0,2,-30 EntityType player,1 EntityType world,2 EntityType Boden,3 EntityRadius player,2 Collisions 1,2,2,3 Collisions 1,3,2,3 ;-In der Hauptschleife folgt ein 2.Teil den man nicht------ ;-ben�igt wenn man die Media-Dateien nicht haben---------- Const minimap_size = 250 Global minimap = CreateImage(minimap_size,minimap_size) : MaskImage minimap,10,20,30 Global minimap_cam = CreateCamera() CameraViewport minimap_cam,GFX(0)-minimap_size,0,minimap_size,minimap_size Global minimap_alpha = CreateImage(minimap_size,minimap_size) : MaskImage minimap_alpha,0,0,255 SetBuffer ImageBuffer(minimap_alpha) : Color 10,20,30 : Rect 0,0,minimap_size,minimap_size : Color 0,0,255 : Oval 0,0,minimap_size,minimap_size : Color 255,0,0 : Oval 0,0,minimap_size,minimap_size,0 : Oval 1,1,minimap_size-2,minimap_size-2,0 : Color 0,0,0 : Oval Minimap_size/2-4,minimap_size/2-4,8,8 : Rect minimap_size/2-2,minimap_size/2-7,4,3 : SetBuffer BackBuffer() Repeat If KeyDown(17) Then MoveEntity Player,0,0,+0.5 If KeyDown(31) Then MoveEntity Player,0,0,-0.5 If KeyDown(30) Then MoveEntity Player,-0.5,0,0 If KeyDown(32) Then MoveEntity Player,+0.5,0,0 PositionEntity minimap_cam,EntityX(player),100,EntityZ(player) RotateEntity minimap_cam,90,EntityYaw(player),EntityRoll(player) ;-2.Teil l�chen wer keine Media-Datein will- ;-forsetzun von eben------------------------- PositionEntity player,EntityX(player),EntityY(player)-0.2,EntityZ(player) mxs = MouseXSpeed() mys = MouseYSpeed() TurnEntity player,0,-mxs,0 TurnEntity cam1p,mys,0,0 MoveMouse GFX(0)/2,GFX(1)/2 MouseXSpeed() : MouseYSpeed() ;-------------------------------------------- UpdateWorld EntityOrder minimap_cam,-1 EntityOrder player,1 RenderWorld CopyRect GFX(0)-minimap_size,0,minimap_size,minimap_size,0,0,BackBuffer(),ImageBuffer(minimap) SetBuffer ImageBuffer(minimap) : DrawImage minimap_alpha,0,0 : SetBuffer BackBuffer() EntityOrder minimap_cam,1 EntityOrder player,0 RenderWorld DrawImage minimap,10,10 Color 255,255,255 Text 10,GFX(1)-30,"TrisRendered() = " + TrisRendered() Text 10,GFX(1)-15,"F(rames)P(er)S(econd) = " + FPS_return() Flip Until KeyHit(1) End Function FPS_return() If FPS < MilliSecs() Then currentframes = 1000/(MilliSecs() - FPS) FPS = MilliSecs() Return currentframes End Function Damit hab ich folgende FPS in 800x600x16 mit V-Sync (Flip1) mit Media-Dateien: 76FPS ohne Media-Dateien: 76FPS ohne V-Sync (Flip 0) mit Media-Dateien: 125FPS ohne Media-Dateien: 166 in 1280x1024x32 mit V-Sync (Flip1) mit Media-Dateien: 19 - 27FPS ohne Media-Dateien: 38FPS ohne V-Sync (Flip 0) mit Media-Dateien: 20FPS ohne Media-Dateien: 47FPS Bin ich jetzt echt ein mieser Programmierer oder liegt es an meinem PC ? |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] UpdateWorld
HideEntity cam1 ShowEntity minimap_cam ;EntityOrder minimap_cam,-1 ;EntityOrder player,1 RenderWorld CopyRect GFX(0)-minimap_size,0,minimap_size,minimap_size,0,0,BackBuffer(),ImageBuffer(minimap) SetBuffer ImageBuffer(minimap) : DrawImage minimap_alpha,0,0 : SetBuffer BackBuffer() ;EntityOrder minimap_cam,1 ;EntityOrder player,0 HideEntity minimap_cam ShowEntity cam1 RenderWorld |
||
between angels and insects |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
THX ! Glaub aber nicht das das sehr viel ausmacht werds mach probieren.
MFG Xarden €DIT: Bei mir nur bei 1280x1024x32 ungefähr 5 Frames mehr und bei 800x600x16 überhauptnix. |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
- Zuletzt bearbeitet von Davok`xarden am Do, Aug 03, 2006 12:51, insgesamt einmal bearbeitet
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, macht bei mir einen Sprung von 15 auf 40 FPS (IntelGrafikkarte mit Ahared Memory) | ||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Wenn du Hilfe bei Code möchtest, bitte bitte formatier ihn dann gescheit. Dein konfuses Tabbing ist die Hölle und dein Glaube, dass : wirklich benutzt werden sollte machts noch schlimmer. Wenn ich nochma 20min brauche um chaos zu reformatieren, damits endlich brauchbar und lesbar wird, darfst dir selbst helfen
2. Bei der FPS Berechnungsroutine brauchst dich über solche Dinge nicht zu wundern. Die ist bestenfalls brauchbar als Grundlage, aber in der Form nicht zu gebrauchen! Deswegen habe ich deine Method erweitert. Natürlich wirst du feststellen, dass deine Methode maximal 1000 FPS anzeigen kann, denn genauer geht der Zeitmesser net als Millisekunden 3. Eigentlich wollte ich ja noch sagen, dass man für so etwas eigentlich eine Textur nimmt und da rein kopiert. Nur dummerweise kann man wohl die NVidia Treiber endgültig vergessen mit DX7, weswegen ich den 2 Cam Renderansatz so gemacht hab das er hoffentlich besser funktioniert. 4. Der zweite Hauptgrund ist, das du 3 Cams hast die alle simultan aktiv sind. Klingt nach ner tollen Idee, ist aber eine ganz schlechte, denn das heisst 3x rendern, auch bei nur 1x renderworld! Code: [AUSKLAPPEN] AppTitle "Minimap" Dim GFX(3) GFX(0) = 1680 GFX(1) = 1050 GFX(2) = 32 GFX(3) = 1 Graphics3D GFX(0),GFX(1),GFX(2),GFX(3) SetBuffer BackBuffer() Global currentframes = 60 ; gewünschter FPS Wert damit er nicht schon falsch startet und ewig brauch zum einpendeln Global FPS = MilliSecs() Global player = CreateSphere() Global camp = CreatePivot(player) Global cam = CreateCamera(camp) Global l1 = CreateLight(camp) TurnEntity camp,30,0,0 MoveEntity cam, 0,0,-5 PositionEntity player,0,30,0 Global Boden = CreatePlane() Global Boden_tex = CreateTexture(16,16) SetBuffer TextureBuffer(Boden_tex) Color 155,155,155 Rect 0,0,16,16 Color 255,0,0 Rect 4,4,8,8 Line 0,0,15,15 Line 0,15,15,0 Color 0,0,0 Rect 0,0,16,16,0 SetBuffer BackBuffer() ScaleTexture Boden_tex,8,8 EntityTexture Boden,Boden_tex ;-man benöigt für diesen abschnitt die Media-datein-------- ;-die man im Samples Order "\RobHutchinson\SkyPlateau" finden, da castle nicht mehr existiert in 1.90 install ;-diese einfach in einen "media"-order speichern und-------- ;-den im Order abspeichern in dem sich diese Datei befindet- Global world = LoadMesh("models\ground.x") ScaleEntity world,0.2,0.2,0.2 PositionEntity world,0,-0.5,0 ScaleEntity player,2,2,2 PositionEntity player,0,2,-30 EntityType player,1 EntityType world,2 EntityType Boden,3 EntityRadius player,2 Collisions 1,2,2,3 Collisions 1,3,2,3 ;-In der Hauptschleife folgt ein 2.Teil den man nicht------ ;-ben�igt wenn man die Media-Dateien nicht haben---------- Const minimap_size = 256 Global minimap_cam = CreateCamera() CameraViewport minimap_cam,GFX(0)-minimap_size,0,minimap_size,minimap_size Global minimap_alpha = CreateImage(minimap_size,minimap_size) MaskImage minimap_alpha,10,20,30 SetBuffer ImageBuffer(minimap_alpha) Color 10,20,30 Rect 0,0,minimap_size,minimap_size Color 0,0,255 Oval 0,0,minimap_size,minimap_size Color 255,0,0 Oval 0,0,minimap_size,minimap_size,0 Oval 1,1,minimap_size-2,minimap_size-2,0 Color 0,0,0 Oval minimap_size/2-4,minimap_size/2-4,8,8 Rect minimap_size/2-2,minimap_size/2-7,4,3 SetBuffer BackBuffer() Repeat Cls If KeyDown(17) Then MoveEntity Player,0,0,+0.5 If KeyDown(31) Then MoveEntity Player,0,0,-0.5 If KeyDown(30) Then MoveEntity Player,-0.5,0,0 If KeyDown(32) Then MoveEntity Player,+0.5,0,0 PositionEntity minimap_cam,EntityX(player),100,EntityZ(player) RotateEntity minimap_cam,90,EntityYaw(player),EntityRoll(player) TranslateEntity player, 0, -10.0/currentframes,0 ;-2.Teil l�chen wer keine Media-Datein will- ;-forsetzun von eben------------------------- ;PositionEntity player,EntityX(player),EntityY(player)-0.2,EntityZ(player) mxs = MouseXSpeed() mys = MouseYSpeed() TurnEntity player,0,-mxs,0 TurnEntity cam,mys,0,0 MoveMouse GFX(0)/2,GFX(1)/2 MouseXSpeed() : MouseYSpeed() ;-------------------------------------------- UpdateWorld RenderWorld DrawImage minimap_alpha,GFX(0)-minimap_size,0 Color 255,255,255 Text 10,GFX(1)-30,"TrisRendered() = " + TrisRendered() Text 10,GFX(1)-15,"F(rames)P(er)S(econd) = " + FPS_return() Flip 0 Until KeyHit(1) End Function FPS_return() If FPS < MilliSecs() Then currentframes = 0.4*currentframes + 0.6*1000.0/(MilliSecs() - FPS) FPS = MilliSecs() Return currentframes End Function Ich liege mit dem Code auf 375-550 FPS und das trotz der schon fast unchristlichen Auflösung ![]() ![]() ~VERSCHOBEN~ "Render to Texture" Fake ist kein Anfängerproblem Dreamora[/quote] |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Davok`xarden |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Sry wusste nicht dsa rendern auf texturen kein anfänger-problem ist (aber ich bin halt einer).
2. Was an meinem FPS-Counter falsch ist weiß ich nicht ich hab den aus nem anderen Thread rauskopiert. Der lief allerdings bei WaitTimer immer Richtig. 3.Zu meinem Zitat: Dein konfuses Tabbing ist die Hölle und dein Glaube, dass : wirklich benutzt werden sollte machts noch schlimmer. ich weiß nicht was daran so schlimm ist. Tipp: Kopiers die dochmal in den BB editor damit du es lesen kannst weil hier im Forum automatischer Zeilenumbruch ist. Meine Gestaltung läuft ungefähr unter folgender Syntax:
Code: [AUSKLAPPEN] Entity oder Bild [i][Tab][/i]1.Befehl der das entity oder Bild betrifft [i][Tab][/i]2.Befehl ... SetBuffer usw. ... in einer Reihe weil sowas normalerweise ja LoadTexture(/Image) ist wichtige Befehle wie z.B. : RenderWorld stehen ganz links damit man sie leichter findet zum Beispiel um 2D-Texte anzuzeigen.[/i] Wenn ihr eine andere Formatierung wünscht welche bitte 4. Ich sehe nur 2Cams nicht 3 (wo ist die 3. (hab nur cam1 und minimap_cam)) 5. Ursprünglisch wollte ich "sowas" ja auf ne Textur schreiben und Per Sprite anzeigen lassen ging aber nicht weil ... ... ich nicht weiß wie man sowas dan exact oben in die Ecke kriege ... das Sprite irgendwie größer als minimap_size war ... ich nicht weiß wie man dann diese Dursichtigen Ecken realiesiert (die Minimapo wird nur als Kreis angezeigt ... und ich mich nicht so gut mit Sprites auskenne kennst jemand ein gutes Tutorial dazu ? 6. Ich bin wie oben gesagt noch Anfänger bin und dein Post irgendwie unfreundlich war (gut es gibt ein paar ausnahmen wo auch ich überreagieren würde (bin ich so jemenand wenn ja warum (jeder kann sich ändern) 7. Normalerweise teste ich sowas auch in ner anderen Auflösung ist aber besser sowas in 800x600x16 zu posten da das jede Graka und jeder Monitor unterstüzt. 1680x1050x32 kann ich nicht anzeigen. 8. Habe die Demo-version (1.83) von B3D und kann daher nicht wissen das es die castle demo nicht mehr gibt, war eh nur dazu dar damit man was erkennt (kann man ja leicht löschen) 9. Leider sehe ich nicht wo in deinem Code irgenetwas auf eine Textur/Bild gerendert wird kann es leider nicht testen weil ich mommentan nicht an meinen BB-Rechner kann. Könntest du es vieleicht mal hervorheben ? hoffe ich hab nix vergessen MFG Xarden |
||
Gott hat euch alle liebt, aber der Rest denk ihr seid [ZENSIERT |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group