Wieso ist der Lichtschein zu hell?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Freeman

Betreff: Wieso ist der Lichtschein zu hell?

BeitragMi, Okt 06, 2004 8:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

ich weis ja das das thema hier schon so ziemlich oft besprochen haben,aber ich habe probleme bei meinem Lichtstrahl der per Bild mit Transparenz erzeugt wird.
hier der code für nen beispiel

Code: [AUSKLAPPEN]

Include "xxx\mapengine.bb"


Function DrawTranslucidImage(picture,maskcolor,ox,oy,t#,centerx=0,centery=0)
in=ImageBuffer(picture)
out=GraphicsBuffer()
pw=ImageWidth(picture)-1
ph=ImageHeight(picture)-1
gw=GraphicsWidth()-1
gh=GraphicsHeight()-1
If CenterX=1 Then ox=ox-pw/2
If CenterY=1 Then oy=oy-ph/2
LockBuffer in
LockBuffer out
For y=0 To ph
 For x=0 To pw
  If ox+x>=0 And oy+y>=0 And ox+x<=gw And oy+y<=gh Then

   ipx=ReadPixelFast(x,y,in)
   If ipx<>maskcolor Then
    opx=ReadPixelFast(ox+x,oy+y,out)

    ored=ExtractRed(opx)
    ogre=ExtractGreen(opx)
    oblu=ExtractBlue(opx)

    ired=ExtractRed(ipx)
    igre=ExtractGreen(ipx)
    iblu=ExtractBlue(ipx)

    If ored<ired Then
     fred=ored+Degree#(ored,ired)*t#
    ElseIf ored>ired Then
     fred=ired+Degree#(ored,ired)*t#
    ElseIf ored=ired Then
     fred=ored
    EndIf

    If ogre<igre Then
     fgre=ogre+Degree#(ogre,igre)*t#
    ElseIf ogre>igre Then
     fgre=igre+Degree#(ogre,igre)*t#
    ElseIf ogre=igre Then
     fgre=ogre
    EndIf

    If oblu<iblu Then
     fblu=oblu+Degree#(oblu,iblu)*t#
    ElseIf oblu>iblu Then
     fblu=iblu+Degree#(oblu,iblu)*t#
    ElseIf oblu=iblu Then
     fblu=oblu
    EndIf

    fpx=fred*$10000+fgre*$100+fblu
    WritePixelFast ox+x,oy+y,fpx,out
   EndIf

  EndIf
 Next
Next
UnlockBuffer in
UnlockBuffer out
End Function

Function Degree#(v1#,v2#)
Local bigger,out#
If v2#>v1# bigger=2
If v1#>v2# bigger=1
Select bigger
 Case 0:out#=0
 Case 1:out#=v1#-v2#
 Case 2:out#=v2#-v1#
End Select
Return out#
End Function

Function ExtractRed(col)
o=(col And $FF0000)/$10000
Return o
End Function

Function ExtractGreen(col)
o=(col And $FF00)/$100
Return o
End Function

Function ExtractBlue(col)
o=col And $FF
Return o
End Function

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



lampe1 = LoadImage("C:\Coden\lampe1.bmp")
MaskImage lampe1,0,0,0
Global lampe01=$FFFFFF

map_load("maps\stadt.map")

Global layer.layer
Global Map.layer
Global layer1.layer
Global layer2.layer
Global layer3.layer
Global layer4.layer
Global layer5.layer
Global kolli.layer

For layer = Each layer
If layer\name$="Map" Then Map = layer
If layer\name$="kolli" Then kolli = layer
If layer\name$="layer1" Then layer1 = layer
If layer\name$="layer2" Then layer2 = layer
If layer\name$="layer3" Then layer3 = layer
If layer\name$="layer4" Then layer4 = layer
If layer\name$="layer5" Then layer5 = layer
Next

; 3D einstellungen für die Dunkelheit
camera=CreateCamera()
Sprite   = CreateSprite()
brush = CreateBrush (1,1,1 )
PositionEntity sprite,0,0,1
transparency# = 0

aX = 50
aY = 50

While KeyDown(1) = False
CameraClsMode camera,0,1
Cls

; Layer malen
layer_map_draw(kolli.layer)
layer_map_draw(Map.layer)
layer_map_draw(layer1.layer)
layer_map_draw(layer2.layer)
layer_map_draw(layer3.layer)
DrawImage NPC1_NeuzeitStadtC,npc1\waypoints_neuzeitStadtX-map_scrollx,npc1\waypoints_neuzeitStadtY-map_scrolly,7
layer_map_draw(layer4.layer)
layer_map_draw(layer5.layer)

PaintEntity Sprite,brush
EntityAlpha Sprite,transparency#
DrawTranslucidImage(lampe1,lampe01,aX,aY,1,centerx=0,centery=0)

RenderWorld()

fps(); fps function


Flip 0

Wend



wie man am code erkennen kann nutze ich den mapeditor von TheShadow und den ne Trasparentfunktion,sowie nen sprite den ich transparent und farbig mache für den Tagnachtzyclus . Jetz hab ich ein bILD eines Lichtstrahls, der transparent dargestellt wird, doch hier ist der Lichtstrahl dann überhaupt nicht deckend,sprich wenn man den lichtstrahl über helle stellen schiebe kann man den gar nicht mehr sehen. Was mache ich falsch? Bitte um hilfe

FrEeMaN

Jan_

Ehemaliger Admin

BeitragMi, Okt 06, 2004 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, habe es mal kurz überflogen,

bneutzte doch brush alpha, statt entity alpha und setzte den Blendmode auf 3

dann, müsste es klappen.
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group