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

Распарсить файл 3Dmax - C++

Восстановить пароль Регистрация
 
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
25.03.2014, 13:55     Распарсить файл 3Dmax #1
Всем привет.

В 3DMax есть возможность сохранять модели в формате obj это тоже самое что и txt.

Вот пример элементарного объекта с текстурой.

Возникло два вопроса.

Первый.

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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//-----------------------------------------------------------------------------------
 
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 23.03.2014 06:46:18
 
mtllib Box.mtl
 
#
# object Box01
#
 
v  -0.5000 0.0000 0.5000
v  -0.5000 0.0000 -0.0000
v  0.0000 0.0000 -0.0000
v  0.0000 0.0000 0.5000
v  0.5000 0.0000 -0.0000
v  0.5000 0.0000 0.5000
v  -0.5000 0.0000 -0.5000
v  0.0000 0.0000 -0.5000
v  0.0000 2.0000 0.5000
v  0.5000 2.0000 0.5000
v  0.5000 2.0000 -0.0000
v  0.0000 2.0000 -0.0000
v  -0.5000 2.0000 -0.0000
v  0.0000 2.0000 -0.5000
v  -0.5000 2.0000 -0.5000
v  0.0000 0.5000 0.5000
v  -0.5000 0.5000 0.5000
v  0.5000 0.5000 0.5000
v  0.0000 1.0000 0.5000
v  0.5000 1.0000 0.5000
v  0.5000 0.5000 -0.0000
v  0.5000 1.0000 -0.0000
v  -0.5000 0.5000 -0.5000
v  0.0000 0.5000 -0.5000
v  0.0000 1.0000 -0.5000
v  -0.5000 1.0000 -0.5000
v  -0.5000 0.5000 -0.0000
v  -0.5000 1.0000 -0.0000
v  0.0000 1.0000 -0.0000
v  0.0000 0.5004 -0.0000
# 30 vertices
 
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 -0.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 -0.0000
vn 0.7071 0.0000 -0.7071
vn -0.0004 1.0000 0.0004
# 8 vertex normals
 
vt 0.5464 0.5464 0.0000
vt 0.5464 0.4206 0.0000
vt 0.6723 0.4206 0.0000
vt 0.6723 0.5464 0.0000
vt 0.7981 0.4206 0.0000
vt 0.7981 0.5464 0.0000
vt 0.5464 0.2947 0.0000
vt 0.6723 0.2947 0.0000
vt 0.6723 0.0100 0.0000
vt 0.7981 0.0100 0.0000
vt 0.7981 0.1359 0.0000
vt 0.6723 0.1359 0.0000
vt 0.5464 0.1359 0.0000
vt 0.6723 0.2617 0.0000
vt 0.5464 0.2617 0.0000
vt 0.0100 0.4206 0.0000
vt 0.1359 0.4206 0.0000
vt 0.1359 0.5464 0.0000
vt 0.0100 0.5464 0.0000
vt 0.0100 0.2947 0.0000
vt 0.1359 0.2947 0.0000
vt 0.2617 0.4206 0.0000
vt 0.2617 0.2947 0.0000
vt 0.5134 0.2947 0.0000
vt 0.5134 0.4206 0.0000
vt 0.0100 0.7053 0.0000
vt 0.1359 0.7053 0.0000
vt 0.1359 0.8311 0.0000
vt 0.0100 0.8311 0.0000
vt 0.2617 0.8311 0.0000
vt 0.2617 0.7053 0.0000
vt 0.5134 0.7053 0.0000
vt 0.5134 0.8311 0.0000
vt 0.0100 0.8641 0.0000
vt 0.1359 0.8641 0.0000
vt 0.1359 0.9900 0.0000
vt 0.0100 0.9900 0.0000
vt 0.2617 0.9900 0.0000
vt 0.2617 0.8641 0.0000
vt 0.5134 0.8641 0.0000
vt 0.5134 0.9900 0.0000
vt 0.0100 0.1359 0.0000
vt 0.1359 0.1359 0.0000
vt 0.1359 0.2617 0.0000
vt 0.0100 0.2617 0.0000
vt 0.0100 0.0100 0.0000
vt 0.1359 0.0100 0.0000
vt 0.2617 0.2617 0.0000
vt 0.2617 0.1359 0.0000
vt 0.5134 0.1359 0.0000
vt 0.5134 0.2617 0.0000
vt 0.6723 0.7383 0.0000
vt 0.9240 0.7383 0.0000
vt 0.9240 0.8641 0.0000
vt 0.6723 0.8641 0.0000
vt 0.9240 0.7053 0.0000
vt 0.6723 0.7053 0.0000
vt 0.6723 0.5794 0.0000
vt 0.9240 0.5794 0.0000
vt 0.2617 0.5794 0.0000
vt 0.5134 0.5794 0.0000
vt 0.1359 0.5794 0.0000
vt 0.0100 0.5794 0.0000
vt 0.5465 0.8641 0.0000
vt 0.5464 0.7383 0.0000
vt 0.5464 0.7053 0.0000
vt 0.5465 0.5794 0.0000
vt 0.9322 0.1359 0.0000
vt 0.8064 0.1359 0.0000
vt 0.8064 0.0100 0.0000
vt 0.9322 0.0100 0.0000
# 71 texture coords
 
