Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2012, 12:28   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Opengl загрузка нескольких 3ds моделей

Всем доброго времени суток, нужна ваша помощь.
Имеется класс для загрузки 3дс модели, однако грузит только одну, не подскажите как загрузить 2 и более?
Вот код класса где происходит загрузка
Код:
// AppFrame.cpp: implementation of the CAppFrame class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
#include <GL/glut.h>
 
#include "3DObject.h"
#include "Window.h"
#include "AppFrame.h"
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
CAppFrame::CAppFrame(string Name, int PosX, int PosY, int DimX, int DimY,string filename) : 
                     CWindow(Name, PosX, PosY, DimX, DimY), Degree(0), mScale(100.0f)
{
    ModelloPtr = new C3DModel();
    ModelloPtr->ProcessFile(filename);
    cout << "File Loaded" << endl;
    int nobj = ModelloPtr->GetObjNumber();
    for (int i = 0; i < nobj; i++)
    {
        C3DObject *ObjectPtr;
        ObjectPtr = ModelloPtr->GetObject(i);
        ObjectPtr->UseTrasform();
    }
 
 
 
}
 
void CAppFrame::Reshape(int DimX, int DimY)
{
    if (DimY==0)    DimY=1;
 
    glViewport(0, 0, DimX, DimY);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
 
    // Aspect ratio of the window
    gluPerspective(45.0f,(GLfloat)DimX/(GLfloat)DimY,0.1f,100.0f);
 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
void CAppFrame::Display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,-12.0f,-20.0f);
 
    glRotatef(280, 1, 0, 0);
 
    int nobj = ModelloPtr->GetObjNumber();
 
    glColor3f(1.0f, 1.0f, 1.0f);
    for (int i = 0; i < nobj; i++)
    {
        C3DObject *ObjectPtr;
        ObjectPtr = ModelloPtr->GetObject(i);
        int nfaces = ObjectPtr->faces.size();
        for(int face = 0; face < nfaces; face++)
        {
            C3DFace *FacePtr;
            FacePtr = &ObjectPtr->faces[face];
            int A, B, C;
            A = FacePtr->A;
            B = FacePtr->B;
            C = FacePtr->C;
            glBegin(GL_TRIANGLES);
            glColor3f(20,100,0);
                glVertex3f( ObjectPtr->vertices[A].x/mScale, ObjectPtr->vertices[A].y/mScale, ObjectPtr->vertices[A].z/mScale);
                glVertex3f( ObjectPtr->vertices[B].x/mScale, ObjectPtr->vertices[B].y/mScale, ObjectPtr->vertices[B].z/mScale);
                glVertex3f( ObjectPtr->vertices[C].x/mScale, ObjectPtr->vertices[C].y/mScale, ObjectPtr->vertices[C].z/mScale);
            glEnd();
            /*glBegin(GL_LINES);
                glVertex3f( ObjectPtr->vertices[B].x/mScale, ObjectPtr->vertices[B].y/mScale, ObjectPtr->vertices[B].z/mScale);
                glVertex3f( ObjectPtr->vertices[C].x/mScale, ObjectPtr->vertices[C].y/mScale, ObjectPtr->vertices[C].z/mScale);
            glEnd();
            glBegin(GL_LINES);
                glVertex3f( ObjectPtr->vertices[C].x/mScale, ObjectPtr->vertices[C].y/mScale, ObjectPtr->vertices[C].z/mScale);
                glVertex3f( ObjectPtr->vertices[A].x/mScale, ObjectPtr->vertices[A].y/mScale, ObjectPtr->vertices[A].z/mScale);
            glEnd();*/
        }
    }
 
    glutSwapBuffers();
}
 
void CAppFrame::Idle()
{
    Degree += 0.25f;
    if (Degree >= 360)
        Degree = 0;
    Display();
}
 
void CAppFrame::Init()
{
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
 
void CAppFrame::Keyboard(unsigned char key, int x, int y)
{
    if (key == '-')
        mScale -= 1.0f;
    if (key == '+')
        mScale += 1.0f;
}
И собственно сам вызов
Код:
CViewControl Control("Manager");
            CAppFrame Finestra2("Demo", 0, 0, 400, 400,"test.3ds");
            Control.AppendWindow(&Finestra2);
            Control.Start();
так же на всякий случай приложу полностью весь класс загрузчика.
Вложения
Тип файла: rar 3dsLoader.rar (8.01 Мб, 101 просмотров)
revaldo666 вне форума Ответить с цитированием
Старый 17.07.2012, 14:47   #2
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

С этим разобрался сам, в классе не закрывался поток.
А вот может кто знает как загруженные модели сохранить обратно в 3ds файл?
revaldo666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка Windows с нескольких дисков. Freewill Windows 2 25.04.2011 19:16
3ds Max -> OpenGL -> Code Foxtrot_1 Общие вопросы C/C++ 0 10.10.2010 18:36
DirectX. Загрузка 3d моделей из .3ds файла _-Re@l-_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 01.08.2010 15:57
Наложение нескольких текстур в OpenGL Krechet Мультимедиа в Delphi 4 06.05.2010 15:30
Загрузка моделей в 3ds формате Cheb Мультимедиа в Delphi 4 01.02.2009 15:36