Dem "Bloom-Code" auf der Spur

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

x-pressive

BeitragDo, Jun 08, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@alle, bei denen es nicht geht: bitte beschreibt doch mal genau, ob es daran liegt, das die Tasten nicht funktionieren, oder ob die Tasten-Änderungen sehr wohl registriert werden (Text verändert sich), aber halt trotz geänderten Werten keine Veränderungen an den Objekten zu sehen sind.

Quellcode kommt in Kürze -ist allerdings, wie gesagt, ein Sprite Candy Code (ich wollte für die ganze Sprite-Orgie zum Weichzeichnen eine Single Surface Lösung -in meiner Welt gibt es keine BlitzSprites mehr-, ausserdem ist der Code so um einiges kürzer).

Muss aber erst mal rausfinden, warum das bei euch nicht funzt Shocked
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Lunatix

BeitragDo, Jun 08, 2006 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Tasten gehen alle, text ändert sich, aber sonst kein sichtbarer effekt
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Dreamora

BeitragDo, Jun 08, 2006 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktioniert es grafisch fehlerfrei. (Radeon 9700 64MB Mobile mit Catalyst 6.5)

Allerdings wäre es schön wenn für die Tasten der Zeichencode und nicht der Scancode benutzt würde ... dauerte einige Zeit bis ich rausgefunden habe wo das angebliche + liegen soll um es raufzudrehen ... Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Farbfinsternis

BeitragDo, Jun 08, 2006 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Funkt einwandfrei auf einem XP2400+ mit Radeon9200 auf WinXP SP2 mit DX9c ... FPS der GraKa entsprechend ... ca 20 Wink
Farbfinsternis.tv

x-pressive

BeitragDo, Jun 08, 2006 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
dauerte einige Zeit bis ich rausgefunden habe wo das angebliche + liegen soll um es raufzudrehen ... Smile

Das kommt daher, das ich eine Mini-Tastatur benutze, die gar keinen Zahlenblock hat. Wink

Hier der (SpriteCandy-) Code für den Glow-Effekt. Ich habe alles überflüssige rausgenommen, um ihn so übersichtlich wie möglich zu machen. Die Technik ist recht simpel: über den Screen wird ein Image-Layer gelegt (blend mode multiply), der eine Textur im Speicher als Resource benutzt. In diese Textur rendert man dann einfach in der main loop die Highlights und blurt diese.

Für den Bloom-Effekt selbst schaltet man alles auf unsichtbar und lässt nur die Objekte sichtbar, auf die der Effekt angewendet werden soll. Diese Objekte müssen glänzen (EntityShininess auf 1). Wenn man diese Objekte nun vor dem Rendern des Effekts ganz schwarz färbt (EntityColor) erhält man normale Glanzreflexe. Erhöht man die Farbe, geht der Glanz mehr und mehr in ein Glühen über (es kann jeder beliebige Farbton benutzt werden, also auch grün, blau etc.)

Diese Objekte werden dann "geknipst" (in der Regel sieht man jetzt nur noch die Glanzlichter der Objekte, weil die Objekte ja dunkel sind). Das erhaltene Bild wird dann weichgezeichnet und in dem Image-Layer, der über dem ganzen Screen liegt, angezeigt.

Das ist alles Wink

Code: [AUSKLAPPEN]


Graphics3D 1024, 768, 32, 2 : SetBuffer BackBuffer()

; INCLUDE SPRITE CANDY
Include "sprite candy.bb"

; --------------------------------------------------------------
; VARIABLES
; --------------------------------------------------------------
; TIMER
Global Timer% = CreateTimer(60)

; GLOW VARIABLES
Global gBlurRadius% = 52
Global gGlowTexW%   = 128           ; TRY 96, 128, 256
Global gGlowTexH%   = gGlowTexW-gGlowTexW/4   ; ASPECT RATIO 4:3

; --------------------------------------------------------------
; CREATE 3D SCENE
; --------------------------------------------------------------
Global Light     = CreateLight ()
Global CenterPiv = CreatePivot()
Global Cam       = CreateCamera()
EntityParent Cam, CenterPiv
MoveEntity   Cam,0,5,-5
TurnEntity   Cam,30,0,0

; SCENE
Global      Scene = LoadAnimMesh("Media\scene.b3d")
ScaleEntity Scene,.04,.04,.04
HideEntity  FindChild(Scene, "Logo")

; TEAPOT
Obj1%         = LoadMesh("Media\teapot.3ds")
EntityTexture   Obj1, LoadTexture("Media\teapot.bmp",1+64+256)
MoveEntity      Obj1,0,2,0
ScaleEntity     Obj1,.9,.9,.9
EntityShininess Obj1,1

CenterPiv2    = CreatePivot()

; RING
Obj2%         = LoadMesh("Media\ring.3ds")
EntityTexture   Obj2, LoadTexture("Media\teapot.bmp",1+256)
MoveEntity      Obj2,-2.5,4,0
ScaleEntity     Obj2,.1,.1,.1
EntityShininess Obj2,1
EntityParent    Obj2,CenterPiv2


; --------------------------------------------------------------
; CREATE HUD OBJECTS
; --------------------------------------------------------------

HUD% = HUD_Create (Cam)

; CREATE A TEXTURE WHERE WE CAN RENDER THE SCREEN TO
Global Tex_GlowOverlay%   = CreateTexture(gGlowTexW,gGlowTexW,2+256)