g Box01
usemtl 03___Default
s 2
f 1/1/1 2/2/1 3/3/1 4/4/1 
f 4/4/1 3/3/1 5/5/1 6/6/1 
f 2/2/1 7/7/1 8/8/1 3/3/1 
s 4
f 9/9/2 10/10/2 11/11/2 12/12/2 
f 13/13/2 12/12/2 14/14/2 15/15/2 
s 8
f 4/16/3 16/17/3 17/18/3 1/19/3 
f 6/20/3 18/21/3 16/17/3 4/16/3 
f 19/22/3 20/23/3 10/24/3 9/25/3 
s 16
f 5/26/4 21/27/4 18/28/4 6/29/4 
f 20/30/4 22/31/4 11/32/4 10/33/4 
s 32
f 7/34/5 23/35/5 24/36/5 8/37/5 
f 25/38/5 26/39/5 15/40/5 14/41/5 
s 64
f 2/42/6 27/43/6 23/44/6 7/45/6 
f 1/46/6 17/47/6 27/43/6 2/42/6 
f 26/48/6 28/49/6 13/50/6 15/51/6 
s off
f 19/52/6 9/53/6 12/54/6 29/55/6 
f 13/56/3 28/57/3 29/58/3 12/59/3 
f 25/60/7 14/61/7 11/32/7 22/31/7 
f 11/11/2 14/14/2 12/12/2 
f 24/62/7 21/27/7 5/26/7 8/63/7 
f 3/3/1 8/8/1 5/5/1 
s 8
f 20/23/3 19/22/3 16/17/3 18/21/3 
s 16
f 22/31/4 20/30/4 18/28/4 21/27/4 
s 32
f 26/39/5 25/38/5 24/36/5 23/35/5 
s 64
f 28/49/6 26/48/6 23/44/6 27/43/6 
s off
f 25/60/7 22/31/7 21/27/7 24/62/7 
f 19/52/6 29/55/6 30/64/6 16/65/6 
f 29/58/3 28/57/3 27/66/3 30/67/3 
f 30/68/8 27/69/8 17/70/8 16/71/8 
# 27 polygons - 2 triangles
 
//-----------------------------------------------------------------------------------
Естественной мне нужно написать для этого парсер. Я знаю за что какие переменные тут отвечают и что значат символы F V VT и т.д. Понятно что никто мне не будет писать готовый код для этого, да и не к чему это примитивная модель тут даже не используется доп материал.

Проблема в том что я даже приблизительно не понимаю как это все реализовать, я конечно понимаю что тут нужны циклы, функции для работы со строками и так далее.

Возникает вопрос, какую книгу мне нужно прочитать чтобы приблизительно понимать что нужно сделать и использовать для всего этого?



Второй.
Я написал частично прогу обшаря пол инета и найдя функцию разбивки строк на слова.


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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
// Функция разбивает строку на слова, основываясь на строке разделителей
// Принимаемые параметры:
//  str - строка, которую необходимо разбить на слова
//  delims - строку, содержащая разделители
// Возвращаемое значение:
//  динамически выделенный массив слов (заканчивающийся нулевым указателем)
 
using namespace std;
 
