Problem mit CreateMesh...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

X0r

Betreff: Problem mit CreateMesh...

BeitragFr, Okt 31, 2008 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal die Mesh-Informationen:

Code: [AUSKLAPPEN]
24
-1.0
1.0
-1.0
####################
1.0
1.0
-1.0
####################
1.0
-1.0
-1.0
####################
-1.0
-1.0
-1.0
####################
1.0
1.0
-1.0
####################
1.0
1.0
1.0
####################
1.0
-1.0
1.0
####################
1.0
-1.0
-1.0
####################
1.0
1.0
1.0
####################
-1.0
1.0
1.0
####################
-1.0
-1.0
1.0
####################
1.0
-1.0
1.0
####################
-1.0
1.0
1.0
####################
-1.0
1.0
-1.0
####################
-1.0
-1.0
-1.0
####################
-1.0
-1.0
1.0
####################
-1.0
1.0
1.0
####################
1.0
1.0
1.0
####################
1.0
1.0
-1.0
####################
-1.0
1.0
-1.0
####################
-1.0
-1.0
-1.0
####################
1.0
-1.0
-1.0
####################
1.0
-1.0
1.0
####################
-1.0
-1.0
1.0
####################
12
0
1
2
###################
0
2
3
###################
4
5
6
###################
4
6
7
###################
8
9
10
###################
8
10
11
###################
12
13
14
###################
12
14
15
###################
16
17
18
###################
16
18
19
###################
20
21
22
###################
20
22
23
###################
24
0.0
0.0
1.0
###################
0.0
0.0
1.0
###################
0.0
0.0
1.0
###################
0.0
0.0
1.0
###################
-1.0
0.0
0.0
###################
-1.0
0.0
0.0
###################
-1.0
0.0
0.0
###################
-1.0
0.0
0.0
###################
0.0
0.0
-1.0
###################
0.0
0.0
-1.0
###################
0.0
0.0
-1.0
###################
0.0
0.0
-1.0
###################
1.0
0.0
0.0
###################
1.0
0.0
0.0
###################
1.0
0.0
0.0
###################
1.0
0.0
0.0
###################
0.0
-1.0
0.0
###################
0.0
-1.0
0.0
###################
0.0
-1.0
0.0
###################
0.0
-1.0
0.0
###################
0.0
1.0
0.0
###################
0.0
1.0
0.0
###################
0.0
1.0
0.0
###################
0.0
1.0
0.0
###################
24
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################
0.0
0.0
0.0
0.0
###################
1.0
0.0
1.0
0.0
###################
1.0
1.0
1.0
1.0
###################
0.0
1.0
0.0
1.0
###################


Nun der Code zum laden des Meshes:
Code: [AUSKLAPPEN]

file=ReadFile("mesh.txt")
If file



Graphics3D 1024,768
SetBuffer BackBuffer()
cam = CreateCamera()
MoveEntity cam, 0,0,-7



mesh=CreateMesh()
surf=CreateSurface(mesh)


;Vertices
vnum$=ReadLine(file)
vtnum=vnum$
vtnum=vtnum-1

Dim vertex(vtnum)

For a=0 To vtnum
vertex(a) = AddVertex (surf,ReadLine(file),ReadLine(file),ReadLine(file),0 ,0)
ReadLine(file)
Next


;Tris

triss$=ReadLine(file)
tris=triss$
tris=tris-1

For t=0 To tris
AddTriangle (surf,vertex(ReadLine(file)),vertex(ReadLine(file)),vertex(ReadLine(file)))
ReadLine(file)
Next


nnums$=ReadLine(file)
nnum=nnums
nnum=nnum-1


;Normals

For a=0 To nnum
VertexNormal(surf,vertex(a),ReadLine(file),ReadLine(file),ReadLine(file))
ReadLine(file)
Next


;Texture coords
uvcoordss$=ReadLine(file)
uvcoords=uvcoordss$
uvcoords=uvcoords-1


For a=0 To uvcoords
VertexTexCoords(surf,vertex(a),ReadLine(file),ReadLine(file),0)
VertexTexCoords(surf,vertex(a),ReadLine(file),ReadLine(file),1)
ReadLine(file)
Next

UpdateNormals(mesh)

EntityTexture mesh,LoadTexture("stroh_3.jpg")


Repeat
TurnEntity mesh,0,1,0
RenderWorld()
Flip
Until KeyHit(1)

CloseFile(file)
End
EndIf



Das Problem ist, dass wenn das mesh texturiert ist und sich dreht, dass das dann irgendwie komisch aussieht...
Was mache ich falsch?

BladeRunner

Moderator

BeitragFr, Okt 31, 2008 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du mit 'komisch' meinst dass Teile nicht sichtbar sind würde ich mal checken ob alle Vertices in der selben Rotationsrichtung erstellt wurden. flipmesh könnte da auch schon helfen (um zu sehen ob das Problem da liegt).
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

X0r

BeitragSa, Nov 01, 2008 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, nein, das mesh ist schon sichtbar. Hab das Problem auch in nem anderen Forum angesprochen.
Das Problem liegt an folgender Zeile:
>AddTriangle (surf,vertex(ReadLine(file)),vertex(ReadLine(file)),vertex(ReadLine(file)))
Blitz scheint die Parameter von hinten aus zu bearbeiten. In diesem Fall halt ne umgekehrte Index-Reihenfolge.

Lunatix

BeitragSa, Nov 01, 2008 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dus solltest "irgendwie komisch" mal beschreiben, dann kann man dir sicher besser helfen. Mache mit [Druck] einen Blidschirmscreenshot und lade diesen im Archiv hoch und stelle es als Bild hier rein.

