[OpenGL] HeightMap rendern Artefakte ?!
Verfasst: 30.04.2018 14:53
Ich versuche gerade mit OpenGL HeighMaps anzuzeigen.
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:
Später wenn es ohne Artefakte funktioniert muss ich das ganze noch in eine Liste bringen um
es schneller/ besser zu rendern.
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.