char **split_string(const char *str, const char *delims)
{
    // Предварительно считаем длину входной строки
    size_t str_len = strlen(str);
 
    // Счётчик слов в предложении
    size_t words_cntr = 1;
 
    // Результирующий массив слов
    char **words;
 
    // Счётчики циклов
    size_t i, j;
    size_t w;
 
    // Считаем количество слов
    for (i = 0; i < str_len; ++i)
        // Если очередной символ входной строки совпал с одним из разделителей
        if (strchr(delims, str[i]) != NULL)
            // Увеличиваем счётчик слов
            ++words_cntr;
 
    // Выделяем память под массив слов (размером количество слов + 1 элемент для
    // нулевого указателя - конца массива слов)
    words = (char **)malloc((words_cntr + 1) * sizeof(char *));
 
    // Сразу устанавливаем ограничитель массив слов
    words[words_cntr] = NULL;
 
    // Идём по всем символам строки
    for (i = 0, w = 0; i < str_len + 1; ++i)
    {
        // j служит для указания на конеч слова, i - на начало
        // Поиск конца слова начинаем с его начала
        j = i;
 
        // Пока не достигли конца строки или не нашли разделитель
        while (str[j] != '\0' && strchr(delims, str[j]) == NULL)
            // Говорим, что очередной символ строки входит в очередное слово
            ++j;
 
        // Выделяем память под очередное слово
        words[w] = (char *)malloc((j - i + 1) * sizeof(char));
 
        // Копируем слово в выделенную память
        strncpy(words[w], str + i, j - i);
        // Ограничиваем слово нуль-терминатором
        words[w++][j - i] = '\0';
 
        // Продолжаем поиск следующего слова с конца только что обработанного
        i = j;
    }
 
    // Возвращаем сформированный массив слов
    return words;
}
 
// Функция просто очищает память, выделенную под массив слов
void destroy_words(char **words)
{
    size_t i = 1;
 
    while (words[i - 1] != NULL)
        free(words[i++]);
 
    free(words);
}
 
int main(void)
{
    char str[1000];
 
    char LINE[1000];
 
    double f;
 
    ifstream in_file("D:\\Hedra\\Obj\\Box1.txt",ios::in);
 
    while (!in_file.eof())
    {
 
    in_file.getline(LINE,1000);
    
    strcpy(str,LINE);
 
    const char *delims = " ";
 
    char **words = split_string(str, delims);
    
    size_t i;
    
    for (i = 0; words[i] != NULL; ++i)
    {
 
    //sscanf(words[i], "%4lf", &f);
 
    //printf("%.4lf\n", f);
 
    printf("%s\n", words[i]);
 
    }
 
    destroy_words(words);
 
    }
 
    system("pause");
 
    return 0;
}


Начал с малого и использовал простейший пример.

v -0.5000 -0.0000 -0.5000
v -0.5000 -0.0000 -0.0000
v -0.0000 -0.0000 -0.0000
v -0.0000 -0.0000 -0.5000

все выводится корректно. Но стоит начать использовать чтобы преобразовать string в double.

//sscanf(words[i], "%4lf", &f);

//printf("%.4lf\n", f);

как начинает выводить то 3 значения то вообще ничего не выводит тоже самое и с функцией atof.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
25.03.2014, 14:13     Распарсить файл 3Dmax #2
C++
1
2
3
char c1,c2;
double x[3];
sscanf(words[i],"%c%lf%lf%lf%c",&c1,&x[0],&x[1],&x[2],&c2)
Считываем один символ в переменную с1, потом 3 числа в массив X,
потом символ конца строки в переменную с2.
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
26.03.2014, 04:52  [ТС]     Распарсить файл 3Dmax #3
Добавил функцию и немного дописал код.

функция.