Allerdings ist ReadLine auch nicht unbedingt für Integer gedacht. Wie hast du die Datei erstellt? Hast du das Modell mit einem blitzbasic programm nach Surfaces & Vertices durchsucht und diese dann in eine Datei gespeichert? Oder hast du sie selber geschrieben?

Auch sieht folgender Abschnitt komisch aus :

Code: [AUSKLAPPEN]
1.0
####################
12
0
1
2
###################


12? Aus 4 Positionen kann man keine Triangle machen. Vielleicht liest du dadurch den kompletten Trianglecode falsch ein?
Allerdings, speicherst du die Vertices nacheinander, kannst du auch folgendes machen:

Du ermittelst mit CountSurfaces die Sufaces des Meshes.
Du ermittelst mit CountTriangles die Triangles jedes dieser surfaces.
Und nun gehst du die Triangles durch und für jede Triangle kannst du 3 Vertices (Per TriangleVertex ermittelt) in die Datei mit WriteInt schreiben. Du hast nun v0,v1,v2 Blöcke, die du direkt einlesen und auch gleich Verbinden kannst.
Dabei kann nichts mehr schiefgehen =)
 

X0r

BeitragSa, Nov 01, 2008 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
>us solltest "irgendwie komisch" mal beschreiben, dann kann man dir sicher besser helfen. Mache mit [Druck] einen Blidschirmscreenshot und lade diesen im Archiv hoch und stelle es als Bild hier rein.
Ich hab doch den code gepostet. Wozu noch extra nen Screenshot? Rolling Eyes
Und außerdem ist das Problem schon gelöst...

Zitat:
Allerdings ist ReadLine auch nicht unbedingt für Integer gedacht. Wie hast du die Datei erstellt? Hast du das Modell mit einem blitzbasic programm nach Surfaces & Vertices durchsucht und diese dann in eine Datei gespeichert? Oder hast du sie selber geschrieben?

Natürlich ist ReadLine nicht für Integer gedacht. Wo lese ich denn bitte Integer-Werte mit Readline aus? Die Datei liegt als ASCII vor(Und das hat auch seinen Grund). Wink

Selber geschrieben? Ne, so viel Zeit habe ich nicht. Hab natürlich ein Programm für geschrieben.

Zitat:
12? Aus 4 Positionen kann man keine Triangle machen. Vielleicht liest du dadurch den kompletten Trianglecode falsch ein?

Ja 12, die steht nämlich für die Anzahl der Triangles. Dann folgen die 3 Vertex-Index-Werte.

Wie schon gesagt, lag das Problem an folgendem Code:
>>AddTriangle (surf,vertex(ReadLine(file)),vertex(ReadLine(file)),vertex(ReadLine(file)))

Denn der BlitzBasic Compiler bearbeitet die Parameter von rechts nach links. Und so kommts dann, dass daraus ne umgekehrte Index-Reihenfolge entsteht und dann siehts logischer Weise auch komisch aus.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Nov 01, 2008 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Tatsächlich werden die Koordinaten bei AddVertex von hinten nach vorne gelesen und verarbeitet. Ich glaube mich auch zu erinnern, dass dieses Thema vor Jahren mal angesprochen wurde.

BeweisCode: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

Local Path$="E:\"
Local File%
Local Mesh%=CreateMesh()
Local Face%=CreateSurface(Mesh)
Local V0%,V1%,V2%

File=WriteFile(Path+"test.txt")
WriteLine File,"-1": WriteLine File,"+2"
WriteLine File,"+3": WriteLine File,"+4"
WriteLine File," 0": WriteLine File,"-5"
CloseFile(File)

File=ReadFile(Path+"test.txt")
Print "v0: "+ReadLine(File)+" "+ReadLine(File)
Print "v1: "+ReadLine(File)+" "+ReadLine(File)
Print "v2: "+ReadLine(File)+" "+ReadLine(File)
CloseFile(File)

File=ReadFile(Path+"test.txt")
V0=AddVertex(Face,ReadLine(File),ReadLine(File),4)
V1=AddVertex(Face,ReadLine(File),ReadLine(File),4)
V2=AddVertex(Face,ReadLine(File),ReadLine(File),4)
CloseFile(File)

Print ""
Print "v0: "+VertexX(Face,V0)+" "+VertexY(Face,V0)
Print "v1: "+VertexX(Face,V1)+" "+VertexY(Face,V1)
Print "v2: "+VertexX(Face,V2)+" "+VertexY(Face,V2)

WaitKey
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

X0r

BeitragSa, Nov 01, 2008 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das hat mit der Funktion nix zu tun, das liegt ganz einfach am Compiler. Denn schreibt man:
x.f=ReadInt(file)
y.f=ReadInt(file)
z.f=ReadInt(file)
AddVertex(surf,x,y,z)

dann funktioniert es perfekt.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Nov 01, 2008 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist doch genau das was ich sage. Blitz3D bearbeitet den Befehl AddVertex von hinten nach vorne, da ReadLine nun mal nacheinander die Zeilen einliesst, ist es eben der Beweis dafür. Und das deine Methode funktioniert, ist letztendlich das, worauf ich hinaus wollte. Man muß entweder die Speicherreihenfolge dann auch in Z,Y,X abspeichern, oder man speichert sich die Werte in temporären Variablen die man dann eben einsetzt.

Man muß doch nicht jeden kleinen Tritt in den Hintern mit komplett fertigen Code begleiten. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

X0r

BeitragSa, Nov 01, 2008 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
>Tatsächlich werden die Koordinaten bei AddVertex von hinten nach vorne gelesen und verarbeitet

So kann aber ganz leicht ein Missverständnis entstehen. Denn du hast gesagt, dass Blitz3D den Befehl AddVertex von hinten nach vorne abarbeite.
Der Compiler macht das aber generell bei allen Funktionen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group