3D Engine - Heighmap -> 3d Mesh!?

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

3D Engine - Heighmap -> 3d Mesh!?

Beitrag von Mijikai »

Ich würde gerne eine HeightMap in einen 3D Mesh konvertieren und diesen dann Rendern.
Das Bild kann ich in eine Positionsliste (xyz) verwandeln.

Wie könnte ich das umsetzten? (3D Anfänger) :oops:

Mein Code soweit:

Code: Alles auswählen

UsePNGImageDecoder()
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Structure VECTOR_STRUCT
  X.f
  Y.f
  Z.f
EndStructure

Structure BITMAP_STRUCT
  bmType.l
  bmWidth.l
  bmHeight.l
  bmWidthBytes.l
  bmPlanes.w
  bmBitsPixel.w
  Alignment.b[4]
  *bmBits
  PixelSize.i
EndStructure

Structure HEIGHMAP_STRUCT
  Id.i
  Handle.i
  Bitmap.BITMAP_STRUCT
  Count.i
  *VectorBuffer
  VectorBufferSize.i
EndStructure

Global HeightMap.i

Procedure.i HeightMapCatch(*Buffer)
  Protected *HeightMap.HEIGHMAP_STRUCT
  Protected PosX.i
  Protected PosY.i
  Protected *Pixel.Ascii
  Protected *Vector.VECTOR_STRUCT
  Protected *Scanline
  If *Buffer
    *HeightMap = AllocateStructure(HEIGHMAP_STRUCT)
    If *HeightMap
      With *HeightMap
        \Id = CatchImage(#PB_Any,*Buffer)
        If IsImage(\Id)
          \Handle = ImageID(\Id)
          If GetObject_(\Handle,SizeOf(BITMAP),@\Bitmap)
            \Bitmap\PixelSize = \Bitmap\bmBitsPixel / 8
            \Count = \Bitmap\bmWidth * \Bitmap\bmHeight
            \VectorBufferSize = \Count * SizeOf(VECTOR_STRUCT)
            \VectorBuffer = AllocateMemory(\VectorBufferSize)
            If \VectorBuffer
              *Vector = \VectorBuffer
              For PosY = 0 To \Bitmap\bmHeight - 1
                *Scanline = \Bitmap\bmBits + (PosY * \Bitmap\bmWidthBytes)
                For PosX = 0 To \Bitmap\bmWidth - 1
                  *Pixel = *Scanline + (PosX * \Bitmap\PixelSize)
                  *Vector\X = PosX
                  *Vector\Y = PosY
                  *Vector\Z = *Pixel\a * 2
                  *Vector + SizeOf(VECTOR_STRUCT)
                Next
              Next
              ProcedureReturn *HeightMap
            EndIf 
          EndIf
          FreeImage(\Id)
        EndIf 
      EndWith  
      FreeStructure(*HeightMap)
    EndIf 
  EndIf 
EndProcedure

Procedure.i HeightMapBuffer(*HeightMap.HEIGHMAP_STRUCT)
  With *HeightMap
    ProcedureReturn \VectorBuffer
  EndWith 
EndProcedure

Procedure.i HeightMapCount(*HeightMap.HEIGHMAP_STRUCT)
  With *HeightMap
    ProcedureReturn \Count
  EndWith 
EndProcedure

Procedure.i HeightMapBufferSize(*HeightMap.HEIGHMAP_STRUCT)
  With *HeightMap
    ProcedureReturn \VectorBufferSize
  EndWith
EndProcedure

Procedure.i HeightMapFree(*HeightMap.HEIGHMAP_STRUCT)
  With *HeightMap
    FreeImage(\Id)
    FreeMemory(\VectorBuffer)
    FreeStructure(*HeightMap)
  EndWith
EndProcedure

HeightMap = HeightMapCatch(?HeightMap)

If  HeightMap
  Debug "HeightMap: 0x" + Hex(HeightMap)
  Debug "VectorBuffer: 0x" + Hex(HeightMapBuffer(HeightMap))
  Debug "VectorBufferSize: " + Str(HeightMapBufferSize(HeightMap))
  Debug "VectorCount: " + Str(HeightMapCount(HeightMap))
  
  ; If InitEngine3D()
  ;   InitSprite()
  ;   InitKeyboard()
  ;   InitMouse()
  ;   If Screen3DRequester()
  ;   
  ;   EndIf
  ; EndIf 
  
  HeightMapFree(HeightMap)
EndIf 
End

DataSection
  HeightMap:
  ;map2.png - Size: 1629 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, 00F06h, 04449h, 05441h, 0DA78h, 0DDEDh, 06DC1h, 05AE2h, 08014h, 064E1h, 06B04h, 060EAh, 03711h
  !dw 0DC80h, 07D0Dh, 0F424h, 03741h, 01A51h, 01648h, 0C1D4h, 0CD9Ah, 0D02Ch, 01144h, 01B19h, 0CC63h, 0BDF5h, 07CF7h, 06ADFh, 07A1Eh, 08903h, 0FC99h, 0C73Ah, 0F026h, 004F4h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 09000h, 0E7A9h, 07F71h, 0B36Dh, 054D9h, 0687Fh, 03E3Eh
  !dw 0463Eh, 0DDFFh, 0C708h, 0EA07h, 071F8h, 0E3FEh, 000E8h, 08991h, 02020h, 00082h, 00822h, 0D010h, 09262h, 0B97Bh, 01AE7h, 09542h, 0101Ch, 0D798h, 08BF0h, 02693h, 0C041h, 00C3Ah, 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, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 067D0h, 0E851h, 0FDD7h
  !dw 0FAFAh, 0FC1Ah, 0DB99h, 076EDh, 0F9FEh, 0DC42h, 05E08h, 0F6F5h, 076F6h, 016F5h, 0EB00h, 02030h, 00082h, 00822h, 08220h, 02200h, 01008h, 0A046h, 0C3ABh, 0D995h, 0B76Eh, 0BA0Fh, 0FDE7h, 03F7Eh, 0B7EFh, 0F9F6h, 0E9F9h, 07327h, 0A684h, 01C69h, 09304h, 08020h, 00208h, 02088h, 00880h, 05C02h, 070B1h, 00A08h, 03875h, 0A61Ch
  !dw 0ABBAh, 07AF5h, 078EDh, 01262h, 01004h, 00041h, 00411h, 04110h, 01100h, 01004h, 00041h, 00411h, 04110h, 01100h, 01004h, 00041h, 00411h, 04110h, 01100h, 01004h, 00041h, 00411h, 04110h, 01100h, 02804h, 07781h, 08696h, 0CC4Ah, 051F8h, 045A5h, 0DA7Fh, 049A7h, 0B010h, 0030Eh, 02088h, 00880h, 08802h, 08020h, 00208h, 02088h
  !dw 00880h, 08802h, 08020h, 00208h, 0C6D4h, 0CDAFh, 0CE11h, 0B972h, 0EACCh, 039EBh, 04E9Dh, 0149Eh, 02093h, 00880h, 08802h, 08020h, 00208h, 0E224h, 008C2h, 0A5D1h, 02EBFh, 0DB91h, 01995h, 02C11h, 06ED2h, 0FBB7h, 0E37Dh, 0BB76h, 0F9FDh, 0879Fh, 0C1C3h, 00C13h, 08758h, 0AC01h, 030C3h, 097A9h, 09797h, 05B8Bh, 0BEBEh, 01CBEh
  !dw 01116h, 08884h, 0BBF9h, 05DB8h, 0AD0Dh, 050C3h, 0FE6Dh, 00ABAh, 0A438h, 08892h, 05420h, 00038h, 0A0EAh, 08208h, 0EA02h, 008A0h, 00282h, 0A0EAh, 00208h, 02088h, 00880h, 0F842h, 0D85Dh, 02C46h, 00082h, 00822h, 08220h, 02200h, 04508h, 0F3BAh, 0E077h, 00AFCh, 0089Dh, 06402h, 0E6ADh, 05037h, 0AF58h, 09ED7h, 02060h, 0046Eh
  !dw 0AA61h, 0788Dh, 02BDCh, 0125Dh, 0C2EFh, 0D34Dh, 0B278h, 0C3ACh, 0A8F0h, 0660Eh, 0405Eh, 01044h, 0EA32h, 002A0h, 0208Ah, 0EDC4h, 002A0h, 0A596h, 073AAh, 0FB82h, 0DEFDh, 04A33h, 00E9Ah, 07B7Ah, 0117Dh, 03504h, 03AC4h, 0200Ch, 00082h, 00822h, 08220h, 02200h, 02008h, 00082h, 00822h, 08220h, 03900h, 062F3h, 04EE9h, 0EFEFh
  !dw 0E7EFh, 0B43Fh, 0EB6Dh, 05468h, 0B96Ch, 03A5Ch, 02608h, 03A41h, 0780Bh, 067F1h, 00440h, 04401h, 04010h, 02304h, 0C2ECh, 06236h, 09BA8h, 0230Bh, 07384h, 09D3Ah, 0041Ch, 0824Ch, 02200h, 06C38h, 0B617h, 08311h, 00208h, 02088h, 00880h, 0DCC6h, 00185h, 08C11h, 0B568h, 0495Ah, 08824h, 08020h, 0DA08h, 00185h, 08C11h, 00BBCh
  !dw 0250Bh, 0A088h, 00214h, 06822h, 00617h, 03044h, 000F2h, 09728h, 08220h, 00882h, 0A088h, 0185Dh, 04110h, 01FA3h, 08220h, 04726h, 00440h, 02EABh, 0D99Ah, 04410h, 02ED0h, 0880Ch, 03620h, 01062h, 098C1h, 0332Dh, 08221h, 0DA08h, 00185h, 00411h, 0C110h, 0BB68h, 07FF0h, 044E7h, 005A7h, 00441h, 0C2EDh, 00880h, 08802h, 0F560h
  !dw 0F0BBh, 0EEE3h, 01004h, 062C1h, 06176h, 0332Bh, 02088h, 03D40h, 0D616h, 0C4DBh, 0DB8Fh, 0ADB6h, 0767Fh, 08220h, 0B5D9h, 0A6ECh, 0F9C5h, 03C78h, 0FFA6h, 0D506h, 0EA13h, 0875Fh, 02AE7h, 01160h, 0FA67h, 0845Ch, 0FA81h, 00823h, 08220h, 08C05h, 0AE81h, 04311h, 0F235h, 0273Ah, 0B6D8h, 0E8EDh, 02FA5h, 09871h, 03F46h, 0E8DCh
  !dw 089F3h, 009CEh, 0FD42h, 0EC11h, 060EFh, 0F31Dh, 0FF57h, 0D177h, 04895h, 08405h, 01128h, 0FEFCh, 0FF81h, 0C29Dh, 02073h, 05D6Ah, 0E545h, 0660Fh, 0EF91h, 0C139h, 01FAEh, 07BFEh, 09E5Eh, 080A2h, 03140h, 08C11h, 041D3h, 00405h, 01C11h, 0C1D3h, 0523Ah, 080A8h, 0AF30h, 07E02h, 0AE6Dh, 014EBh, 0B9E1h, 0E520h, 0229Eh, 03F94h
  !dw 00930h, 05DC6h, 0158Dh, 04410h, 06E30h, 01507h, 0AC10h, 013C3h, 0C6AFh, 0BCA5h, 0467Ah, 086FEh, 09A68h, 041C6h, 024C0h, 0E158h, 0A848h, 02080h, 07182h, 0A83Bh, 02080h, 0E982h, 0983Ah, 00A5Bh, 01015h, 055B2h, 03BF6h, 0E74Bh, 0EAFFh, 0F919h, 09303h, 0DC60h, 058D5h, 04101h, 0E304h, 05076h, 0C101h, 09C3Ah, 06AC5h, 0FE9Ch
  !dw 033D5h, 007F2h, 0C126h, 023B8h, 002A1h, 00882h, 0EDC6h, 002A0h, 00882h, 0DD66h, 05F41h, 0700Ch, 05161h, 037EBh, 0F3D6h, 019EAh, 003F9h, 09F2Ah, 0CF04h, 0FF66h, 05EA0h, 0149Fh, 0220Ch, 09198h, 01704h, 07D88h, 02714h, 02088h, 00880h, 085DAh, 0C46Dh, 08220h, 076D1h, 01B61h, 08831h, 08020h, 00208h, 0E088h, 0E6BCh, 0133Dh
  !dw 0B177h, 03B11h, 0082Dh, 03822h, 0E733h, 000E9h, 030EBh, 08C40h, 04E08h, 07EB5h, 0FF1Eh, 07D29h, 0073Dh, 04F42h, 0E382h, 0E176h, 0ED9Fh, 0D11Bh, 00B41h, 09438h, 0E162h, 0F410h, 0EFE4h, 046E2h, 00369h, 06093h, 002C4h, 033DEh, 0DA12h, 04188h, 09304h, 068BAh, 0F0CDh, 06DD9h, 0E9E0h, 0E1BFh, 00967h, 08D8Dh, 08220h, 00C95h
  !dw 0D380h, 0848Eh, 05640h, 09FA2h, 0EC13h, 0D9C9h, 05BF7h, 0E6A2h, 0B9FCh, 080C6h, 0B049h, 01773h, 0A49Eh, 04F80h, 01FBDh, 0725Ah, 048D3h, 0B4E8h, 09820h, 09304h, 09FEAh, 06ED4h, 050FAh, 09EA4h, 0EB37h, 019EFh, 05709h, 095ABh, 019C5h, 0824Ch, 0AE39h, 0E3C0h, 0163Eh, 0AA6Eh, 01091h, 0C110h, 076D9h, 09EE1h, 00DFCh, 05CF9h
  !dw 09EA4h, 067FFh, 00748h, 0C46Dh, 08220h, 0EDB3h, 0A3C2h, 0C007h, 0B9E1h, 07DFCh, 02EFFh, 0809Eh, 0E608h, 002B2h, 033DFh, 05A00h, 0418Dh, 00B04h, 0DFCEh, 00324h, 09DE0h, 02123h, 08220h, 0D40Fh, 0AE75h, 0E06Dh, 0608Bh, 04CEEh, 07F61h, 0BD7Ch, 02AC7h, 06088h, 06D6Ah, 0F6DBh, 0800Fh, 01553h, 06AF0h, 08D4Fh, 02084h, 01982h
  !dw 0860Dh, 00E13h, 05680h, 01063h, 002C1h, 0F792h, 001D0h, 07470h, 06D61h, 020C4h, 03382h, 0C82Ch, 01EC9h, 0D928h, 00163h, 09822h, 09569h, 01074h, 03044h, 000D6h, 0EB78h, 0DB43h, 02188h, 0C513h, 081BFh, 05742h, 0724Dh, 0C598h, 0DE7Ah, 00176h, 00930h, 0D946h, 0AD46h, 060C6h, 08C12h, 01C5Eh, 02123h, 00498h, 05453h, 0F32Fh
  !dw 0AB99h, 02FA0h, 04C15h, 0A682h, 0AB3Fh, 09831h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 01044h, 00440h, 04401h, 04010h, 00104h, 0304Ah, 0BBCDh, 06CC8h, 01B36h, 01287h, 00930h, 08802h, 08020h, 00208h, 02088h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 0FA13h, 0770Bh, 02665h, 06E12h, 01287h, 0006Dh, 00000h, 04900h, 04E45h, 0AE44h, 06042h, 00082h
EndDataSection
Heightmap einzeln:
Bild
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 3D Engine - Heighmap -> 3d Mesh!?

Beitrag von DarkDragon »

CreateTerrain sollte da helfen. Es gibt glaube ich ein Beispiel im PureBasic Examples Ordner.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: 3D Engine - Heighmap -> 3d Mesh!?

Beitrag von Mijikai »

DarkDragon hat geschrieben:CreateTerrain sollte da helfen. Es gibt glaube ich ein Beispiel im PureBasic Examples Ordner.
Beispiele hab ich gefunden jedoch ohne jede weitere Erklärung was mir nichts bringt.
Anscheinend ist es nicht einmal möglich Resourcen vom Speicher zu laden!?
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 3D Engine - Heighmap -> 3d Mesh!?

Beitrag von DarkDragon »

Mijikai hat geschrieben:
DarkDragon hat geschrieben:CreateTerrain sollte da helfen. Es gibt glaube ich ein Beispiel im PureBasic Examples Ordner.
Beispiele hab ich gefunden jedoch ohne jede weitere Erklärung was mir nichts bringt.
Nunja, man erzeugt ein Terrain Objekt mit CreateTerrain und nimmt dann DefineTerrainTile um einzelne Heightmaps reinzuladen (Terrain.pb z.B.). Zur Darstellung legt man dann auch noch eine Textur auf das Terrain mit AddTerrainTexture.
Mijikai hat geschrieben:Anscheinend ist es nicht einmal möglich Resourcen vom Speicher zu laden!?
Mit der PB OGRE Anbindung nicht, nein. Da wird man auch nicht allzu glücklich damit. Was soll es denn werden und wie kompliziert darf es werden? Mit OpenGL kriegt man sowas relativ gut und einfach hin, wenn man Grundwissen in linearer Algebra und affiner Geometrie/Abbildung/Transformation hat.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: 3D Engine - Heighmap -> 3d Mesh!?

Beitrag von Mijikai »

OpenGL wäre definitiv besser das mit Ogre bring eh nix.

Vor einiger Zeit hatte ich es schon einmal Versucht: http://forums.purebasic.com/german/view ... =4&t=30792
Da bin ich am Ende jedoch abgedriftet und hab was anderes Programmiert.
Das ursprüngliche Problem wurde nicht gelöst.
Antworten