Если в функции раскомментировать printf все выводится коректно. В зависимости от того что закоментил, а что нет.

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
double get_params(const char *str)
{
 
    char T_WORDS[1000];
 
    strcpy(T_WORDS, str);
 
    size_t i;
 
    double f;
 
    if(*T_WORDS !='\0')
 
    {
        if (  !strtok(T_WORDS,"v") | !strtok(T_WORDS,"vn"))
        {
            //printf("%s\n\n",T_WORDS);
        }
        else if(!strtok(T_WORDS,"#") | !strtok(T_WORDS,"vertices") | !strtok(T_WORDS,"vertex")  | !strtok(T_WORDS,"normals"))
        {
            //printf("%s\n\n",T_WORDS);
        }
            else
            {
 
            f = atof(T_WORDS);
 
            //printf("%.4lf\n\n",f);
 
            return f;
 
            }
    }   
}
Тело main

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
int main(void)
{
    char S_LINE[1000];
 
    char LINE[1000];
 
    char T_WORDS[1000];
 
    double f;
 
    ifstream in_file("D:\\Hedra\\Obj\\Box1.txt",ios::in);
 
    while (!in_file.eof())
    {
 
    in_file.getline(LINE,1000);
    
    strcpy(S_LINE,LINE);
 
    const char *delims = " ";
 
    split_string(S_LINE, delims);
 
    char **words = split_string(S_LINE, delims);
 
    size_t i;
 
    for (i = 0; words[i] != NULL; ++i)
    {
 
    f = get_params(words[i]);
 
    printf("%.4lf\n",f);
 
    }
 
    destroy_words(words);
 
    }
 
    system("pause");
 
    return 0;
}

Но если в теле main в цикле

C++
1
2
3
4
5
6
7
8
for (i = 0; words[i] != NULL; ++i)
    {
 
    f = get_params(words[i]);
 
    printf("%.4lf\n",f);
 
    }
возвращать значение функции и выводить его на экран лезет лишняя инфа.

[Ресурс в черном списке]

Я так понял пробелы функция f = atof(T_WORDS); начинает преобразовывать в double, но между значениями тоже есть пробелы почему только между словами и значениями? Или я в этом не прав. В чем причина.

C++
1
2
v  -0.5000 0.0000 0.5000
v  -0.5000 0.0000 -0.0000
P.S Вопрос по поводу книги актуален.

Добавлено через 7 минут
Не понял как вывести картинку запишу так

C++
1
2
3
4
5
6
7
-1.#IND
-1.#IND
-0.5000
 0.0000
 0.5000
-1.#IND
-1.#IND
И далее все повторяется 3 значения 2 этих слова -1.#IND
-1.#IND.

Я так понял пробелы функция f = atof(T_WORDS); начинает преобразовывать в double и выводится что то не ясное, но между значениями тоже есть пробелы почему только между словами и значениями? Или я в этом не прав. В чем причина.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
26.03.2014, 09:27     Распарсить файл 3Dmax #4
А не проще загнать все в вектор?
C++
1
2
3
std::fstream file("/*Тут имя файла*/.obj");
std::vector<char> buffer;
std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), back_inserter(buffer));
а дальше парсить используя ключевые слова и алгоритм find?
(Надеюсь нигде не соврал писал по памяти.)
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
26.03.2014, 10:25  [ТС]     Распарсить файл 3Dmax #5
Я просто не шарю в этом поэтому и спросил про книгу, если бы я был специалистом то не задавал бы тут вопросов. Про вектор и алгоритм find ничего не слышал.
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
18.04.2014, 01:54  [ТС]     Распарсить файл 3Dmax #6
Всем привет. Я дописал парсер для Obj файла 3Dmax с горем пополам. Возник другой вопрос.

Есть прога. упрощенная версия парсера для теста.

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
#include "stdafx.h"
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <strstream>
#include <sstream>
#include <string>
 
 
using namespace std;
 
int ParseFile(int &vertex1_index, int &vertex2_index, int &vertex3_index);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int vertex1_index = 0;
    int vertex2_index = 0;
    int vertex3_index = 0;
 
    ParseFile(vertex1_index, vertex2_index, vertex3_index);
 
    
    cout << vertex1_index << endl;
 
    cout << vertex2_index << endl;
 
    cout << vertex3_index << endl;
 
    system("pause");
 
    return 0;
}
 
 
int ParseFile(int &vertex1_index, int &vertex2_index, int &vertex3_index)
{
    char line[100];
 
    char vertex[100];
 
    char TABULATION;
    
    ifstream in("TesterBox.txt");
 
    if(!in)
    {
        cout << "file not found" << endl;
        
        return 1;
 
    }
 
    while(!in.eof())
    {
 
        in.getline(line,100);
 
        istringstream iss(line);
 
                iss >> vertex;
 
            iss >> vertex1_index >> TABULATION >> vertex2_index >> TABULATION >> vertex3_index;
 
            //cout << vertex1_index << "/" << vertex2_index << "/" << vertex3_index << endl;
    }
}
Есть файл

