SmallVR - Virtual Reality Toolkit
Prof. Márcio Sarroglia Pinho
Utilizando Novos Formatos de Objetos

Construindo Novos Leitores de Objetos para a SmallVR

A construção de ambientes virtuais de qualidade passa necessariamente pela exibição de objetos complexos que em geral são construídos fora da biblioteca gráfica que gerencia o ambiente gráfico tridimensional, em modeladores gráficos como 3D Studio, AC3D, entre outros.

Para possiblitar a carga de objetos gerados neste tipo de modelador a SmallVR possui a classe SmVR_CObjFromFile. Esta classe, apresentada a seguir, possui apenas 3 métodos virtuais que permitem ler um objeto de disco, exibí-lo e destrui-lo.
 

class SmVR_CObjFromFile {

 public:
      virtual ~SmVR_CObjFromFile(void); // destroy the object
      virtual int Load(char *);  // load the object from disk
      virtual void Render(void); // render the object using OpenGL
};

Por ser uma classe virtual, esta classe, em si, não lê um objeto. Esta classe serve apenas de "molde" para a construção de uma classe derivada que, esta sim, irá ler e exibir o objeto.
Na distribuição padrão da SmallVR já está disponível a classe SmVR_COBJLoader que implementa um leitor de objetos no formato 3DS. Isto permite a utilizaçõa na SmallVR, de uma grande gama de objetos geométricos disponíveis na Internet.

Esta classe tem sua estrutura declarada no arquivo SmVR_CObjFromFile.h, que deve ser incluído no programa.
Veja a seguir a descrição desta classe:

// SmVR_COBJLoader.h

#ifndef _SmVR_COBJLoader_
#define _SmVR_COBJLoader_

#define USE_RAPID 1

#include "OBJ_Texture_Lib.h"
#include "RAPID.H"
#include "RAPID_model_Reader.h"

class SmVR_COBJLoader:public SmVR_CObjFromFile
{
    public:
        SmVR_COBJLoader (void);
        SmVR_COBJLoader (int rapid);

        virtual ~SmVR_COBJLoader();

        int Load(char *filename);
        void Render();
        void Remove();
        void GetBoundaries(SmVR_CPoint *min, SmVR_CPoint *max);
        void PrintEnvelope();
        void InvertNormalOrientation(void);
        //RAPID
        int Collided(SmVR_CObjFromFile *obj,SmVR_Matrix mtx1,SmVR_Matrix mtx2,int mode);
        RAPID_model* GetCollisionModel() {return &collisionModel;};
        TVertices *GetVertices() { return obj.Vertices; };
        void GetFace(int n, int v[3]);
        int GetNFaces() { return obj.nFaces;};
        char *GetFileName();


    private:
        TObject obj;
        RAPID_model collisionModel;
        int useRAPID;

};


 

Para utilizar um objeto lido de um arquivo OBJ, o programador deve tomar os seguintes passos: A partir deste momento este objeto possui as mesmas características dos objetos descritos até aqui.