Merkwürdiges Alpha prob

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Schnittlauch

Unkraut

Betreff: Merkwürdiges Alpha prob

BeitragDi, Nov 07, 2006 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Nachdem ich weniger erfolgreich direkt auf eine Textur schreiben wollte,
habe ich das ganze jetzt mit dem copyrect Dings gemacht. Und ich muss sagen es funktioniert ^^ bis auch ein kleines Problem was meine Pläne
über den haufen wirft. sobalt ich alpha für die textur nehmen, siedt man
nur noch kleine streifen/pixel und eine ecke ist transparent die andere nicht.
Hier die betroffenen Code teile.
Code: [AUSKLAPPEN]

...
Global mtex = CreateTexture(800,600,1+256)
...
Global msprite = CreateSprite()
...
;-Menu Sprite
ScaleSprite msprite,800,600
PositionEntity msprite,200,-200,0
EntityOrder msprite,0
EntityTexture msprite,mtex
TextureBlend mtex,1
...
Function drawmainmenu()
      SetFont arial_50
      For m = 1 To menu$(0,0)
         If auswahl = m Then
            Color 100,100,255
         Else
            Color 255,255,255
         End If
         SetFont arial_50
         Text 400,300+((m-1)*50),menu$(0,m),True,True
         SetFont arial_20
         Color 255,255,255
      Next
      CopyRect 0,0,800,600,0,0,BackBuffer(),TextureBuffer(mtex)
End Function
...


Die Funktion wird nur dan ausgeführt wenn das Menu aktualisiert
werden muss.

Hoffe das mir jemand helfen kann.
MFG
Schnittlauch
Ich wars nicht.

Mr.Keks

BeitragDi, Nov 07, 2006 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
copyrect ist eigentlich ein b2d-befehl. darum unterstützt er eigentlich kein alpha. kann da leider unvorhersehbare probleme geben. normalerweise sollte nur der fall eintreten, dass das copyrect, statt die alphawerte vom ausgangsort zum ziel mit zu übertragen, einfach nur die alphawerte im zielweglöscht. was da bei dir passiert, entzieht sich meiner erfahrung ^^.

die einzigen 2d-befehle, die auch in 3d auf texturen voll kompatibel sind, sind eigentlich die read/writepixel-befehle.
MrKeks.net
 

Dreamora

BeitragDi, Nov 07, 2006 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal ein CLS im TextureBuffer vor dem CopyRect, damit sollten "Fragmente" zumindest beseitigt werden können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Schnittlauch

Unkraut

BeitragMi, Nov 08, 2006 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich die Textur nicht maskieren? so dass schwarze Sachen transparent sind?
Ich wars nicht.
 

Dreamora

BeitragMi, Nov 08, 2006 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du an schwarzen stellen manuell Alpha 0 rein schreibst "Writepixel, Writepixelfast*, schon (und die Textur mit masked flag gemacht wurde).

Andernfalls nicht, denn wenn du mit schwarz reinzeichnest, ist es nicht transparent
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Schnittlauch

Unkraut

BeitragMi, Nov 08, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ok danke. Das wird wohl schwerer als ich dachte ^^
Ich wars nicht.

Schnittlauch

Unkraut

BeitragMi, Nov 08, 2006 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ich habe jetzt alpha manuell auf 0 gesetzt an den schwarzen stellen.
Nun das ganze braucht 2,5 sec auf 500 fps. Und wofür? Naja es sied genauso aus wie vorher ^^ Langsam glaub ich echt mein BB lebt xD
Ich wars nicht.
 

Dreamora

BeitragMi, Nov 08, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hingegen ist irgendwie dann doch ein wenig komisch.

Du hast die Textur bei der erzeugung schon mit MASK Flag erzeugt oder? weil sonst kann in der Alphakomponente stehen, was will.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Schnittlauch

Unkraut