C++
1
2
3
4
5
6
7
8
f 1/1/1 
f 1/1/2 
f 1/1/3 
f 1/1/4 
f 2/4/5 
f 3/6/5 
f 4/3/5 
f 5/2/5
Она считывает эти данные.

Как мне в этой функции

C++
1
int ParseFile(int &vertex1_index, int &vertex2_index, int &vertex3_index);
Вернуть значения
C++
1
int &vertex1_index, int &vertex2_index, int &vertex3_index
По ссылке не работает возвращает только самые последние, а мне надо все по очереди которые считает из файла. Есть же какой то способ?
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
18.04.2014, 02:11     Распарсить файл 3Dmax #7
Цитата Сообщение от x5reunion Посмотреть сообщение
понимаю что тут нужны циклы, функции для работы со строками и так далее
Нужна грамматика, описывающая формат. По грамматике пишется парсер. Все остальное - от лукавого.
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
18.04.2014, 02:28  [ТС]     Распарсить файл 3Dmax #8
Нужна грамматика, описывающая формат. По грамматике пишется парсер. Все остальное - от лукавого.
Благодарю конечно, но это все уже сделано у меня другой вопрос выше.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
18.04.2014, 02:48     Распарсить файл 3Dmax #9
Цитата Сообщение от x5reunion Посмотреть сообщение
while(!in.eof())
Заполняете динамический массив структур. Одна строка файла - один элемент массива.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 00:06     Распарсить файл 3Dmax
Еще ссылки по теме:

C++ Распарсить xlsx-файл
C++ Распарсить файл с номерами телефонов и именами абонентов
C++ Как правильно распарсить xml-файл?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
19.04.2014, 00:06  [ТС]     Распарсить файл 3Dmax #10
Заполняете динамический массив структур. Одна строка файла - один элемент массива.
Я воспользовался вектором и все считал из файла преобразовал в структуры все получилось осталось найти последнее решение проблемы. DirectX не понимает векторы при отображении моделей или я просто не знаю как ему их правильно передать и я пока забил на это. Поэтому я просто передаю элементы вектора структуре и потом загружаю ее DirectX.

Вопрос. Есть структура.

C++
1
2
3
4
5
struct SimpleVertex
{
    XMFLOAT3 Pos;   // Координаты точки в пространстве
    XMFLOAT4 Color; // Теперь каждая вершина будет содержать информацию о цвете
};
Я заношу в нее данные.

C++
1
2
3
4
5
6
7
    SimpleVertex vertices[6];
 
    for ( i = 0; i < vector_struct_vertex.size(); i++ )
    {
        vertices[i].Pos = vector_struct_vertex[i];
        vertices[i].Color = XMFLOAT4(vector_struct_vertex[i].x, vector_struct_vertex[i].y, vector_struct_vertex[i].z, 1 );
    }
Еще есть массив индексов.

C++
1
2
3
4
5
    WORD indices[24];
 
    for ( i = 0; i < vector_index_vertex.size(); i++ )
 
        indices[i] = vector_index_vertex[i];
После считывания файла известен объём, который надо выделить для массива структур и массива индексов. Как подставить размер динамически.

Допустим объявление

C++
1
2
SimpleVertex vertices[ vector_struct_vertex.size() ] 
 WORD indices[vector_index_vertex.size()]
не работает они требуют константу возникает вопрос как выделить для них размер в процессе выполнения после того как я считаю данные из файла.

Добавлено через 34 минуты
Решил проблему через оператор
C++
1
new      delete
C++
1
2
3
    int GET_VECTOR_STRUCT_VERTEX_SIZE = vector_struct_vertex.size();
 
    int GET_VECTOR_STRUCT_INDEX_SIZE = vector_index_vertex.size();

C++
1
SimpleVertex *vertices = new SimpleVertex[GET_VECTOR_STRUCT_VERTEX_SIZE];
//
//

C++
1
WORD *indices = new WORD[GET_VECTOR_STRUCT_INDEX_SIZE];
//
//

C++
1
2
3
    delete []vertices;
 
    delete []indices;
Yandex
Объявления
19.04.2014, 00:06     Распарсить файл 3Dmax
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru