Mesh Fläche erstellen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

dav3d

Betreff: Mesh Fläche erstellen

BeitragSa, Feb 25, 2006 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ich versuche gerade eine (Mesh) Fläche zu erstellen Blitz 3D, mitlerweile klappt alles wunderbar, nur die zuteilung der Triangles an die Vertices will nicht, muss ein Mathematischer Fehler sein, ich kann ihn aber nicht entdecken.

wäre sehr froh über jede Hilfe.


Code: [AUSKLAPPEN]
size = 20
Dim ve(size^2)

;Hier werden die Vertices erstellt und in den Array gespeichert
For z=1 To size
  For x=1 To size
  ind=x+z
    ve(ind) =AddVertex (surface,x,0,z)
  Next   
Next

;Hier werden den Vertices triangles zugeortnet
For tx=0 To size
  For ty=0 To size
    v0=ve(tx+1)
    v1=ve(tx+1+size)    ;Fehler müsste bei diesen Berechnungen sein
    v2=ve(tx+size)
    v3=ve(tx)
    AddTriangle surface,v0,v1,v2
    AddTriangle surface,v0,v2,v3
  Next
Next

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 25, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst erst mit AddVertex Punkte im drei dimensionalem Raum deffinieren, dann kannst du erst per AddTriangle die Punkte miteinander verbinden! Das Beispiel der OH ist dafür gut beschrieben... Was dir fehlt sind die Koordianten in 3D, also X,Y und Z als Parameter kannst du noch U,V mit angeben. Diese können dann X und Y -Koordinaten einer Textur sein.

EDIT: Ähhh, nee,.. Nehme alles zurrück! Du hast es echt umständlich gemacht! Du hast ein eindimensionales Array erstellt und willst in dieser zwei/drei Zahlen mit rein packen!?! Keine Ahnung wie das gehen soll... Pack doch die AddTriangle -Zeile mit in die obere Schleife... Warum benötigst du denn zusätzlich noch das Array?
  • Zuletzt bearbeitet von hectic am Sa, Feb 25, 2006 21:04, insgesamt einmal bearbeitet
 

Dreamora

BeitragSa, Feb 25, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ind ist falsch. Das müsste z * size + x sein.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

dav3d

BeitragSa, Feb 25, 2006 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Die vertices wurden doch oben schon erstellt. Un die coords sind doch relativ zum Zentrum des Meshs. und werden ya auch gesetzt. AddTriangle braucht keine coords, da sie doch durch die vertices ya schon klar sind.

dav3d

BeitragSa, Feb 25, 2006 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso denn "z*size+x"? es sind ya dort keine richtigen coords sondern nur indexnummer des Arrays wo die Vertices dann gespeichert werden. und ich habs trotzdem versucht. geht nicht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 25, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
david2 hat Folgendes geschrieben:
wieso denn "z*size+x"? es sind ya dort keine richtigen coords sondern nur indexnummer...


Wenn X=2 ist und Y=2 ist ergibt 4!
Wenn X=3 ist und Y=1 ist ergibt 4! Also werden Zahlen überschrieben!

dav3d

BeitragSa, Feb 25, 2006 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ups, haste recht, das löst vieleicht das problem, thx hab ich übersehen.

dav3d

BeitragSa, Feb 25, 2006 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Confused schon besser aber jetzt sieht man nur noch 2 triangles die ein rechteck ergeben.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 25, 2006 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Richtung eingehalten? Also rechts herum sieht man sie, links herum sieht man sie nur von der Rückseite... Oder ganz billig, EntityFX 16...
 

Dreamora

BeitragSa, Feb 25, 2006 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, das zweite Problem ist, das du falsche Daten ausliest für die Vertices. Ich empfehle dir, dir auf einem Blatt papier dein gitter aufzuzeichnen mit den Koordinaten und allem und dann nochmal zu schauen.
Denn die Indizes der Vertices stimmen nicht im geringsten und ohne eine IF innerhalb der Loop kanns auch nicht funktionieren, sobald die Index berechnungen bereinigt sind.

Übrigens: Du erzeugst von 1 to size also hat es wenig sinn wenn du von 0 to size ausliest.

