texture & custom mesh in Irrlicht (C++)

Fragen zu allen anderen Programmiersprachen.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

texture & custom mesh in Irrlicht (C++)

Beitrag von Nero »

Hiho,

Ich habe da mal ne frage ich habe mich vor ein paar tagen dazu entschieden mich mal mit C++ & Irrlicht zu beschäftigen.
Und da hab ich mir als kleines project einen Model Viewer fürs gute alte FF7 überlegt.
Ich habe es jetzt soweit das ich die Texturen importieren kann und auch die 3d models als mesh laden.
Nur bekomme ich es einfach nicht hin die texturen auf dem model zu positionieren
z.B. ich lade das model eines kopfes und habe nun 2 texturen für die augen dann habe
ich noch zu jeder texture deren XY coordinaten nur wie setze ich die?
Einfach die Texture dem node zuzuweisen bringt nix da wird das ganze node einfach nur fast schwarz.

Hier mal der code wie ich das model erstelle

Code: Alles auswählen

      	SMesh *newmesh = new SMesh();
        SMeshBuffer *meshbuffer = new SMeshBuffer();

        p_tmp *cords = new p_tmp[100];
        int cid = 1;
        int i = 0;
        for (int x = 0; x < p_fileHeader.NumGroups;x++)
        {

            for (int y = 0; y < groups[x].NumPolygons;y++)
            {
                rgb_quad pcolor;
                pcolor.blue = polygon_colors[y].blue;
                pcolor.green = polygon_colors[y].green;
                pcolor.red = polygon_colors[y].red;
                pcolor.alpha = polygon_colors[y].alpha;

                p_vertex v1, v2, v3, n1, n2, n3;
                v1.x = vertices[groups[x].VerticesStartIndex + polygons[y].vi_1].x;
                v1.y = vertices[groups[x].VerticesStartIndex + polygons[y].vi_1].y;
                v1.z = vertices[groups[x].VerticesStartIndex + polygons[y].vi_1].z;
                v2.x = vertices[groups[x].VerticesStartIndex + polygons[y].vi_2].x;
                v2.y = vertices[groups[x].VerticesStartIndex + polygons[y].vi_2].y;
                v2.z = vertices[groups[x].VerticesStartIndex + polygons[y].vi_2].z;
                v3.x = vertices[groups[x].VerticesStartIndex + polygons[y].vi_3].x;
                v3.y = vertices[groups[x].VerticesStartIndex + polygons[y].vi_3].y;
                v3.z = vertices[groups[x].VerticesStartIndex + polygons[y].vi_3].z;

                n1.x = normal_i_table[polygons[y].ni_1].x;
                n1.y = normal_i_table[polygons[y].ni_1].y;
                n1.z = normal_i_table[polygons[y].ni_1].z;
                n2.x = normal_i_table[polygons[y].ni_2].x;
                n2.y = normal_i_table[polygons[y].ni_2].y;
                n2.z = normal_i_table[polygons[y].ni_2].z;
                n3.x = normal_i_table[polygons[y].ni_3].x;
                n3.y = normal_i_table[polygons[y].ni_3].y;
                n3.z = normal_i_table[polygons[y].ni_3].z;

                meshbuffer->Vertices.push_back(S3DVertex(v1.x, v1.y, v1.z, n1.x, n1.y, n1.z, SColor(pcolor.alpha,pcolor.red,pcolor.green,pcolor.blue),0,0) );
                meshbuffer->Vertices.push_back(S3DVertex(v2.x, v2.y, v2.z, n2.x, n2.y, n2.z, SColor(pcolor.alpha,pcolor.red,pcolor.green,pcolor.blue),0,0) );
                meshbuffer->Vertices.push_back(S3DVertex(v3.x, v3.y, v3.z, n3.x, n3.y, n3.z, SColor(pcolor.alpha,pcolor.red,pcolor.green,pcolor.blue),0,0) );

                meshbuffer->recalculateBoundingBox();

                meshbuffer->Indices.push_back(i++);
                meshbuffer->Indices.push_back(i++);
                meshbuffer->Indices.push_back(i++);
            }

            if (groups[x].TextureNumber == 1)
            {
                    cords[cid].tex_id = groups[x].TextureNumber;
                    cords[cid].x = texcoords[groups[x].TexCoordStartIndex].v1;
                    cords[cid].y = texcoords[groups[x].TexCoordStartIndex].v2;
                    cid++;
            }

        }

        ISceneManager* smgr = irr_device->getSceneManager();
        newmesh->addMeshBuffer(meshbuffer);
        smgr->getMeshManipulator()->flipSurfaces(newmesh);

        ISceneNode *node = smgr->addMeshSceneNode(newmesh);
        node->setMaterialFlag(EMF_LIGHTING, false);

        if (texfound > 0)
        {
             //node->setMaterialTexture(0, (ITexture*) tex_arr[0].tex_id);
        }


Jemand ne idee wie ich die Augen auch auf die position der augen bekomme? :?