BeitragMi, Nov 08, 2006 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe Mask und Alpha versucht, aber da ist nur die ganze bereich unsichtbar. Mit writepixelalpha oder ohne.
Ich poste mal den ganzen Code, bitte net erschrecken is noch ziemlich pre alpha mäßig
und durch das viele experimentieren etwas unübersichtlich und systemlos, werde das aber ändern sobalt mal was funktioniert -.-

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2

AppTitle "JAMPS - V0.25"

HidePointer()

SeedRnd MilliSecs()
SetBuffer BackBuffer()

WireFrame 0

Include "keys.bb"

;===[ VARIABLEN ]===;
Global sfps = 1
Global auswahl = 1
Global cmenu
Global game = 1
Global intro = 1
Global scrollt#

Const IntFPS% = 60
FPS_Period = 1000 / IntFPS
FPS_Time = MilliSecs() - FPS_Period

;===[ ARRAYS ]===;
Dim menu$(4,8)

;===[ SOUNDS laden ]===;
Global menu_bg = LoadSound("MUSIC/menu.mp3")
LoopSound menu_bg

;===[ FONTS laden ]===;
Global arial_50 = LoadFont("Arial",50,1)
Global arial_20 = LoadFont("Arial",20,1)

;===[ TEXTUREN laden ]===;
Global blur_tex = CreateTexture(320,240,2+256)
;Global menu_tex = CreateTexture(800,600,4+256)
Global mtex = CreateTexture(800,600,1+16+32)
Global spaceTex = CreateTexture(1024, 1024, 2+8+256)

SetBuffer TextureBuffer(spaceTex)

For a = 1 To 250
   x = Rnd(50, 255)
   Color x, x, x
   Plot Rand(0,1024-1),Rand(0,1024-1)
Next

SetBuffer BackBuffer()
TextureBlend spaceTex,2

;===[ MODELLE laden ]===;


;===[ SPRITES laden ]===;

Global jamps_logo = LoadSprite("TEXTUREN\jamps.png",2+256)
Global bg_sprite = CreateSprite()
Global msprite = CreateSprite()
;Global blur_sprite = CreateSprite()

;Sprite einstellungen

;-Jamps Logo
ScaleSprite jamps_logo,600,300
PositionEntity jamps_logo,0,300,0
EntityOrder jamps_logo,-1

;-Menu Sprite
EntityTexture msprite,mtex
ScaleTexture mtex,1.28,1.7
ScaleSprite msprite,800,600
;PositionEntity msprite,200,-200,0
EntityOrder msprite,0
;TextureBlend mtex,1
;EntityFX msprite,32

;-BG sprite
EntityTexture bg_sprite,spacetex
ScaleSprite bg_sprite,800,600
PositionEntity bg_sprite,0,0,0
EntityOrder bg_sprite,99
;HideEntity bg_sprite
;EntityOrder menu_sprite,

;===[ SCENE OBJEKTE ladem ]===;
Global cam = CreateCamera()
;Global stars = CreateSphere(5,cam)

;===[ SCENE vorbereiten ]===;

;;Camera
PositionEntity cam,0,0,-800
CameraRange cam,0.5,1024
CameraClsColor cam,0,100,100

;BG
;ScaleEntity stars,1024,1024,1024
;EntityTexture stars,spacetex
;EntityFX stars,16

;;Blur ^^
;ScaleSprite blur_sprite,400,300
;EntityTexture blur_sprite,blur_tex

;;MENUS
menu(0,0) = 4
menu(0,1) = "Start Internet"
menu(0,2) = "Start LAN"
menu(0,3) = "Credits"
menu(0,4) = "Beenden"

;===[ INTRO ]===;

Include "intro.bb"

;===[ STARTEN ]===;

Global evil_lag_test = CreateTimer(10)
If Not ChannelPlaying(bg_sound) Then PlaySound(menu_bg)