wenn du eine direktere codehaltige hilfe möchtest: Such ma nach Meshterrain oder gittermesh ... Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 25, 2006 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm,.. Der Grundgedanke mit dem 0 to size und 1 to size ist ja in Ordnung... Nur in dem Beispiel verkehrt rum... Also beim erzeugen der Vertices muß einmal mehr durchgeführt werden als beim verbinden der Punkte. Gibt ja mehr davon...

dav3d

BeitragSa, Feb 25, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also einige sachen hatte ich schon bereits beseitigt, und ya die verticesauslesung ist müll(was auch das Problem ist). Nun das mit FX 16... was meinste damit? und ya hier ist der aktuelle code.


Code: [AUSKLAPPEN]
size = 20
Dim ve(size^2)


For z=0 To size-1
  For x=0 To size-1
    ind=(z*size)+x
    ve(ind) =AddVertex (surface,x,0,z)
  Next   
Next


For tx=0 To size
  v0=ve(tx+1)
  v1=ve(tx+1+size)
  v2=ve(tx+size)
  v3=ve(tx)
  AddTriangle surface,v0,v1,v2
  AddTriangle surface,v0,v2,v3
Next

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 25, 2006 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Die For-Schleifen müssen auch potentiert werden. Also For...size^2. Ausserdem muß in der tx-Schleife auch tx*size genommen werden... Oder du nimmst gleich ein zweidimensionales Array. Würde so einiges an Denkarbeit erleichtern...

EDIT: Ach, quatsch... Man, die Schleifen machen mich ganz kirre! Nimm mal ein 2D-Array... Und das mit EntityFX 16. Es macht Meshes auch von der Rückseite sichtbar. Ist zumindest Sinnvoll, wenn man nicht mehr klar kommt mit dem was man geschrieben hat. Und eine Fehlersuche erstmal um einiges leichter... Nacher sollte man dieses aber wieder deaktivieren...
 

Dreamora

BeitragSa, Feb 25, 2006 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
size = 20
Dim ve(size^2)


For z=0 To size
  For x=0 To size
    ind=(z*size)+x
    ve(ind) =AddVertex (surface,x,0,z)
  Next   
Next


For tz=0 To size -1
  for tx = 0 to size - 1
    v0=ve(tz*size + tx)
    v1=ve(tz*size + tx + 1)
    v2=ve((tz+1)*size + tx + 1)
    v3=ve((tz+1)*size + tx)
    AddTriangle surface,v0,v1,v2
    AddTriangle surface,v0,v2,v3
  next
Next



sollte so eigentlich stimmen, lediglich die AddTriangle Befehle könnten falsch sein, sollte aber auch stimmen Smile

tz*size + tx ist der aktuelle linke untere punkt im gitter
tz*size + tx + 1 ist der Punkt 1 rechts
(tz+1)*size + tx ist der Punkt eins drüber im Gitter
(tz+1)*size + tx + 1 ist der Punkt eins drüber und eins rechts im Gitter
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

dav3d

BeitragSa, Feb 25, 2006 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
1. bei size^2 entsteht ein fehler: "indexnumber out of bounds", hab deshlab size*18 für den moment. Das ist aber nicht das Problem.

2. 2D Arrays hatte ich am anfang vor, hab aber gemerkt das sass ganze viel umstentlicher und komplizieter ist.

3.EntityFX verwirrt irgendwie weil ich dann überall quadrate sehe wo keine sind, wireframe reicht.(vieleicht versteh ich auch nur was falsch)

4.Der Code Vohrschlag ist im grunde der Selbe wie der meine nur alles in 2 Schleifen aufgeteilt, was unnötig ist denk ich mal da meine version doch auch genau gleich funktioniert oder? (hab ihn trotzdem probiert geht aber nicht)

5.Were vieleicht gut wenn Ihr mal den Code ausprobieren würdet, dann wüsstet Ihr wie das ganze aussieht. (soneart 1x20 rechtecke anstelle von 20x20 quadrate).

6. Vielen dank aber für die laufende Hilfe, erfreut mich sehr Very Happy
 

Dreamora

BeitragSa, Feb 25, 2006 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry wenn du keine Lust hast selbst auch was zu machen, sollte ich den Thread glaub schliessen, wa?

Wir sind net hier um deine Codes zu schreiben.
Ich schrieb ja, die Vertexreihenfolge bei den triangles könnte falsch sein ...

Musst dir halt ein Blatt papier nehmen und es aufzeichnen und V0 - V3 beschriften und sehen was es macht und was es machen muss.

