Leider gibt es beim rotieren Artefakte !?
Irgendwas ist noch falsch!
Je nach Blickrichtung sieht es anders aus (einmal wird Alpha einfach ignoriert !?):
Hier mein Code zum Testen:
Code: Alles auswählen
;PB v.5.62 x64
UsePNGImageDecoder()
Procedure.i HeightMap(*Buffer)
Structure COLOR_STRUCT
StructureUnion
Value.l
RGBA.a[4]
EndStructureUnion
EndStructure
Protected Image.i
Protected Width.i
Protected Height.i
Protected XX.i
Protected YY.i
Protected X.f
Protected Y.f
Protected Value1.a
Protected Value2.a
Protected Color.COLOR_STRUCT
Image = CatchImage(#PB_Any,*Buffer)
If IsImage(Image)
If StartDrawing(ImageOutput(Image))
Width = ImageWidth(Image)
Height = ImageHeight(Image)
glEnable_(#GL_DEPTH_TEST)
For XX = 1 To Width - 1
glBegin_(#GL_TRIANGLE_STRIP)
For YY = 1 To Height - 1
X = XX - Width / 2
Y = YY - Height / 2
Color\Value = Point(XX - 1,YY - 1)
Value1 = (Color\RGBA[0] + Color\RGBA[1] + Color\RGBA[2]) / 3
glColor4ub_(Value1,Value1,Value1,155)
glVertex3f_(X - 1,Y - 1,Value1-100)
Color\Value = Point(XX,YY)
Value2 = (Color\RGBA[0] + Color\RGBA[1] + Color\RGBA[2]) / 3
glColor4ub_(Value2,Value2,Value2,155)
glVertex3f_(X,Y,Value2-100)
Next
glEnd_()
Next
glDisable_(#GL_DEPTH_TEST)
StopDrawing()
EndIf
FreeImage(Image)
EndIf
EndProcedure
Procedure.i Test()
Protected Texture1.i
Protected Texture2.i
Protected OpenGL.i
Protected Tick.f
If OpenWindow(0,0,0,400,400,"TestWindow",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenGLGadget(1,0,0,400,400,#PB_OpenGL_NoDepthBuffer)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_BLEND)
glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_()
glOrtho_(0,400,400,0,-1000,1000)
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
glClearColor_(0.8,0.1,0.1,1)
Repeat
If Tick > 358
Tick = 0
Else
Tick + 1
EndIf
glClear_(#GL_COLOR_BUFFER_BIT|#GL_DEPTH_BUFFER_BIT)
glLoadIdentity_()
glTranslatef_(200,190,0)
glScalef_(0.8,0.8,0.8)
glRotatef_(45,1,0,0)
glRotatef_(Tick,0,0,1)
HeightMap(?HeightMap)
SetGadgetAttribute(1,#PB_OpenGL_FlipBuffers,#True)
Until WindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
EndProcedure
Test()
DataSection
HeightMap:
;{ Size: 1538 Bytes
!dw 05089h, 0474Eh, 00A0Dh, 00A1Ah, 00000h, 00D00h, 04849h, 05244h, 00000h, 0AC01h, 00000h, 01A01h, 00208h, 00000h, 0C200h, 0F439h, 00093h, 00000h, 07009h, 05948h, 00073h, 00E00h, 000C4h, 00E00h, 001C4h, 02B95h, 01B0Eh, 00000h, 0B405h, 04449h, 05441h, 0DA78h, 0DDEDh, 075C1h, 040A2h, 08000h, 064E1h, 0169Fh, 021E3h, 06034h
!dw 0D407h, 01F61h, 07D89h, 08758h, 0D81Dh, 03980h, 08C58h, 03D97h, 0BDE4h, 09F3Ch, 01C46h, 00660h, 09986h, 0BBEFh, 01BADh, 07104h, 077F9h, 09046h, 0BDBCh, 00001h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0EA64h, 0D87Dh, 0DB62h, 0B6EDh, 05DF8h, 03A73h, 0069Dh, 05B2Fh
!dw 0FEC3h, 03281h, 0E70Eh, 0F67Fh, 0500Eh, 01133h, 04404h, 04010h, 00104h, 0B42Ah, 0F28Ah, 0632Ch, 021CEh, 0C914h, 0810Eh, 08579h, 09C9Fh, 01234h, 04C04h, 00187h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h
!dw 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 0ACBAh, 0BA16h, 09FDDh, 09F9Fh, 0BF95h
!dw 0FB73h, 0DEFDh, 05F3Fh, 037A8h, 02F82h, 07D7Dh, 0BD7Dh, 0047Ch, 074C0h, 01018h, 00041h, 00411h, 04110h, 01100h, 0A804h, 04546h, 08767h, 0B30Bh, 0EDDBh, 03D12h, 0E1F3h, 09870h, 0A5F7h, 0CF9Dh, 04767h, 000E6h, 0D34Dh, 009D8h, 08246h, 02200h, 02008h, 00082h, 00822h, 0C2F0h, 02ECAh, 0A858h, 0E5CBh, 0EB12h, 036A9h, 08D9Bh
!dw 089FDh, 02091h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 012C0h, 0B3B8h, 01434h, 0C662h, 0555Fh, 0E8BAh, 0F6DFh, 02469h, 09808h, 0030Eh, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h
!dw 08020h, 00208h, 0C694h, 0E6D7h, 0CEA8h, 0BD7Ah, 06ACEh, 0AE7Bh, 0ABD7h, 0C537h, 01048h, 00440h, 04401h, 04010h, 00104h, 0E226h, 008C4h, 09BB5h, 0BCFEh, 06E44h, 06667h, 07044h, 0F691h, 0FDFBh, 083E3h, 0DDBBh, 0F6EEh, 0978Fh, 0C5CBh, 00C1Bh, 00E98h, 09803h, 0430Eh, 01F54h, 01F1Fh, 08F77h, 07F7Ch, 0DB7Fh, 0222Dh, 03508h
!dw 0EFE6h, 071EEh, 03435h, 0861Dh, 0F362h, 0ACF7h, 02180h, 04495h, 0A104h, 001C0h, 00EA0h, 0208Ah, 0A028h, 08A0Eh, 02820h, 00EA0h, 0208Ah, 00880h, 08802h, 05420h, 0173Fh, 02336h, 04116h, 01100h, 01004h, 00041h, 08411h, 01A45h, 01DF9h, 05F38h, 013A1h, 08041h, 095ACh, 0037Ch, 0CD85h, 0E366h, 0060Dh, 08DEAh, 0C420h, 0119Ah
!dw 0BB0Fh, 065D2h, 0B9E2h, 0D370h, 0DE34h, 0D32Ch, 04861h, 0C1D5h, 00BCCh, 00888h, 04642h, 0541Dh, 01140h, 07A84h, 0A83Bh, 0CB80h, 0D452h, 08267h, 0C387h, 03BC1h, 034CAh, 0741Dh, 07D7Bh, 00411h, 0C435h, 01874h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 0E672h, 06962h, 0B76Ah, 0AF5Eh, 004EDh
!dw 04123h, 01100h, 01004h, 00041h, 00411h, 085A8h, 02313h, 0E754h, 0BD7Ah, 009DAh, 00918h, 08802h, 02020h, 07682h, 02001h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h
!dw 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 08300h, 0ECADh, 07202h, 034D3h, 09D8Dh, 09180h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h
!dw 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h, 00880h, 08802h, 08020h, 00208h, 00822h, 0AB50h, 07EE9h, 070EFh, 0B6DBh, 07F1Dh, 03C7Bh, 05F1Eh, 0D82Eh, 033F1h, 03F21h, 0783Ch, 05E03h, 0FB2Eh, 049ECh, 0ACC6h, 07BB1h, 0C21Bh, 0FD97h, 01B73h, 05CFEh, 0D87Ch, 01E7Eh, 08AF3h
!dw 0AEA0h, 08608h, 0541Ch, 01E33h, 0D345h, 0406Fh, 035AFh, 05606h, 07038h, 0B691h, 0076Dh, 0D2BFh, 0A7EEh, 04295h, 0874Ch, 08E13h, 08B16h, 080DCh, 06B44h, 0F14Ch, 06DB4h, 086DBh, 0ED3Ch, 06FECh, 0E422h, 0123Eh, 03BECh, 09D51h, 00378h, 047BAh, 0C349h, 03986h, 0D663h, 0F778h, 03F3Ch, 0760Bh, 0D22Fh, 0713Dh, 0B28Eh, 067B7h
!dw 0137Fh, 0A8A1h, 0E091h, 011EDh, 0CB35h, 034B1h, 00CFDh, 078EEh, 08E3Ch, 05CFCh, 0F06Fh, 0EAEBh, 0EAB5h, 0B0C0h, 07E0Eh, 0105Ah, 0D9C1h, 09432h, 006DBh, 03CE4h, 00F73h, 0273Fh, 08523h, 02088h, 002A9h, 013F4h, 07997h, 02313h, 08870h, 04620h, 0208Bh, 07A82h, 06311h, 0BD75h, 0CBAEh, 073FBh, 0F638h, 09B6Ch, 07EE3h, 03AC6h
!dw 03B78h, 01161h, 0BAF2h, 0304Eh, 0B587h, 038A7h, 03BD4h, 05D5Eh, 045E0h, 063DAh, 0CAB6h, 07BE5h, 07B90h, 05304h, 02837h, 09256h, 02E46h, 0A53Bh, 08BDFh, 0A469h, 0B210h, 0608Bh, 01DB6h, 06599h, 021EDh, 00917h, 0FE3Eh, 0C840h, 08305h, 08F3Fh, 0A63Fh, 00750h, 0C721h, 070E9h, 083D9h, 0EE94h, 0EAEFh, 00B3Eh, 0C453h, 09AABh
!dw 0AEEFh, 036CDh, 08424h, 022BCh, 0F138h, 03901h, 0BCE6h, 0C441h, 0BD4Dh, 0B19Dh, 0FC8Eh, 06F32h, 058E0h, 0C9D2h, 0C862h, 08222h, 07DB9h, 0F676h, 0875Bh, 0A7E9h, 08F8Ah, 0DC9Fh, 0FDF5h, 06100h, 0EC96h, 04942h, 0225Ch, 02493h, 0D937h, 0C96Eh, 0B3F8h, 020CCh, 00582h, 0FA5Ah, 02898h, 09E69h, 0180Ch, 01D31h, 0E8CEh, 08F50h
!dw 0EB72h, 065D3h, 02D45h, 097ABh, 0126Ch, 0918Dh, 0CCE0h, 0B4C3h, 07797h, 05CF4h, 0A4D6h, 0E5EFh, 086BAh, 0EEDDh, 07025h, 0452Fh, 00B7Fh, 082DEh, 039EFh, 02208h, 03918h, 0E31Ch, 0BC0Fh, 007E9h, 07138h, 0112Fh, 0BC7Fh, 0F01Eh, 09F71h, 0FD24h, 0427Fh, 030FEh, 04E1Dh, 0183Bh, 0BC7Ch, 02DD2h, 0CE5Dh, 0263Ah, 0C37Dh, 0DD56h
!dw 0A96Bh, 05F5Eh, 0EB95h, 0BF3Eh, 0B11Ch, 0BD4Ah, 002DEh, 01230h, 03B4Ch, 04E29h, 0C054h, 03E59h, 08AEDh, 0D2BEh, 06B90h, 06306h, 01FDDh, 09F3Bh, 008DDh, 08F85h, 06F04h, 0AE8Fh, 07E62h, 059CFh, 06DF4h, 01DFEh, 0A6C0h, 051DBh, 017DDh, 0CB5Dh, 04B1Fh, 03EF4h, 0B16Ch, 076EDh, 0FB7Bh, 0D3C7h, 064E9h, 00257h, 008F9h, 0946Fh
!dw 004EBh, 0AA81h, 02089h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 08865h, 02B73h, 0BBADh, 0361Bh, 01800h, 00209h, 02088h, 00880h, 08802h, 00020h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 02300h, 007FDh, 0D693h
!dw 06CD1h, 0D481h, 05AEDh, 00000h, 00000h, 04549h, 0444Eh, 042AEh, 08260h
;}
EndDataSection
es schneller/ besser zu rendern.