Problem mit CreateMesh...
Übersicht
BlitzBasic
Blitz3D
X0rBetreff: Problem mit CreateMesh... |
Antworten mit Zitat |
|
|---|---|---|
|
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? |
||
|
|
BladeRunnerModerator |
Antworten mit Zitat |
|---|---|---|
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 |
Antworten mit Zitat |
|
|---|---|---|
|
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 |
Antworten mit Zitat |
|---|---|---|
|
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 |
Antworten mit Zitat |
|
|---|---|---|
|
>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? 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). 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. |
||
|
|
hecticSieger des IS Talentwettbewerb 2006 |
Antworten mit Zitat |
|---|---|---|
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 |
Antworten mit Zitat |
|
|---|---|---|
|
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. |
||
|
|
hecticSieger des IS Talentwettbewerb 2006 |
Antworten mit Zitat |
|---|---|---|
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. |
||
| Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D | ||
X0r |
Antworten mit Zitat |
|
|---|---|---|
|
>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. |
||
Übersicht
BlitzBasic
Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group

