на винде вылез затык (буржуй один на макос тестил - все в порядке пишет). мне нужны биллбоарды - вешаю на них 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