Sprite mit Tex-Flag 2 wird nicht transparent
Übersicht

![]() |
FireballFlameBetreff: Sprite mit Tex-Flag 2 wird nicht transparent |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo! Eigentlich 3D, hab ich mein Problem mal in die Beginners-Corner gepostet, da es eigentlich ziemlich simpel ist ...
Ich möchte für ein Spiel einen Taschenlampen-Effekt programmieren, indem vor die Kamera ein Sprite gesetzt wird, das in der Mitte schwarz und außen weiß ist. Die im Code erstelle Textur hat den Flag 2, damit das dunkle/schwarze transparent ist - aber das funktioniert nicht o.O Irgendwo muss da ein dummer Fehler sein, aber ich finde ihn nicht -.- Hier der Code: [AUSKLAPPEN] res_x=800
res_y=600 Graphics3D res_x,res_y,0,2 SetBuffer BackBuffer() spielercam=CreateCamera() CameraClsColor spielercam,0,0,255 taschenlampe=CreateSprite() For zpothz=1 To 12 If 2^zpothz>=res_x/2 tltexgroesse=2^zpothz Exit End If Next tltex=CreateTexture(tltexgroesse,tltexgroesse,2) SetBuffer TextureBuffer(tltex) Color 255,255,255 Rect 0,0,tltexgroesse,tltexgroesse,1 For bf=tltexgroesse To 1 Step -1 ffb=255-(Float((tltexgroesse-bf))/tltexgroesse*200) Color ffb,ffb,ffb Oval tltexgroesse/2-bf/2,tltexgroesse/2-bf/2,bf,bf,1 Next SetBuffer BackBuffer() EntityTexture taschenlampe,tltex s2d_sprite=taschenlampe s2d_breite=tltexgroesse*2 s2d_hoehe=tltexgroesse*2 s2d_X_Koord=res_x/2-tltexgroesse*2/2 s2d_Y_Koord=res_y/2-tltexgroesse*2/2 EntityParent s2d_sprite,spielercam ScaleSprite s2d_sprite,s2d_breite,s2d_hoehe PositionEntity s2d_sprite,((s2d_X_Koord)*2)-RES_x+s2d_breite,-((s2d_Y_Koord)*2)+RES_y-s2d_hoehe,RES_x,0 EntityOrder s2d_sprite,-9989 While Not KeyHit(1) RenderWorld Flip Wend End Wenn es richtig funktionieren würde, müsste die Mitte des Fensters blau sein (wie wenn ihr vor die While-Schleife ein "HideEntity taschenlampe" setzt). Könnt ihr mir sagen, warum sie das nicht ist? |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du zeichnest mit Color und Oval auf die Textur, wo du doch zur Mitte hin mehr Transparenz haben möchtest. Color hat aber keine Alphaangabe, wo du also lieber auf WritePixel oder WritePixelFast zurück greifen solltest. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das stimmt, aber der Tex-Flag 2 macht doch eigentlich, wenn keine Alphainformationen vorhanden sind, die Textur nach Helligkeit transparent? (je dunkler desto transparenter) | ||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin mir nicht sicher, aber ich glaub, das ist nur beim laden so. Dann wird beim laden der Helligkeitswert ermitelt und entsprechend ein Alphawert für jeden Pixel errechnet.^^ | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, ich lasse jetzt auf ein Image zeichnen und benutze dann SaveBuffer und LoadSprite.
Ist zwar vllt. nicht die schönste Lösung, aber jedenfalls funktioniert es so - danke! |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit SaveBuffer und LoadSprite ist eine 'dreckige' art zu programmieren. Mach das mal lieber gleich richtig mit WritePixel.
Hier der Test- und BeweisCode: [AUSKLAPPEN] Graphics3D 800,800,0,2
camera=CreateCamera() RotateEntity CreateLight(),40,40,0 cube=CreateCube() PositionEntity cube,0,0,3 sprite=CreateSprite() texture=CreateTexture(256,256,2) SetBuffer TextureBuffer(texture) For y=0 To 127 For x=0 To 127 a=x*2 r=y*2 g=255-x*2 b=255-y*2 WritePixel x,y,a*$1000000+r*$10000+g*$100+b Color r,g,b Rect 128+x,y,1,1,1 Oval x,128+y,1,1,1 Plot 128+x,128+y Next Next EntityTexture sprite,texture PositionEntity sprite,0,0,1 SetBuffer BackBuffer() While Not KeyHit(1) If KeyDown(57) EntityAlpha sprite,.5 Else EntityAlpha sprite,1 TurnEntity cube,1,0,0 RenderWorld Flip Wend End - oben/links WritePixel und wie zu erwarten, schön mit Alphawerten. - oben/rechts Rect ohne Alphaabnahme bei dunklen Stellen. - unten/links Oval ohne Alphaabnahme bei dunklen Stellen. - unten/rechts Plot ohne Alphaabnahme bei dunklen Stellen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group