While game = 1
   Cls
   Repeat
      FPS_Elapsed = MilliSecs() - FPS_Time
   Until FPS_Elapsed

   FPS_Ticks = FPS_Elapsed / FPS_Period

   FPS_Tween# = Float(FPS_Elapsed Mod FPS_Period) / Float(FPS_Period)

   For FPS_Cnt = 1 To FPS_Ticks

      FPS_Time = FPS_Time + FPS_Period
      If FPS_Cnt = FPS_Ticks Then CaptureWorld
      Cls
   
      bgscroll# = bgscroll# - 0.001
      If bgscroll# < 0 Then bgscroll# = 1
      PositionTexture spacetex,bgscroll#,0
   
      keys(cmenu)
   
      UpdateWorld
   Next
   
   ;drawmenu(cmenu)
   
   RenderWorld
   
   
   If sfps = 1 Then
   Text 0,0,"FPS: "+fps
   End If
   
   If MilliSecs() - start > 1000 Then
   fps = count
   start = MilliSecs()
   count = 0
   Else
      count = count + 1
   End If
   
   ;WaitTimer(evil_lag_test)
   
   Flip 0
Wend

End

Function blur()
   CameraViewport cam,0,0,320,240
   RenderWorld
   CopyRect 0,0,320,240,BackBuffer(),TextureBuffer(blur_tex)
   CameraViewport cam,0,0,800,600
End Function

Function doaction(selected,menunum)
   Select menunum
      Case 0
         Select selected
            Case 1
            Case 2
            Case 3
               cmenu = 3
            Case 4
               game = 0
         End Select
   End Select
End Function

Function drawmenu(menunum = 0)
   If menunum = 0
      ;Local mtex = CreateTexture(800,600,2)
      ;Local msprite = CreateSprite()
      ;ScaleSprite msprite,800,600
      ;PositionEntity msprite,0,0,0
      ;EntityTexture msprite,mtex
   Else If menunum = 3
      If scrollt# = 0 Then
         ;Local ctex =CreateTexture(800,680,2)
         ;Local csprite = CreateSprite()
         ;ScaleSprite csprite,800,300
         ;PositionEntity csprite,0,-300,0
         SetFont arial_20
         Text 400,0,"JAMPS",True,True
         Text 400,20,"Just Another Multiplayer Shooter",True,True
         Text 400,80,"Ingame Coding:",True,True
         Text 400,100,"Pdd",False,True
         Text 400,140,"Menu Coding:",True,True
         Text 400,160,"Schnittlauch",False,True
         Text 400,200,"Graphics",True,True
         Text 400,220,"Schnittlauch",0,1
         Text 400,260,"Programming Leader",1,1
         Text 400,280,"Pdd",0,1
         Text 400,320,"Idee",1,1
         Text 400,440,"Schnittlauch & Pdd",0,1
         Text 400,480,"Mit freundlicher Unterstützung von:",1,1
         Text 400,500,"Blue Chili GameZ",1,1
         Text 400,540,"C Schnittlauch & Pdd 2006",1,1
         Text 400,560,"All rights reserved",1,1
         ;LockBuffer(BackBuffer())
         ;CopyRect 0,0,800,680,0,0,BackBuffer(),TextureBuffer(ctex)
         ;UnlockBuffer(BackBuffer())
         ;EntityTexture csprite,ctex
      End If
      scrollt# = scrollt# + 0.1
      ;Viewport 0,300,800,300
      ;SetFont arial_20
      ;Text 400,600-scrollt#,"JAMPS",True,True
      ;Text 400,620-scrollt#,"Just Another Multiplayer Shooter",True,True
      ;Text 400,680-scrollt#,"Ingame Coding:",True,True
      ;Text 400,700-scrollt#,"PDD",False,True
      ;Text 400,740-scrollt#,"Menu Coding:",True,True
      ;Text 400,760-scrollt#,"Schnittlauch",False,True
      ;Text 400,800-scrollt#,"Graphics",True,True
      ;Text 400,820-scrollt#,"Schnittlauch",0,1
      ;Text 400,860-scrollt#,"Programming Leader",1,1
      ;Text 400,880-scrollt#,"PDD",0,1
      ;Text 400,920-scrollt#,"Idee",1,1
      ;Text 400,940-scrollt#,"Schnittlauch & PDD",0,1
      ;Text 400,980-scrollt#,"Mit freundlicher Unterstützung von:",1,1
      ;Text 400,1000-scrollt#,"Blue Chili GameZ",1,1
      ;Text 400,1040-scrollt#,"C Schnittlauch & PDD 2006",1,1
      ;Text 400,1060-scrollt#,"All rights reserved",1,1
      If scrollt# >= 780 Then cmenu = 0 : scrollt# = 0
      cmenu = 0
      scrollt# = 0
      ;Viewport 0,0,800,600          
   End If   
End Function

Function drawmainmenu()
      start = MilliSecs()
      ;SetFont arial_50
      For m = 1 To menu$(0,0)
         ;If auswahl = m Then
         ;   Color 100,100,255
         ;Else
         ;   Color 255,255,255
         ;End If
         ;SetFont arial_50
         Text 400,300+((m-1)*50),menu$(0,m),True,True
         ;SetFont arial_20
         ;Color 255,255,255
      Next
      ;Rect 0,0,800,600,0
      LockBuffer()
      For x = 0 To 800
         For y = 0 To 600
            pixel = ReadPixel(x,y,BackBuffer())
         Next
      Next
      ;CopyRect 0,0,800,600,0,0,BackBuffer(),TextureBuffer(mtex)
      UnlockBuffer()
      ;pix1 = 255*$1000000 + 0*$10000 + 0*$100 + 0
      ;pix2 = 0*$1000000 + 0*$10000 + 0*$100 + 0
      ;For x = 0 To 800
      ;   For y = 0 To 600
      ;   LockBuffer(TextureBuffer(mtex))
      ;   pixel = ReadPixelFast(x,y,TextureBuffer(mtex))
      ;   If pixel = pix1 Then
      ;      pix = pix + 1
            ;pixel = rgb=a*$1000000 + r*$10000 + g*$100 + b
      ;      WritePixelFast x,y,pix2,TextureBuffer(mtex)
            ;DebugLog "ju   
      ;   End If
      ;   UnlockBuffer(TextureBuffer(mtex))
      ;   Next
      ;Next
      time = MilliSecs()-start
      DebugLog pix+" brauchen: "+time
End Function

Function keys(menunum)
   Local max_ausw = menu(menunum,0)
   uord = (KeyHit(key_down)-KeyHit(key_up))
   auswahl = auswahl + uord
   If auswahl < 1 Then auswahl = 1
   If auswahl > max_ausw Then auswahl = max_ausw
   If KeyHit(KEY_ENTER) Then
      doaction(auswahl,menunum)
   End If
   If uord <> 0 Then drawmainmenu() : DebugLog auswahl : DebugLog menunum
End Function
Ich wars nicht.
 

Dreamora

BeitragMi, Nov 08, 2006 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hat es mehrere Fehler drin:

1. Du machst zwar ReadPixel, dabei setzt du jedoch keine Alphawerte (weil weder BackBuffer noch Images einen AlphaWert in der Farbe haben bzw. er immer 255 ist). Du müsstest den Alphawert selbst hinzufügen. Du überprüfst zwar etwas, jedoch macht der vergleich da wenig Sinn. Du müsstest überprüfen ob Farbe = MaskColor und wenn ja dann ist color = color and $00FFFFFF (alpha = 0, rest bleibt)

2. Du machst LockBuffer. Allerdings verwendest du danach ReadPixel / WritePixel anstatt die Fast Versionen. Das macht einen Unterschied in der Geschwindigkeit. Dabei ist es übrigens so, dass auf einigen Grafikkarten VRAM Texturen schneller sind, bei anderen jedoch die "normalen" Texturen.

3. Die Textur welche im auskommentierten Teil genutzt wird, hat keine Mask Flag gesetzt.


