на винде вылез затык (буржуй один на макос тестил - все в порядке пишет). мне нужны биллбоарды - вешаю на них 2д текстуры на 3д карте. ну и нужна прозрачность. первая текстура - все идеально. вторая... вторая, стерва, помнит форму прозрачности первой текстуры. третья соответственно помнит их обоих... бред творится. как сбросить этот некий кэш рисования, чтобы в начале рисования картинка была полностью пустая и прозрачная? это разные текстуры. а вот при рисовании такая шляпа творится.
первой рисуется текстура с кругом. круг не прозрачный, а вся картинка да. второй рисуется прямоугольник, с тоже прозрачной картинкой. так вместе с прямоугольником рисуется и круг с предыдущего рисования. типа запомнилась маска прозрачности при первом рисовании - и фигачит при последующих рисованиях. бред собачий.
Enumeration
#Window
#Camera
#Texture01
#Texture02
#Texture03
#Material01
#Material02
#Material03
#Billboard01
#Billboard02
#Billboard03
#Button
EndEnumeration
InitEngine3D()
InitSprite()
If OpenWindow(#Window, 100, 100, 480, 500, "", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(#Button, 10, 450, 50, 20, "switch")
If OpenWindowedScreen(WindowID(#Window), 10, 10, 400, 400)
If CreateTexture(#Texture01, 128, 64)
If StartDrawing(TextureOutput(#Texture01))
; transparent area
Box(0, 0, 127, 63, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; non transparent
Circle(60, 30, 10, RGBA(100, 100, 100, 255))
StopDrawing()
CreateMaterial(#Material01, TextureID(#Texture01))
MaterialBlendingMode(#Material01, #PB_Material_AlphaBlend)
CreateBillboardGroup(#Billboard01, MaterialID(#Material01), 128, 64)
EndIf
EndIf
If CreateTexture(#Texture02, 128, 64)
If StartDrawing(TextureOutput(#Texture02))
; transparent area
Box(0, 0, 127, 63, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; non transparent
Box(30, 20, 60, 10, RGBA(0, 0, 100, 255))
StopDrawing()
CreateMaterial(#Material02, TextureID(#Texture02))
MaterialBlendingMode(#Material02, #PB_Material_AlphaBlend)
CreateBillboardGroup(#Billboard02, MaterialID(#Material02), 128, 64)
EndIf
EndIf
If CreateTexture(#Texture03, 256, 256)
If StartDrawing(TextureOutput(#Texture03))
Box(0, 0, 255, 255, RGBA(255, 255, 255, 255))
StopDrawing()
CreateMaterial(#Material03, TextureID(#Texture03))
CreateBillboardGroup(#Billboard03, MaterialID(#Material03), 128, 64)
EndIf
EndIf
; add billboard to back side
If IsBillboardGroup(#Billboard03)
AddBillboard(#Billboard03, 0, 0, -30)
EndIf
; add billboard to back side
If IsBillboardGroup(#Billboard01)
AddBillboard(#Billboard01, 0, 0, -20)
EndIf
; add another billboard to front line
If IsBillboardGroup(#Billboard02)
AddBillboard(#Billboard02, 0, 0, 10)
EndIf
CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 0, 60, 100)
CameraLookAt(#Camera, 0, 0, 0)
AmbientColor(RGB(255,255,255))
EndIf
Repeat
Repeat
WinEvent = WindowEvent()
Select WinEvent
Case #PB_Event_Gadget
EventGad = EventGadget()
Select EventGad
Case #Button
Select flag
Case 0
HideBillboardGroup(#Billboard01, 1)
HideBillboardGroup(#Billboard02, 0)
flag = 1
Case 1
HideBillboardGroup(#Billboard01, 0)
HideBillboardGroup(#Billboard02, 1)
flag = 2
Case 2
HideBillboardGroup(#Billboard01, 0)
HideBillboardGroup(#Billboard02, 0)
flag = 0
EndSelect
EndSelect
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until WinEvent = 0
RenderWorld()
FlipBuffers()
Until quit = 1
EndIf
и рисуется поверх них, хотя находится дальше от зрителя. бред бредский. где ошибка?