Форум программистов, компьютерный форум CyberForum.ru

загрузчик *.3DS - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Borland C++ на windows 7 /64 http://www.cyberforum.ru/cpp-beginners/thread510674.html
не могу найти себе Borland C++ на windows 7 /64 ,те что скачивал или платные или отказываются работать на моей системе...кто знает ,где можно скачать подходящую версию с кряком,или же как то еще решить эту проблему...
C++ Написание уравнения. Всё ли правильно? Доброго времени суток уважаемые! Запутался в написании уравнения, вроде все правильно, но программа зануляет ответ. Уравнение прикреплено. Я же записал в С++ как, S=(1-pow(x,i))*pow(x,i). Правильно или нет я сделал? http://www.cyberforum.ru/cpp-beginners/thread510634.html
C++ преобразовать одномерный массив состоящий из n вещественных элементов
преобразовать одномерный массив состоящий из n вещественных элементов,таким образом,чтобы сначала рассположились все эллементы отлич.от максимального не более чем на 20%,а потом все остальные
Класс студенческая группа, помогите с реализацией C++
Мне необходимо написать прогу, а я совсем запутался с этими классами... Помогите пожалуйста Описать класс "студенческая группа". предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку(например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующуюю работу с...
C++ Преобразовние Utf-16 <=> Utf-8 http://www.cyberforum.ru/cpp-beginners/thread510526.html
Вопрос казалось бы простой, но нормально ответа на него я пока не нашел. Нужно вывести строчку юникода(UTF-16) в файл с изменением кодировки. Знаю что можно при при wofstream::imbue задать вывод в win-1251 и cp-866. Но как сделть преобразование из utf-16 в utf-8 я найти не могу. Поэтому прошу вашей помощи. Желательно что нибудь кроссплатформенное, поэтому MultiByteToWideChar() не предлагать. Если...
C++ Требуется помощь в создании программы Я сейчас на такой стадии изучения C++, когда прочитать всё могу, а написать что-либо средней тяжести еще не умею. Нашел полезную вакансию "стажер-программист", но с меня требуется написать программку, что бы выяснить мой уровень знаний. Помогите, други добрые, кто чем может =) Не обязательно прога должна работать, главное что бы, так сказать, вектор мышления был правильный. С миру, как говорится,... подробнее

Показать сообщение отдельно
Subaru
Сообщений: n/a
01.11.2011, 16:21     загрузчик *.3DS
У меня есть приложение, которое позволяет считывать один(!) объект из 3ds, подскажите пожалуйста, что нужно исправить, чтобы из одного файла можно было считать несколько объектов.
В самом приложении написано "If you need to load meshes with advanced features as for example: multi objects, materials, lights and so on, you must insert other chunk parsers."
Но что такое "parsers" и как их добавить я не знаю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <io.h>
#include "3dsloader.h"
/**********************************************************
 *
 * FUNCTION Load3DS (obj_type_ptr, char *)
 *
 * This function loads a mesh from a 3ds file.
 * Please note that we are loading only the vertices, polygons and mapping lists.
 * If you need to load meshes with advanced features as for example: 
 * multi objects, materials, lights and so on, you must insert other chunk parsers.
 *
 *********************************************************/
 
