Mav bei Renderworld // Seltsame Verformung - Eigenes Terrain
Übersicht

![]() |
Xaymarehemals "Cgamer"Betreff: Mav bei Renderworld // Seltsame Verformung - Eigenes Terrain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Terrain System
;Non-LOD Terrain Function Load_Terrain(File$, Parent=0) If FileType(File$) = 1 TerImg = LoadImage(File$) If TerImg <> 0 W = ImageWidth(TerImg):H = ImageHeight(TerImg) Mesh = CreateMesh(Parent):Surf = CreateSurface(Mesh) SetBuffer ImageBuffer(TerImg):LockBuffer ImageBuffer(TerImg) For X = 0 To W:For Y = 0 To H RGB = ReadPixelFast(X , Y ):W1# = ((RGB And $FF0000) Shr 16) / 12. RGB = ReadPixelFast(X+1, Y ):W2# = ((RGB And $FF0000) Shr 16) / 25.5 RGB = ReadPixelFast(X , Y+1):W3# = ((RGB And $FF0000) Shr 16) / 25.5 RGB = ReadPixelFast(X+1, Y+1):W4# = ((RGB And $FF0000) Shr 16) / 25.5 V1 = AddVertex(Surf, X , W1, Y , X , Y ) V2 = AddVertex(Surf, X+1, W2, Y , X+1, Y ) V3 = AddVertex(Surf, X , W3, Y+1, X , Y+1) ;V4 = AddVertex(Surf, X+1, W4, Y+1, X+1, Y+1) AddTriangle(Surf, V3, V2, V1) ;AddTriangle(Surf, V2, V3, V4) Next:Next SetBuffer BackBuffer():UnlockBuffer ImageBuffer(TerImg) UpdateNormals Mesh Return Mesh Else RuntimeError "File is not a valid Image" EndIf Else RuntimeError "File doesn't exist" EndIf End Function Graphics3D 1024, 768, 32, 2 SetBuffer BackBuffer() ;-------------------------------Boden Textur Grass = CreateTexture(64,64,8) SetBuffer TextureBuffer(Grass) ClsColor 80,130,90 Cls RGB = (90 Shl 16) + (110 Shl 8) + 60 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (70 Shl 16) + (120 Shl 8) + 70 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (95 Shl 16) + (115 Shl 8) + 90 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next SetBuffer BackBuffer() Cam = CreateCamera() ter=Load_Terrain("Ter02.bmp") EntityTexture ter, GRass While Not KeyHit(1) YSpeed# = MouseYSpeed() YSpeed# = YSpeed# / 5 XSpeed# = MouseXSpeed() XSpeed# = XSpeed# / 5 RotateEntity Cam, EntityPitch#(Cam)+YSpeed#, EntityYaw#(Cam)-Xspeed#, 0 If EntityPitch#(Cam) < -89.5 RotateEntity Cam, -89.5, EntityYaw(Cam),0 If EntityPitch#(Cam) > 89.5 RotateEntity Cam, 89.5, EntityYaw(Cam),0 If MouseDown(1) MoveEntity Cam, 0, 0, 1 If MouseDown(2) MoveEntity Cam, 0, 0, -1 If MouseX() < 10 Or MouseX() > 1014 Or MouseY() < 10 Or MouseY() > 758 MoveMouse 512,368 RenderWorld Flip Wend End Ich erhalte bei dem code ohne die beiden auskommentierten Zeilen keinen mav, mit hingegen schon. Und ich erhalte unerwarte spitzen im Terrain. das terrain bmp: die erwarteten spitzen treten widerrum nicht auf. ich weiß nicht mehr weiter:( |
||
Warbseite |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was mir beim überfliegen ins Auge sticht: Du verwendest ReadPixelFast und liest trotzdem zwei Pixel weiter als erlaubt - die Koordinaten müssen nämlich im Bereich 0 bis Breite - 1 bzw. 0 bis Höhe - 1 sein.
Eigenartig, dass dort der Debugger keine Fehlermeldung ausgibt. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
auch mit W-1 und H-1 kommen die selben fehler(ein wenig stärker als vorher) | ||
Warbseite |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Debugger gibt deshalb keine Fehlermeldung aus, weil er bei ReadPixelFast nicht einmischt - was der Grund ist, wieso der Befehl auch so schnell ist.
Und CGamer: Du sprengst mit deinem 128 x 128 Pixel grossen Bild ganz einfach die Grenzen der Graka. Bei 4 Vertices pro pixel gibt das nämlich 65536 Punkte, also genau die Grenze. Aber du gehst von 0 bis 128, also hast du eine 129x129 Einheiten grosse Surface, was einfach zu viel ist. Und nur so btw: Du brauchst nicht zwingend pro Pixel 4 Vertices, da sich Triangles auch einen Vertex teilen können. Probiers einfach mal mit nem kleineren Bild Edit: Die "unerwarteten" Spitzen kommen aber nicht zufälligerweise daher, dass du die Höhe für Vertex 1 durch 12. dividierst und die restlichen durch 25.5? |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das muss W-2 und H-2 heissen, da du ja vorhin zwei Pixel zu weit ausgelesen hast ![]() @HC: Wenn der Debugger eingeschaltet ist, gibt er bei mir eine MAV aus, wenn ich zu weit lesen will. Ist er aus, so erhalte ich einfach irgendeinen Wert, je nach dem, was dort gerade im RAM steht. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, gut möglich. Ich erinnere mich einfach noch, dass bei mir bei WritePixelFast im einen Fall einfach die Meldung "BlitzCC hat Fehler verursacht und wird geschlossen" kam und im anderen Fall kam keine Meldung, aber je nachdem erschienen plötzlich Pixel irgendwo auf dem Bildschirm. An den Debugger könnte ich mich grad nicht erinnern und ich bin ehrlich gesagt zu faul, das hier zu testen =)
Vielleicht ist das ja auch Write-/ReadPixelFast abhängig und evtl gibts sogar unterschiede zwischen B2D und B3D |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
also mit w-2 und h-2 funzt nur das mit der vertex verteilung will net | ||
Warbseite |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was meinst du mit Vertex-Verteilung? | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Terrain System
;Non-LOD Terrain Function Load_Terrain(File$, Parent=0) If FileType(File$) = 1 TerImg = LoadImage(File$) If TerImg <> 0 W = ImageWidth(TerImg):H = ImageHeight(TerImg) Mesh = CreateMesh(Parent):Surf = CreateSurface(Mesh) SetBuffer ImageBuffer(TerImg):LockBuffer ImageBuffer(TerImg) For X = 0 To W-2:For Y = 0 To H-2 RGB = ReadPixelFast(X , Y ):W1# = ((RGB And $FF0000) Shr 16) / 127.5 RGB = ReadPixelFast(X+1, Y ):W2# = ((RGB And $FF0000) Shr 16) / 127.5 RGB = ReadPixelFast(X , Y+1):W3# = ((RGB And $FF0000) Shr 16) / 127.5 RGB = ReadPixelFast(X+1, Y+1):W4# = ((RGB And $FF0000) Shr 16) / 127.5 ;Das meine ich If LV = 0 V1 = AddVertex(Surf, X , W1, Y, X , Y) V2 = AddVertex(Surf, X+1, W2, Y, X+1, Y) LV = 1 Else V1 = V2 V2 = V3 EndIf V3 = AddVertex(Surf, X , W3, Y+1, X , Y+1) V4 = AddVertex(Surf, X+1, W4, Y+1, X+1, Y+1) ;--- AddTriangle(Surf, V3, V2, V1) AddTriangle(Surf, V2, V3, V4) Next:LV=0:Next SetBuffer BackBuffer():UnlockBuffer ImageBuffer(TerImg) UpdateNormals Mesh Return Mesh Else RuntimeError "File is not a valid Image" EndIf Else RuntimeError "File doesn't exist" EndIf End Function Graphics3D 1024, 768, 32, 2 SetBuffer BackBuffer() ;-------------------------------Boden Textur Grass = CreateTexture(64,64,8) SetBuffer TextureBuffer(Grass) ClsColor 80,130,90 Cls RGB = (90 Shl 16) + (110 Shl 8) + 60 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (70 Shl 16) + (120 Shl 8) + 70 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (95 Shl 16) + (115 Shl 8) + 90 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next SetBuffer BackBuffer() Cam = CreateCamera() ter=Load_Terrain("Ter02.bmp") EntityTexture ter, GRass While Not KeyHit(1) YSpeed# = MouseYSpeed() YSpeed# = YSpeed# / 5 XSpeed# = MouseXSpeed() XSpeed# = XSpeed# / 5 RotateEntity Cam, EntityPitch#(Cam)+YSpeed#, EntityYaw#(Cam)-Xspeed#, 0 If EntityPitch#(Cam) < -89.5 RotateEntity Cam, -89.5, EntityYaw(Cam),0 If EntityPitch#(Cam) > 89.5 RotateEntity Cam, 89.5, EntityYaw(Cam),0 If MouseDown(1) MoveEntity Cam, 0, 0, 1 If MouseDown(2) MoveEntity Cam, 0, 0, -1 If MouseX() < 10 Or MouseX() > 1014 Or MouseY() < 10 Or MouseY() > 758 MoveMouse 512,368 RenderWorld Flip Wend End |
||
Warbseite |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Terrain System
;Non-LOD Terrain Function Load_Terrain(File$, Parent=0) If FileType(File$) = 1 TerImg = LoadImage(File$) If TerImg <> 0 W = ImageWidth(TerImg):H = ImageHeight(TerImg) ; Versuchs mal so: Vertices = CreateBank( (W+1) *(H+1) *4 ) Mesh = CreateMesh(Parent):Surf = CreateSurface(Mesh) SetBuffer ImageBuffer(TerImg):LockBuffer ImageBuffer(TerImg) For X = 0 To W-1:For Y = 0 To H-1 RGB = ReadPixelFast(X , Y ):W1# = ((RGB And $FF0000) Shr 16) / 12.5 V1 = AddVertex(Surf, X, W1, Y, X, Y) ; Alle Vertices in einer Bank speichern, brauchst ja jeden nur einmal PokeInt Vertices, (Y *W +X) *4, V1 Next:Next For X = 0 To W-2:For Y = 0 To H-2 ; ... Und kannst so ganz einfach auf jeden zugreifen V1 = PeekInt(Vertices, ((Y ) *W +X ) *4 ) V2 = PeekInt(Vertices, ((Y ) *W +X +1) *4 ) V3 = PeekInt(Vertices, ((Y +1) *W +X ) *4 ) V4 = PeekInt(Vertices, ((Y +1) *W +X +1) *4 ) AddTriangle(Surf, V1, V4, V2) AddTriangle(Surf, V1, V3, V4) Next:Next SetBuffer BackBuffer():UnlockBuffer ImageBuffer(TerImg) UpdateNormals Mesh Return Mesh Else RuntimeError "File is not a valid Image" EndIf Else RuntimeError "File doesn't exist" EndIf End Function Graphics3D 1024, 768, 32, 2 SetBuffer BackBuffer() ;-------------------------------Boden Textur Grass = CreateTexture(64,64,8) SetBuffer TextureBuffer(Grass) ClsColor 80,130,90 Cls RGB = (90 Shl 16) + (110 Shl 8) + 60 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (70 Shl 16) + (120 Shl 8) + 70 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next RGB = (95 Shl 16) + (115 Shl 8) + 90 For A = 0 To 64 WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB:WritePixel A,Rand(64),RGB Next SetBuffer BackBuffer() Cam = CreateCamera() ter=Load_Terrain("d:\temp\Ter02.bmp") EntityTexture ter, GRass light = CreateLight() AlignToVector light,1,-1,1,0 While Not KeyHit(1) YSpeed# = MouseYSpeed() YSpeed# = YSpeed# / 5 XSpeed# = MouseXSpeed() XSpeed# = XSpeed# / 5 RotateEntity Cam, EntityPitch#(Cam)+YSpeed#, EntityYaw#(Cam)-Xspeed#, 0 If EntityPitch#(Cam) < -89.5 RotateEntity Cam, -89.5, EntityYaw(Cam),0 If EntityPitch#(Cam) > 89.5 RotateEntity Cam, 89.5, EntityYaw(Cam),0 If MouseDown(1) MoveEntity Cam, 0, 0, 1 If MouseDown(2) MoveEntity Cam, 0, 0, -1 If MouseX() < 10 Or MouseX() > 1014 Or MouseY() < 10 Or MouseY() > 758 MoveMouse 512,368 RenderWorld Flip Wend End Na supa, weil HTML nicht fürs Tabulatorzeichen konzipiert wurde, ist jetzt die ganze Formatierung am Arsch. |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
so, die antwort erschien bei mir erst heute...(ist zum glück ja nicht weit her und ich arbeite immer noch am terrain sys)
thx nu funzt |
||
Warbseite |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group