; CREATE A LAYER WITH THAT TEXTURE
Global Res_Glow%  = HUD_LoadMemoryResource (Tex_GlowOverlay)
Global Lyr_Glow%  = HUD_CreateLayer        (HUD, Res_Glow)
HUD_SetLayerBlend   Lyr_Glow, 3 ; <- SET LAYER TO MULTIPLY BLEND

; CREATE SCREEN OVERLAY IMAGE ON THAT LAYER
Global Img_GlowOverlay = HUD_CreateImage (Lyr_Glow, 0,0, 0,0,gGlowTexW,gGlowTexH, "CENTER","CENTER")
HUD_SetObjectAlpha       Img_GlowOverlay,1
HUD_SetObjectSize        Img_GlowOverlay,GraphicsWidth(),GraphicsHeight()


; --------------------------------------------------------------
; MAIN LOOP
; --------------------------------------------------------------
While Not KeyDown(1)

   WaitTimer Timer

   ; GLOW CODE --------------------------------------------

   ; SHOW AND PREPARE GLOW-ENTITIES
   EntityColor    Obj1,15,15,0 ; <- GLOW COLOR, AS HIGHER, AS MORE GLOW
   EntityColor    Obj2,45,45,0 ;    USE 0,0,0 FOR LIGHT WITHOUT GLOWING

   ; HIDE ALL NON-GLOWING OBJECTS
   HideEntity Scene : HUD_SetVisibility HUD, False

   ; RENDER GLOW TO TEXTURE
   RenderScreenGlow Tex_GlowOverlay,gBlurRadius,gBlurRadius/3

   ; RESET GLOW ENTITIES TO NORMAL COLOR
   EntityColor    Obj1,255,255,255
   EntityColor    Obj2,255,255,255

   ; SHOW OTHER OBJECTS
   ShowEntity Scene : HUD_SetVisibility HUD, True
   
   ; ------------------------------------------------------

   ; ANIMATE SCENE
   TurnEntity Obj1      ,.35,  0,0
   TurnEntity Obj2      ,.65,.45,.25
   TurnEntity CenterPiv2,  0, .5,0
   TurnEntity CenterPiv ,  0,.35,0

   HUD_Update : RenderWorld : Flip 0

Wend


HUD_RemoveAll True : End


; ---------------------------------------------------------
; FUNCTION: BLUR IMAGE
;           - NON-GLOWING OBJECTS (HUD ETC.) MUST BE HIDDEN BEFORE
;           - GLOWING OBJECTS MUST BE SET TO THE RIGHT COLOR BEFORE
; ---------------------------------------------------------
Function RenderScreenGlow(Tex%, radius#, steps%)

   Local tw#       = gGlowTexW     ; INSERT GLOW TEXTURE WIDTH
   Local th#       = gGlowTexH     ; INSERT GLOW TEXTURE HEIGHT
   Local sw#       = GraphicsWidth() ; INSERT SCREEN RESOLUTION WIDTH
   Local sh#       = GraphicsHeight(); INSERT SCREEN RESOLUTION HEIGHT
   Local radstep#  = radius / steps

   Local Images%[256], i%, r#, a#, c%

   ; RENDER SCREEN
   CameraViewport Cam ,0,0,tw,th
   RenderWorld : CopyRect 0,0,tw,th,0,0,BackBuffer(),TextureBuffer(Tex)

   Local HUD_Temp% = HUD_Create (Cam)
   Local Lyr_Temp% = HUD_CreateLayer (HUD_Temp, Res_Glow)
   HUD_SetLayerBlend Lyr_Temp, 3

   i = 0 : r = radstep : a = 0
   For r = radstep To radius
      For a = 0 To 360
         Images[i]        = HUD_CreateImage (Lyr_Temp, 0,0, 0,0,tw,th, "CENTER","CENTER")
         HUD_SetObjectAlpha Images[i],.1 ; <- TRY VALUES FROM .1 TO .5
         HUD_PositionObject Images[i],sw/2+Sin(a)*r, sh/2+Cos(a)*r
         HUD_SetObjectSize  Images[i],sw+i*.01,sh+i*.01
         a = a + 360.0/steps
         i = i + 1 : If i > 256 Exit
      Next
      r = r + radstep*2
   Next
   
   HUD_Update
   
   RenderWorld : CopyRect 0,0,tw,th,0,0,BackBuffer(),TextureBuffer(Tex)
   CameraViewport Cam, 0,0,sw,sh

   HUD_Remove HUD_Temp


End Function
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Lunatix

BeitragDo, Jun 08, 2006 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön Very Happy

meinst du den kann man auch ohne SpriteCandy verwenden?
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

x-pressive

BeitragDo, Jun 08, 2006 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar -musst halt "nur" alle SpriteCandy-spezifischen Sachen durch normalen Code ersetzen. Statt ImageLayer klebst du ein Sprite auf den Bildschirm und die Blurmethode ersetzt du auch durch eine Sprite-Lösung. Ist dann halt ein ziemliches Gefiesel, bis man die Sprites genau auf den Bildschirm und die betreffende Auflösung angepasst hat.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Lunatix

BeitragFr, Jun 09, 2006 8:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein KinderSpiel, falls du meinst, einen sprite genau wie'n Bild( Smile X-Pressive weiss was ich mein) anzuzeigen.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

FreakForFreedom

BeitragFr, Jun 09, 2006 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke fürs Sharen, @x-pressive! Super code!
Werde ihn gleich mal "umwandeln" und benutzen. Smile
Mfg
F.F.F.
"Try and ERROR!"

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group