MaskTexture problem*GELÖST*
Übersicht

shootermakerBetreff: MaskTexture problem*GELÖST* |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, die function zum maskieren von texturen funktioniert ganz gut, solange ich nur ein Objekt damit maskiere.
Zur veranschaulichung hab ich das hier schnell geschrieben: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Type A Field X,Y,Z Field MESH Field TEXTURE End Type camera = CreateCamera() PositionEntity camera,0,0,-5 Function MASKTEXTURE(TEXTURE,R = 255,G = 0,B = 255) Local BUFFER,X,Y,RGB BUFFER = TextureBuffer(TEXTURE) LockBuffer BUFFER For X = 0 To TextureWidth(TEXTURE)-1 For Y = 0 To TextureHeight(TEXTURE)-1 RGB = ReadPixelFast(X,Y,BUFFER) And $00FFFFFF If RGB = ((R Shl 16))+((G Shl 8)+B) WritePixelFast X,Y,$00000000,BUFFER Else WritePixelFast X,Y,RGB Or $FF000000,BUFFER End If Next Next UnlockBuffer BUFFER End Function ;1.WÜRFEL (LINKS) A.A = New A A\X = -2 A\Z = 0 A\MESH = CreateCube() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = CreateTexture(128,128,1+2+8+16+32) SetBuffer TextureBuffer(A\TEXTURE) ClsColor 255,0,255 Cls EntityTexture A\MESH,A\TEXTURE SetBuffer BackBuffer() MASKTEXTURE(A\TEXTURE) While Not KeyHit(1) UpdateWorld RenderWorld Flip Wend End das fenster bleibt schwarz. WIE ES AUCH SEIN SOLL, da der Würfel mit der Farbe Rosa (255,0,255) komplet wegmaskiert wird. Wenn ich jetzt aber zwei würfel erstelle: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Type A Field X,Y,Z Field MESH Field TEXTURE End Type camera = CreateCamera() PositionEntity camera,0,0,-5 Function MASKTEXTURE(TEXTURE,R = 255,G = 0,B = 255) Local BUFFER,X,Y,RGB BUFFER = TextureBuffer(TEXTURE) LockBuffer BUFFER For X = 0 To TextureWidth(TEXTURE)-1 For Y = 0 To TextureHeight(TEXTURE)-1 RGB = ReadPixelFast(X,Y,BUFFER) And $00FFFFFF If RGB = ((R Shl 16))+((G Shl 8)+B) WritePixelFast X,Y,$00000000,BUFFER Else WritePixelFast X,Y,RGB Or $FF000000,BUFFER End If Next Next UnlockBuffer BUFFER End Function ;1.WÜRFEL (LINKS) A.A = New A A\X = -2 A\Z = 0 A\MESH = CreateCube() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = CreateTexture(128,128,1+2+8+16+32) SetBuffer TextureBuffer(A\TEXTURE) ClsColor 255,0,255 Cls EntityTexture A\MESH,A\TEXTURE SetBuffer BackBuffer() ;2.WÜRFEL (RECHTS) A.A = New A A\X = 2 A\Z = 0 A\MESH = CreateCube() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = CreateTexture(128,128,1+2+8+16+32) SetBuffer TextureBuffer(A\TEXTURE) ClsColor 255,0,255 Cls EntityTexture A\MESH,A\TEXTURE SetBuffer BackBuffer() MASKTEXTURE(A\TEXTURE) While Not KeyHit(1) UpdateWorld RenderWorld Flip Wend End Wird komischerweise nur einer maskiert. Es sollten eigentlich aber alle zwei! Weiß einer woran das liegt? |
||
- Zuletzt bearbeitet von shootermaker am So, Aug 30, 2009 19:43, insgesamt einmal bearbeitet
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du maskierst ja auch nur den zweiten Würfel. Wenn du die Variable A für den zweiten Würfel nochmal nimmt gilt sie für den ersten Würfel nicht mehr. Also:
Code: [AUSKLAPPEN] ;1.WÜRFEL (LINKS)
A.A = New A A\X = -2 A\Z = 0 A\MESH = CreateCube() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = CreateTexture(128,128,1+2+8+16+32) SetBuffer TextureBuffer(A\TEXTURE) ClsColor 255,0,255 Cls EntityTexture A\MESH,A\TEXTURE MASKTEXTURE(A\TEXTURE) ;2.WÜRFEL (RECHTS) A.A = New A A\X = 2 A\Z = 0 A\MESH = CreateCube() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = CreateTexture(128,128,1+2+8+16+32) SetBuffer TextureBuffer(A\TEXTURE) ClsColor 255,0,255 Cls EntityTexture A\MESH,A\TEXTURE SetBuffer BackBuffer() MASKTEXTURE(A\TEXTURE) |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für deine Antwort.
Hab aber das problem anscheinend umgangen, als ich das Beispiel für das forum hier geschrieben hab. Das problem besteht leider weiterhin und anscheinend NUR wen man eine geladene textur benutzt (Das ich beim oberen Beispiel weggelassen hab, damit der code sofort startfähig ist). Bei diesem Code sieht man das Problem sehr schön, ihr müsst leider BITTE ein bild erstellen das die hintergrundfarbe 252,0,252 hat: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Type A Field X,Y,Z Field MESH Field TEXTURE End Type camera = CreateCamera() PositionEntity camera,0,0,-5 CameraClsColor camera,22,222,222 Function MASKTEXTURE(TEXTURE,R = 255,G = 0,B = 255) Local BUFFER,X,Y,RGB BUFFER = TextureBuffer(TEXTURE) LockBuffer BUFFER For X = 0 To TextureWidth(TEXTURE)-1 For Y = 0 To TextureHeight(TEXTURE)-1 RGB = ReadPixelFast(X,Y,BUFFER) And $00FFFFFF If RGB = ((R Shl 16))+((G Shl 8)+B) WritePixelFast X,Y,$00000000,BUFFER Else WritePixelFast X,Y,RGB Or $FF000000,BUFFER End If Next Next UnlockBuffer BUFFER End Function Function createenemy(x,y) A.A = New A A\X = x A\Z = y A\MESH = CreateSprite() PositionEntity A\MESH,A\X,0,A\Z A\TEXTURE = LoadTexture("test.bmp",1+2+8+16+32) MASKTEXTURE(A\TEXTURE,252,0,252) EntityTexture A\MESH,A\TEXTURE End Function ;LINKER SPRITE createenemy(-2,0) ;RECHTER SPRITE createenemy(+2,0) While Not KeyHit(1) UpdateWorld RenderWorld Flip Wend End Klammert mal einen Funktionsaufruf von "CREATEENEMY" aus. und man sieht das es funktioniert. Startet man die Funktion öfter wird nix mehr wegmaskiert. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group