char Load3DS (obj_type_ptr p_object, char *p_filename)
{
    int i; //Index variable
    
    FILE *l_file; //File pointer
    
    unsigned short l_chunk_id; //Chunk identifier
    unsigned int l_chunk_lenght; //Chunk lenght
 
    unsigned char l_char; //Char variable
    unsigned short l_qty; //Number of elements in each chunk
 
    unsigned short l_face_flags; //Flag that stores some face information
 
    if ((l_file=fopen (p_filename, "rb"))== NULL) return 0; //Open the file
 
    while (ftell (l_file) < filelength (fileno (l_file))) //Loop to scan the whole file 
    {
        //getche(); //Insert this command for debug (to wait for keypress for each chuck reading)
 
        fread (&l_chunk_id, 2, 1, l_file); //Read the chunk header
        printf("ChunkID: %x\n",l_chunk_id); 
        fread (&l_chunk_lenght, 4, 1, l_file); //Read the lenght of the chunk
        printf("ChunkLenght: %x\n",l_chunk_lenght);
 
        switch (l_chunk_id)
        {
            //----------------- MAIN3DS -----------------
            // Description: Main chunk, contains all the other chunks
            // Chunk ID: 4d4d 
            // Chunk Lenght: 0 + sub chunks
            //-------------------------------------------
            case 0x4d4d: 
            break;    
 
            //----------------- EDIT3DS -----------------
            // Description: 3D Editor chunk, objects layout info 
            // Chunk ID: 3d3d (hex)
            // Chunk Lenght: 0 + sub chunks
            //-------------------------------------------
            case 0x3d3d:
            break;
            
            //--------------- EDIT_OBJECT ---------------
            // Description: Object block, info for each object
            // Chunk ID: 4000 (hex)
            // Chunk Lenght: len(object name) + sub chunks
            //-------------------------------------------
            case 0x4000: 
                i=0;
                do
                {
                    fread (&l_char, 1, 1, l_file);
                    p_object->name[i]=l_char;
                    i++;
                }while(l_char != '\0' && i<20);
            break;
 
            //--------------- OBJ_TRIMESH ---------------
            // Description: Triangular mesh, contains chunks for 3d mesh info
            // Chunk ID: 4100 (hex)
            // Chunk Lenght: 0 + sub chunks
            //-------------------------------------------
            case 0x4100:
            break;
            
            //--------------- TRI_VERTEXL ---------------
            // Description: Vertices list
            // Chunk ID: 4110 (hex)
            // Chunk Lenght: 1 x unsigned short (number of vertices) 
            //             + 3 x float (vertex coordinates) x (number of vertices)
            //             + sub chunks
            //-------------------------------------------
            case 0x4110: 
                fread (&l_qty, sizeof (unsigned short), 1, l_file);
                p_object->vertices_qty = l_qty;
                printf("Number of vertices: %d\n",l_qty);
                for (i=0; i<l_qty; i++)
                {
                    fread (&p_object->vertex[i].x, sizeof(float), 1, l_file);
                    printf("Vertices list x: %f\n",p_object->vertex[i].x);
                    fread (&p_object->vertex[i].y, sizeof(float), 1, l_file);
                    printf("Vertices list y: %f\n",p_object->vertex[i].y);
                    fread (&p_object->vertex[i].z, sizeof(float), 1, l_file);
                    printf("Vertices list z: %f\n",p_object->vertex[i].z);
                }
                break;
 
            //--------------- TRI_FACEL1 ----------------
            // Description: Polygons (faces) list
            // Chunk ID: 4120 (hex)
            // Chunk Lenght: 1 x unsigned short (number of polygons) 
            //             + 3 x unsigned short (polygon points) x (number of polygons)
            //             + sub chunks
            //-------------------------------------------
            case 0x4120:
                fread (&l_qty, sizeof (unsigned short), 1, l_file);
                p_object->polygons_qty = l_qty;
                printf("Number of polygons: %d\n",l_qty); 
                for (i=0; i<l_qty; i++)
                {
                    fread (&p_object->polygon[i].a, sizeof (unsigned short), 1, l_file);
                    printf("Polygon point a: %d\n",p_object->polygon[i].a);
                    fread (&p_object->polygon[i].b, sizeof (unsigned short), 1, l_file);
                    printf("Polygon point b: %d\n",p_object->polygon[i].b);
                    fread (&p_object->polygon[i].c, sizeof (unsigned short), 1, l_file);
                    printf("Polygon point c: %d\n",p_object->polygon[i].c);
                    fread (&l_face_flags, sizeof (unsigned short), 1, l_file);
                    printf("Face flags: %x\n",l_face_flags);
                }
                break;
 
            //------------- TRI_MAPPINGCOORS ------------
            // Description: Vertices list
            // Chunk ID: 4140 (hex)
            // Chunk Lenght: 1 x unsigned short (number of mapping points) 
            //             + 2 x float (mapping coordinates) x (number of mapping points)
            //             + sub chunks
            //-------------------------------------------
            case 0x4140:
                fread (&l_qty, sizeof (unsigned short), 1, l_file);
                for (i=0; i<l_qty; i++)
                {
                    fread (&p_object->mapcoord[i].u, sizeof (float), 1, l_file);
                    printf("Mapping list u: %f\n",p_object->mapcoord[i].u);
                    fread (&p_object->mapcoord[i].v, sizeof (float), 1, l_file);
                    printf("Mapping list v: %f\n",p_object->mapcoord[i].v);
                }
                break;
 
            //----------- Skip unknow chunks ------------
            //We need to skip all the chunks that currently we don't use
            //We use the chunk lenght information to set the file pointer
            //to the same level next chunk
            //-------------------------------------------
            default:
                 fseek(l_file, l_chunk_lenght-6, SEEK_CUR);
        } 
    }
    fclose (l_file); // Closes the file stream
    return (1); // Returns ok
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru