Mesh erstellen
Übersicht

![]() |
BenibaerenstarkBetreff: Mesh erstellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
Ich probiere mit Blitz3d ein Mesh zu erstellen. Um die Grundlagen zu verstehen probierte ich ein simples Mesh zu basteln, welches aus 100 Verticen besteht, welche mittels Triangels zu einer Fläche gemacht werden. Ich erstelle eine Bank, in welcher die Indices der Vertices gespeichert werden: BlitzBasic: [AUSKLAPPEN] Bank = CreateBank(10*10*4) danach werden die Vertices erstellt und in der Bank gespeichert: BlitzBasic: [AUSKLAPPEN] i=0 Dies sieht dann ungefähr folgendermassen aus: ![]() Jetzt versuche ich die Vertexe zu verbinden, es sollten 81 (9*9, da die randvertexe nicht mitgerechnet werden dürfen) Quadrätchen mit je zwei Triangeln verbunden werden: BlitzBasic: [AUSKLAPPEN] i=0 Das sieht dann folgendermassen aus: ![]() man sieht sofort, dass da einige triangeln fehlen, und auf der rückseite, finde ich sie dann auch: ![]() Ich glaube, es liegt an der art wie ich die Bank auslese und die Tris erstelle: ![]() Hier kommt es wohl zum Fehler: ![]() doch wie kann ich das beheben??? habe es schon mit "if i mod 10 = 0 then keine tris erstellen" und anderem probiert aber es hat nie richtig geklappt!! aber so schwer dürfte es wohl auch nicht sein! ![]() Edit: wie kann ich die Bilder gerade im thread anzeigen lassen?? vielen dank für eure hilfe mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
ähm, versteht ihr die frage nicht, oder wisst ihr keine antwort? ein bisschen feedback wäre schon nett...
mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ersteinmal: Die Vertexindices sind nicht zufällig. Sie beginnen bei 0 und enden bei CountVertices(Surface)-1. Jetzt mache dir folgende Überlegung: Code: [AUSKLAPPEN] 0 1 2 3 4 5 6 7 8 9
----------------------------- 0 | 00 01 02 03 04 05 06 07 08 09 1 | 10 11 12 13 14 15 16 17 18 19 2 | 20 21 22 23 24 25 26 27 28 29 3 | 30 31 32 33 34 35 36 37 38 39 4 | 40 41 42 43 44 45 46 47 48 49 5 | 50 51 52 53 54 55 56 57 58 59 6 | 60 61 62 63 64 65 66 67 68 69 7 | 70 71 72 73 74 75 76 77 78 79 8 | 80 81 82 83 84 85 86 87 88 89 9 | 90 91 92 93 94 95 96 97 98 99 Du musst also zu Anfang die 2 Triangles (00, 01, 11) und (11, 10, 00) erstellen. Dann gehts weiter mit (01, 02, 12) und (12, 11, 01) usw. Um den Vertexindex zu bekommen nimmst du die Formel Y*10+X. *10 weil in jeder Zeile 10 Vertices sind. Code: [AUSKLAPPEN] Graphics3D(640, 480, 32, 2)
SetBuffer BackBuffer() Global Mesh, Surface, Camera Mesh = CreateMesh() Surface = CreateSurface(Mesh) For X = 0 To 9 For Y = 0 To 9 AddVertex(Surface, Float#(X)-5.0, Float#(Y)-5.0, 0.0) Next Next For X = 0 To 8 For Y = 0 To 8 AddTriangle(Surface, Y*10+X, Y*10+X+1, (Y+1)*10+X+1) AddTriangle(Surface, (Y+1)*10+X+1, (Y+1)*10+X, Y*10+X) Next Next Camera = CreateCamera() PositionEntity(Camera, 0.0, 0.0, -10.0) WireFrame(True) While Not KeyDown(1) UpdateWorld() RenderWorld() Flip() Wend End mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
Herzliches Dankeschön!
habs ausprobiert und es hat geklappt! Ich versuche jetzt diesen Code und die Berechnung der Vertexindices zu verstehen: Zitat: AddTriangle(Surface, Y*10+X, Y*10+X+1, (Y+1)*10+X+1)
AddTriangle(Surface, (Y+1)*10+X+1, (Y+1)*10+X, Y*10+X) wenn du mir diese Rechnungen noch mal "einfach" erklären könntest, wäre ich dir sehr dankbar ![]() ![]() mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] 0 1 2 3 4 5 6 7 8 9
----------------------------- 0 | 00 01 02 03 04 05 06 07 08 09 1 | 10 11 12 13 14 15 16 17 18 19 2 | 20 21 22 23 24 25 26 27 28 29 3 | 30 31 32 33 34 35 36 37 38 39 4 | 40 41 42 43 44 45 46 47 48 49 5 | 50 51 52 53 54 55 56 57 58 59 6 | 60 61 62 63 64 65 66 67 68 69 7 | 70 71 72 73 74 75 76 77 78 79 8 | 80 81 82 83 84 85 86 87 88 89 9 | 90 91 92 93 94 95 96 97 98 99 Code: [AUSKLAPPEN] AddTriangle(Surface, Y*10+X, Y*10+X+1, (Y+1)*10+X+1)
AddTriangle(Surface, (Y+1)*10+X+1, (Y+1)*10+X, Y*10+X) Nehmen wir mal das Quadrat (35, 36, 46, 45): Wir müssen 2 Triangles (35, 36, 46) und (46, 45, 35) erstellen. Der rechte Nachbar eines Vertex X ist X+1 (mit X < 9, deswegen zählen wir auch nur von 0 bis 8, da dann jeder Vertex ein rechten Nachbar hat). Wir können also Vertex X und Vertex X+1 ersteinmal verbinden. Vertex X+1 muss dann mit seinem unteren Nachbarn verbunden werden. Also Y+1 UND X+1 (weil wir immer vom Originalvertex ausgehen). Code: [AUSKLAPPEN] (X, Y) (X+1, Y)
V0------V1 \ | \ | \ | \ | \ | \ | \| V2 (X+1, Y+1) Mit Originalvertex ist hier einfach V0 gemeint den gehen wir mit den 2 For-Schleifen ja auch durch. Naja nehme wir die Indexformel her: Y*10+X und setzen ein: V0 = Y*10+X V1 = Y*10+(X+1) = Y*10+X+1 V2 = (Y+1)*10+(X+1) = (Y+1)*10+X+1 So und den selben Spaß noch mit dem 2ten Triangle Code: [AUSKLAPPEN] (X, Y)
V0 |\ | \ | \ | \ | \ | \ | \ | \ V3-------V2 (X, Y+1) (X+1, Y+1) V3 = (Y+1)*10+X Und jetzt werden diese dann Verbunden: Traingle1 = (V0, V1, V2) Triangle2 = (V2, V3, V0) Auf das Beispiel bezogen sind wir gerade bei Zeile 3 und Spalte 5 also Y=3 und X=5. V0 = Y*10+X = 3*10+5 = 35 V1 = Y*10+X+1 = 3*10+5+1= 36 V2 = (Y+1)*10+X+1 = (3+1)*10+5+1 = 46 V3 = (Y+1)*10+X = (3+1)*10+X = 45 Und da kann ich mich mal selbst zitieren ![]() Zitat: Nehmen wir mal das Quadrat (35, 36, 46, 45):
Wir müssen 2 Triangles (35, 36, 46) und (46, 45, 35) erstellen. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für diese ausführlichen Erklärungen!
ich habe bereits (erst:?: ) so viel verstanden, dass diese Formel soviel bedeutet wie: Y*Anzahl Vertices+X, doch dies funktioniert nur bei quadratischen Meshs, also wenn Y und X gleich gross sind, oder? Doch ich glaube, mit dem Hinweis, dass die Vertices von 0 her aufwärts "Indexiert" werden, es selbst schaffen zu können, auch "asymetrische" Meshs zu erstellen. Jedenfalls habe ich dank deinen Infos viel Grundwissen gelernt. Danke. mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Y*Anzahl Vertices+X, doch dies funktioniert nur bei quadratischen Meshs, also wenn Y und X gleich gross sind, oder?
Nöö ![]() Gehen wir mal von einem Rechteck mit 5 * 3 aus: Code: [AUSKLAPPEN] 0 1 2 3 4
-------------- 0 | 00 01 02 03 04 1 | 05 06 07 08 09 2 | 10 11 12 13 14 Y*Width+X = Y*5+X Beim Vertex auf Zeile 2 und Spalte 3 wäre das dann halt: 2*Width+3 = 2*5+3 = 13 und siehe da, es stimmt mit dem Index in der Tabelle überein. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, verdammt, ich schnall das nicht! ![]() ![]() frage jetzt noch einmal, dann geb ichs auf... BlitzBasic: [AUSKLAPPEN]
liefert folgendes Resultat: ![]() wenn Anz X und Y gleich gross sind, gibt es ein schönes Quadrat und alles stimmt. Wo liegt der Fehler? mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
![]() |
Benibaerenstark |
![]() Antworten mit Zitat ![]() |
---|---|---|
habe es endlich geschafft!
Musste die eine Schleife umkehren und das Mesh noch Flippen um zum gewünschten Resultat zu kommen für die welche es interessiert: der fragliche Code sieht nun folgendermassen aus: BlitzBasic: [AUSKLAPPEN] AnzX=6 vielen Dank nochmal an Olli mfg beni |
||
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group