Merkwürdiges Alpha prob
Übersicht

![]() |
SchnittlauchUnkrautBetreff: Merkwürdiges Alpha prob |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich die Textur nicht maskieren? so dass schwarze Sachen transparent sind? | ||
Ich wars nicht. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm ok danke. Das wird wohl schwerer als ich dachte ^^ | ||
Ich wars nicht. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: ![]() |
||
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh vielleicht liegt es daran. Bei mir wird die Textur im Code erzeugt. | ||
Ich wars nicht. |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group