Seite 1 von 2

würfel mit anim80r erstellt und in mesh reingeschrieben

Verfasst: 07.11.2007 12:16
von super_castle
hallo, ich habe mit dem grafikprogramm anim8or ein würfel erzeugt und als "c" datei exportiert.
die daten "CubeVertices" und "CubeFacesIndexes" habe ich dann von hand eingegeben und es funktioniert. die daten habe ich aus dem exportierten datenpaket, siehe ganz unten.

nun meine frage an die fachleute :
wie kann ich die daten dort auslesen und hier : SetMeshData(0, #PB_Mesh_Vertex , ?CubeVertices , 24) reinsetzen.

ich habe schon eine inprovisierte textdatei angelegt, wo nur diese daten untereinander stehen.
wie kann man dann aus einer normalen textdatei die daten auslesen und davon ein mesh machen. dieses ist meine schwierigkeit

wenn mir mal einer zeigen könnte wie der meshkörper ohne die datazeilen erstellt wird, nur auslesen aus einer textdatei und dann der meshvariablen diese daten mitteilen , also hier die daten rein :
SetMeshData(0, #PB_Mesh_Vertex , ?CubeVertices , 24)
SetMeshData(0, #PB_Mesh_Face , ?CubeFacesIndexes , 12)


das beispielprogramm :

Code: Alles auswählen


If InitEngine3D() And InitSprite() 
  OpenWindow(0,0,0,640,480,"3D Mesh Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)  
    
    CreateMesh(0,1000) 
    SetMeshData(0, #PB_Mesh_Vertex , ?CubeVertices          , 24) 
    SetMeshData(0, #PB_Mesh_Face , ?CubeFacesIndexes      , 12) 

    CreateTexture(0,64,64) 
    StartDrawing(TextureOutput(0)) 
      Box(0,0,64,64,$00ff00)     
    StopDrawing() 
    CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0))) 
    
    ScaleEntity(0, 0.1, 0.1, 0.1) 
    
    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0,1.5,1.5,10) 
    
    Repeat    
      For a=0 To 360      
        RotateEntity(0, a, a, a)      
        RenderWorld() 
        FlipBuffers() 
      Next a
    Until KeyboardPushed(#PB_Key_Escape) Or Quit 
Else 
  MessageRequester("Error", "Cant init DirectX 3D Engine",0) 
EndIf 
  
End 
DataSection 

  CubeVertices: 
    Data.f -23.5955, -2.35955, -14.382
    Data.f 5.16854, -2.35955, -14.382
   Data.f 5.16854, 22.809, -14.382
   Data.f -23.5955, 22.809, -14.382
    Data.f -23.5955, -2.35955, 14.382
   Data.f -23.5955, 22.809, 14.382
   Data.f 5.16854, 22.809, 14.382
   Data.f 5.16854, -2.35955, 14.382
   Data.f -23.5955, -2.35955, -14.382
   Data.f -23.5955, 22.809, -14.382
   Data.f -23.5955, 22.809, 14.382
   Data.f -23.5955, -2.35955, 14.382
   Data.f 5.16854, -2.35955, -14.382
   Data.f 5.16854, -2.35955, 14.382
   Data.f 5.16854, 22.809, 14.382
   Data.f 5.16854, 22.809, -14.382
   Data.f -23.5955, 22.809, -14.382
   Data.f 5.16854, 22.809, -14.382
   Data.f 5.16854, 22.809, 14.382
    Data.f -23.5955, 22.809, 14.382
   Data.f -23.5955, -2.35955, -14.382
   Data.f -23.5955, -2.35955, 14.382
   Data.f 5.16854, -2.35955, 14.382
   Data.f 5.16854, -2.35955, -14.382
   
  CubeFacesIndexes: 
    Data.w 0, 2, 1
    Data.w 0, 3, 2
    Data.w 4, 6, 5
    Data.w 4, 7, 6
    Data.w 8, 10, 9
    Data.w 8, 11, 10
    Data.w 12, 14, 13
    Data.w 12, 15, 14
    Data.w 16, 18, 17
    Data.w 16, 19, 18
    Data.w 20, 22, 21
    Data.w 20, 23, 22
    
 
    
EndDataSection 

hier die datei von anim80r ,wie der würfel exportiert ist :

Code: Alles auswählen


// Export object "object01"
// Created with Anim8or 0.95

#include "Anim8orExport.h"

// cube01
static float cube01_coords[] = {
    -23.5955, -2.35955, -14.382,
    5.16854, -2.35955, -14.382,
    5.16854, 22.809, -14.382,
    -23.5955, 22.809, -14.382,
    -23.5955, -2.35955, 14.382,
    -23.5955, 22.809, 14.382,
    5.16854, 22.809, 14.382,
    5.16854, -2.35955, 14.382,
    -23.5955, -2.35955, -14.382,
    -23.5955, 22.809, -14.382,
    -23.5955, 22.809, 14.382,
    -23.5955, -2.35955, 14.382,
    5.16854, -2.35955, -14.382,
    5.16854, -2.35955, 14.382,
    5.16854, 22.809, 14.382,
    5.16854, 22.809, -14.382,
    -23.5955, 22.809, -14.382,
    5.16854, 22.809, -14.382,
    5.16854, 22.809, 14.382,
    -23.5955, 22.809, 14.382,
    -23.5955, -2.35955, -14.382,
    -23.5955, -2.35955, 14.382,
    5.16854, -2.35955, 14.382,
    5.16854, -2.35955, -14.382,
};

static float cube01_normals[] = {
    0, 0, -1,
    0, 0, -1,
    0, 0, -1,
    0, 0, -1,
    0, 0, 1,
    0, 0, 1,
    0, 0, 1,
    0, 0, 1,
    -1, 0, 0,
    -1, 0, 0,
    -1, 0, 0,
    -1, 0, 0,
    1, 0, 0,
    1, 0, 0,
    1, 0, 0,
    1, 0, 0,
    0, 1, 0,
    0, 1, 0,
    0, 1, 0,
    0, 1, 0,
    0, -1, 0,
    0, -1, 0,
    0, -1, 0,
    0, -1, 0,
};

static float cube01_texcoords[] = {
    0, 0,
    1, 0,
    1, 1,
    0, 1,
    0, 0,
    0, 1,
    1, 1,
    1, 0,
    0, 0,
    0, 1,
    0, 1,
    0, 0,
    1, 0,
    1, 0,
    1, 1,
    1, 1,
    0, 1,
    1, 1,
    1, 1,
    0, 1,
    0, 0,
    0, 0,
    1, 0,
    1, 0,
};

static int cube01_indices[] = {
    0, 2, 1,
    0, 3, 2,
    4, 6, 5,
    4, 7, 6,
    8, 10, 9,
    8, 11, 10,
    12, 14, 13,
    12, 15, 14,
    16, 18, 17,
    16, 19, 18,
    20, 22, 21,
    20, 23, 22,
};

static unsigned char cube01_matindices[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0,
};

static Anim8orMaterial cube01_materials[] = {
    {
        { 0.878, 0.878, 0.878, 1, }, // Ambient color
        { 0.878, 0.878, 0.878, 1, }, // Diffuse color
        { 1, 1, 1, 1, }, // Specular color
        { 0, 0, 0, 1, }, // Emissive color
        0.3, 0.7, 0.2, 0, 32, 1, // Ka, Kd, Ks, Ke, PhongSize, Brilliance
        "", // ambient texture
        "", // diffuse texture
        "", // specular texture
        "", // emissive texture
        "", // transparency texture
        "", // bumpmap texture
        "", // environment texture
    },
};

static struct Anim8orMesh cube01 = {
    "cube01", 24, 36, cube01_indices, cube01_matindices,
    cube01_coords, cube01_normals, cube01_texcoords, cube01_materials,
};

// Object object01
struct Anim8orObject object_object01 = {
    "object01", 1, // Num Meshes
    {
        &cube01,
    },
};

// End of file 

Verfasst: 07.11.2007 12:35
von bobobo

Verfasst: 07.11.2007 13:09
von super_castle
ich wollte die daten nicht als data-zeilen im programm haben wie in deiner demo angezeigt.
ich möchte die daten aus einer texdatei rauslesen und dann dem mesh zuweisen. das packe ich nicht.

dafür brauche i h einmal hilfe.

danke.

mfg

Verfasst: 07.11.2007 14:26
von bobobo
mach aus der Textdatei eine DataAbteilung und lies die als Include mit ein

SetMeshData() heisst vermutlich nicht ganz umsonst SetMeshDATA()

Verfasst: 07.11.2007 18:54
von super_castle
...SetMeshData() heisst vermutlich nicht ganz umsonst SetMeshDATA()...

na ich dachte es geht noch einfacher, das man die variablen direkt einbringen kann und nicht so contergan behaftet(geschädigt).

ich möchte die daten nicht zerstückeln sondern direkt einlesen aus der obigen datei in die vorgegebenen variablen. das mit data ist ein umstellen meiner grafikdatei, das wollte wiederum vermeiden doppeltes umwandeln.

also kein: exportiere....exportiere....data...


manchmal gibt es doch in purebasic direkte wege ohne die vorgegebenen basicbefehle und so etwas suche ich.

ich möchte hierfür " ?CubeVertices , 24" direkvariablen.

mfg

Verfasst: 07.11.2007 19:33
von bobobo
das klingt wie : "Wää .. Ich will aber ein Stück vom Mond abbeissen!" :mrgreen:



die Befehle bezüglich Mesh sind

CopyMesh
CreateMesh
FreeMesh
IsMesh
LoadMesh
MeshID
SetMeshData

was anderes gibt es leider nicht in PB
nicht mal ein Savemesh


m.M.n. ist es eh besser Meshes extern zu zimmern und als Meshes auch in
PB einzulesen. Konverter gibt es ja und 3D-Editoren (Blender und co) gibt
es auch.

Verfasst: 07.11.2007 20:21
von super_castle
wenn ich das so lese , bin ich der meinung, das irgendwie das interna einlesen von userdaten als meshdaten vom entwickler nicht eingebaut ist.
hat er hier sein sack samt seiner eier eingezogen (wenn die noch draussen wären, würde ich ihn diese rausreissen) oder ist es tatsächlich nicht gewollt.

kann kein fachmann hier auskunft geben über diese sache?


mfg

Verfasst: 07.11.2007 20:23
von bobobo
hier gibt's nur stümper :mrgreen:

Verfasst: 07.11.2007 20:35
von super_castle
.....hier gibt's nur stümper.....

das glaube ich nicht.
wenn ich manche asm-umsetzungen hier sehe, sind hier auch könner am werk.
der/diejenigen könnten ein evtl weiterhelfen.....fachleute wo seid ihr?

mfg

Verfasst: 07.11.2007 22:18
von super_castle
Beschreibung

Übergibt bestimmte Daten an das '#Mesh'. 'Data' ist die Speicheradresse der Daten, die im '#Mesh' abgelegt werden sollen. 'Datenlaenge' ist die Länge dieser Daten, abhängig von ihrem Typ.
wie bekomme ich die speicherdresse raus : 'Data' ist die Speicheradresse der Daten... steht in der beschreibung.

mfg