3D Entity-Nullpunkt Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benjamecho
Beiträge: 2
Registriert: 20.07.2006 21:38
Wohnort: Freiburg
Kontaktdaten:

3D Entity-Nullpunkt Problem

Beitrag von Benjamecho »

Hallo!

Bevor ich zu meiner Frage komme, muss ich kurz erwähnen, dass ich erst gestern angefangen habe PureBasic zu erlernen und außer mit PHP und etwas ActionScript keine Programmiererfahrungen habe, erst recht nicht mit 3D. Also entschuldigt bitte, wenn ich hier eventuell einige Begriffe durcheinanderbringe ;-)

Dank der tollen Hilfe und den vielen Beispieldateien habe ich es geschafft ein 400x400px JPG auf einem Mesh/Entity im Raum zu platzieren, außerdem eine per Maus auf der X-Achse rotierbare Kamera. Mein Ziel ist, mehrere solcher Objekte auf einem Kreis um die Kamera anzuordnen, so dass ich eine Art mausgesteuerte 3-D-Bildershow erhalte.

Nun zu meinem Problem:
Das/den Mesh (?) habe ich aus folgenden Daten erstellt:

Code: Alles auswählen

DataSection
  VertexID:
   ;Data.f x, y, z, Nx, Ny, Nz, U, V
    Data.f 0, 0, 0, 0, 0, -1, 0, 0
    Data.f 0, -400, 0, 0, 0, -1, 0, 1
    Data.f 400, -400, 0, 0, 0, -1, 1, 1
    Data.f 400, 0, 0, 0, 0, -1, 1, 0   
  FaceID:
    Data.w 0, 1, 2
    Data.w 0, 2, 3
EndDataSection
...der Nullpunkt ist in diesem Fall auch der Mittelpunkt meines Objektes. (Wofür die FaceID Daten stehen, weiß ich noch nicht - ich glaube, das ist aber eher nebensächlich.)
Mein Mesh, das Entity und Kameraposition habe ich folgendermaßen definiert/erzeugt:

Code: Alles auswählen

    AmbientColor(RGB(255, 255, 255))
    CreateCamera(0, 0, 0, 100, 100)
    CameraRange(0, 0.1, 2000)
    CameraLocate(0, 0, 0, -600.75)

    CreateMesh(5, -1)  
    SetMeshData(5, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, ?VertexID, 4)
    SetMeshData(5, #PB_Mesh_Face, ?FaceID, 2)
    
    ; lade Texturen
    LoadTexture(5, "ben.jpg")
    CreateMaterial(5, TextureID(5))
  
    CreateEntity(5, MeshID(5), MaterialID(5))
    EntityMaterial(5, MaterialID(5))  
    EntityLocate(5, 0, 0, -1527.887)
Was ich jetzt nicht verstehe ist, wenn ich langsam die Kamera durch Mausbewegung drehe und somit das Bild/Entity auf den Monitorrand zubewege, dass das Bild in dem Moment auf einen Schlag ausgeblendet wird, wenn der Nullpunkt (Mitte meines Bildes) den sichtbaren Bereich verlassen hat. Ich habe ein bißchen mit den Mesh-Daten gespielt und festgestellt, dass wenn ich den Nullpunkt an den linken Rand des Mesh setze, ich dann das Bild sauber auf der rechten Bildsschirmseite "rausfahren" kann, aber auf der linken Seite verschwindet es, sobald auch nur 1 Pixel des Bildes den Monitor verlassen hat.

Meine spontane Idee war, dass ich zwei Entities mit versetzten Nullpunkten übereinanderlege, aber das ist ja nun wirklich keine saubere Lösung.

Gibt es einen anderen Weg? Warum verschwindet das Objekt eigentlich auf einen Schlag?

Vielen Dank und viele Grüße aus Freiburg
Ben
Benjamecho
Beiträge: 2
Registriert: 20.07.2006 21:38
Wohnort: Freiburg
Kontaktdaten:

Beitrag von Benjamecho »

Ich habe nach weiteren Versuchen festgestellt, dass das Problem nicht auftritt, wenn ich das Mesh mit MilkShape erstelle und mit...

Code: Alles auswählen

LoadMesh(0, "square.mesh")
...lade.

Wenn ich ein Mesh laden kann und es dann keine Probleme gibt, dann muss es doch auch möglich sein, dass ich das Mesh auch direkt über die DataSection ohne zusätzliche .mesh-Datei erzeuge, oder?

Es soll ein einfaches Quadrat aus 4 Punkten werden und so soll es aussehen:

Code: Alles auswählen

0-----3
|   / |
| /   |
1-----2

vert   x   y z
0    -20  20 0
1    -20 -20 0
2     20 -20 0
3     20  20 0
Mein Versuch:

Code: Alles auswählen

    CreateMesh(0, -1)  
    SetMeshData(0, #PB_Mesh_Vertex | #PB_Mesh_UVCoordinate, ?VertexID, 4)
    SetMeshData(0, #PB_Mesh_Face, ?FaceID, 2)

[...]

DataSection
  VertexID:
   ;Data.f x, y, z, U, V
    Data.f -20, 20, 0, 0, 0
    Data.f -20, -20, 0, 0, 1
    Data.f 20, -20, 0, 1, 0
    Data.f 20, 20, 0, 1, 1
  FaceID:
    Data.w 1, 3, 0
    Data.w 1, 2, 3
EndDataSection
Leider tritt noch immer das Problem auf, dass mein Bild, welches ich darauf projeziere verschwindet, sobald der Mittelpunkt des Mesh den Bildschirm verlässt und außerdem ist das Bild nicht vernünftig auf dem Mesh ausgerichtet.

Hat jemand einen Tipp für mich?

Vielen Dank
Ben
amatt
Beiträge: 7
Registriert: 15.10.2006 01:45

Beitrag von amatt »

ich denke mal das die Mesh Daten falsch gesetzt sind.
Antworten