Das ist das, was ich so auf die schnelle sehe.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragMi, Nov 08, 2006 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube, dass es so einfacher ist:
Code: [AUSKLAPPEN]
Function SetAlphaTex(tex,maskr,maskg,maskb,err=0,erg=0,erb=0,eralph=0,toleranz#=0)
   
   wid=TextureWidth(tex)
   hei=TextureHeight(tex)
   
   LockBuffer TextureBuffer(tex)
   
   For x=0 To wid-1
      
      For y=0 To hei-1
         
         n=ReadPixelFast(x,y,TextureBuffer(tex))
         
         r=(n Shr 16) And 255
         g=(n Shr  8) And 255
         b=(n Shr  0) And 255; Ich weiß, dass das shr 0 nix bringt, aber sieht einfach schöner aus ^^
         
         abw#=Abs(r-maskr)
         abw#=abw#+Abs(g-maskg)
         abw#=abw#+Abs(b-maskb)
         
         If abw#<=toleranz# Then WritePixelFast x,y,(eralph Shl 24) + (err Shl 16) + (erg Shl 8) + (erb Shl 0),TextureBuffer(tex); wieder das Gleiche mit Shl bei erb ^^
         
      Next
      
   Next
   
   UnlockBuffer TextureBuffer(tex)
   
End Function
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Schnittlauch

Unkraut

BeitragDo, Nov 09, 2006 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann sein das ich teile des Codes wegen meinen Dabuggingversuchen auskommentiert hab ^^
Danke für den Code StepTiger.

Wen es wieder Probleme gibt lass ich euch davon wissen xD

EDIT
Irgendwie funzt es immer noch nicht trotz StepTigers netter Spende.
Das Menu ist jetzt Komplett durchsichtig. Auch der Text.
Ich glaub BB mag mich nicht -.-
Ich wars nicht.

StepTiger

BeitragDo, Nov 09, 2006 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
kann sein, dass mein code nicht funktioniert. hab ihn direkt ins Forum geschrieben. Ich teste es mal aus...

*edit*
Funktioniert 1a

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

n=LoadTexture("dt.bmp",2)

SetAlphaTex(n,255,255,255)

box=CreateCube()
EntityTexture box,n

cam=CreateCamera()
PositionEntity cam,0,0,-5

s#=3.6*2
dis#=3

While Not KeyHit(1)
   
   PositionEntity cam,Sin(MilliSecs()/s#)*dis#,0,Cos(MilliSecs()/s#)*dis#
   RotateEntity cam,0,-MilliSecs()/s#+180,0
   
   UpdateWorld
   RenderWorld
   
   Text 1,1,EntityX(cam)+" "+EntityZ(cam)
   
   Flip
   
Wend

End

Function SetAlphaTex(tex,maskr,maskg,maskb,err=0,erg=0,erb=0,eralph=0,toleranz#=0)
   
   wid=TextureWidth(tex)
   hei=TextureHeight(tex)
   
   LockBuffer TextureBuffer(tex)
   
   For x=0 To wid-1
      
      For y=0 To hei-1
         
         n=ReadPixelFast(x,y,TextureBuffer(tex))
         
         r=(n Shr 16) And 255
         g=(n Shr  8) And 255
         b=(n Shr  0) And 255; Ich weiß, dass das shr 0 nix bringt, aber sieht einfach schöner aus ^^
         
         abw#=Abs(r-maskr)
         abw#=abw#+Abs(g-maskg)
         abw#=abw#+Abs(b-maskb)
         
         If abw#<=toleranz# Then WritePixelFast x,y,(eralph Shl 24) + (err Shl 16) + (erg Shl 8) + (erb Shl 0),TextureBuffer(tex); wieder das Gleiche mit Shl bei erb ^^
         
      Next
      
   Next
   
   UnlockBuffer TextureBuffer(tex)
   
End Function


hier das Bild:
user posted image
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Schnittlauch

Unkraut

BeitragDo, Nov 09, 2006 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh vielleicht liegt es daran. Bei mir wird die Textur im Code erzeugt.
Ich wars nicht.

StepTiger

BeitragDo, Nov 09, 2006 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
dann einfach nach dem Erzeugen meinen Code drüberjagen und es klappt auch
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group