Dein Code kann eh net funktionieren, der geht nur 1 der size-1 zeilen durch, insofern hat der keine Chance überhaupt funktionieren zu können.

Und statt size^2 kann man auch size * size schreiben (sollte man für ^2 eh da es schneller ist)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

dav3d

BeitragSa, Feb 25, 2006 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hey sry so war das nicht gemeint, ich schreibe doch nur meine Meinung zu euern Vorschlägen damit es vorwerts geht. Ausserdem arbeite ich schon den ganzen Tag ununterbrochen an dem Ding. Es ist ya nicht alles falsch was Ihr sagt oder so.

Aber wenn Ihr das resultat des Codes mal ansehen würdet(falls nicht geschehen) dann könntet Ihr sehen das das ganze überhaupt nicht so herauskommt wie es anscheinend sollte.

-> Es gehen doch alle Zeilen und Spalten durch nicht nur eine da es ya heisst size^2 (also 400) mit ye 2 Triangles(dann 800) und bei der Erstellung sind es 20 Spalten mit je 20 Zeilen(400 Total). Das Ganze ist nun nicht ganz genau so korrekt aber glaub genug um zu sagen das das nicht mein Hauptproblem ist.

Wenn ich wirklich den Anschein gebe das ich den Kompleten Code verlangen und nichts selber mache dann wirklich sry. So ist das nun wirklich nicht gemeint, und ich bin ya dankbar für eure Hilfe.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 26, 2006 0:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics3D 400,400,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,4,-10

light=CreateLight()
RotateEntity light,60,0,0

mesh=CreateMesh()
surface=CreateSurface(mesh)

size=20
Dim ve(size,size)

For z=0 To size
 For x=0 To size
  ve(x,z)=AddVertex (surface,x,0,z)
 Next
Next

For z=0 To size-1
 For x=0 To size-1
  v0=ve(x,z)
  v1=ve(x,z+1)
  v2=ve(x+1,z+1)
  v3=ve(x+1,z)
  AddTriangle surface,v0,v1,v2
  AddTriangle surface,v0,v2,v3
 Next
Next

WireFrame True
RenderWorld

Flip
WaitKey
End
  • Zuletzt bearbeitet von hectic am So, Feb 26, 2006 1:06, insgesamt einmal bearbeitet
 

Dreamora

BeitragSo, Feb 26, 2006 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Und würdest du den Code den man dir liefern ansehen und zu verstehen versuchen, wüsstest du was du daran ändern musst, damit es stimmt.
Ich gebe Hinweise nicht aus sSpass und fertig funktionierenden Code gibts bei mir eigentlich nur bei 3 Zeilen Codes oder einem einzigen Befehl (programmieren ist learning by doing also soll man auch was tun müssen).

Da du das 1x20 Problem hast bei meinem Code haste den Hinweis definitiv nicht gelesen, sorry.

Aber damit das ganze geklärt ist:

Code: [AUSKLAPPEN]
graphics3d 800,600,0,2

mesh = createmesh()
surface = createsurface(mesh)

const size = 20
Dim ve(size * size)


For z = 0 To size
  For x = 0 To size
    ve(z*(size+1) + x) = AddVertex (surface,x,0,z)
  Next   
Next


For tz = 0 To size - 1
  For tx = 0 to size - 1
    v0=ve(tz*(size+1) + tx)
    v1=ve(tz*(size+1) + tx + 1)
    v2=ve((tz+1)*(size+1) + tx + 1)
    v3=ve((tz+1)*(size+1) + tx)
    AddTriangle surface,v0,v2,v1
    AddTriangle surface,v0,v3,v2
  Next
Next



cam = createcamera()
piv = createpivot()
positionentity piv, 10, 0, 10
positionentity cam, 10, 20, 10
pointentity cam,piv

wireframe true
While not keyhit(1)
   updateworld
   renderworld
   
   flip
Wend
end


*und hier sogar in einer form die man auch direkt ausprobieren kann*
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Feb 26, 2006 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dremora. Bei mir kommt 'Array index out of bounds' bei deinem Code bei eingeschalteten Debugger... Keine Ahnung warum auf ein eindimensionales Array soviel 'Wert' gelegt wird... Wenn man dann wenigstens ein BlitzArray nehmen würde, währen die ja schneller. Soweit ich weiß...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group