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

Экспорт из 3d max, наложение текстуры - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сохранить скрин шот заданной области экрана http://www.cyberforum.ru/cpp-beginners/thread928959.html
Добрый день, помогите пожалуйста написать программу, которая делает скриншот заданной области экрана и сохраняет в файл. Функционал минимальный, координаты прописаны жестко, программа консольная, файл перезаписывается. Спасибо.
C++ Как считать текст с файла ? Как считать текст с файла (например .txt) а потом в другой пустой файл записать текст с первого документа? http://www.cyberforum.ru/cpp-beginners/thread928930.html
C++ cmd make
Я понимаю, что вопрос немного не в ту ветку, но он очень тесно связан с c++. Скачивал уже не одну библиотеку, содержащую Makefile. Ни сам разобраться не смог, ни гугл не помог, в попытке собрать на основе этого файла. В cmd вводил: make path где path - путь до директории с makefile. На что cmd выдало: "unable to open makefile". Не могли бы вы объяснить как использовать эту утилиту?
C++ Подсчет даты
Я наверное уже перегрелся за комом весь день писать код, но вот хоть тресни, видимо с математикой плохо. Помогите решить одну задачку. есть дата 20.05.2013. нужно подсчитать а то есть пройденные: дни часы минуты милисекунды (не обязательно) начиная отсчет с 20.05.2013.
C++ Как изменить значение строки http://www.cyberforum.ru/cpp-beginners/thread928894.html
есть структура Struct MyStruct { String s; } можно ли изменить значение строки в ней внутри метода класса если она объявлена как const MyStruct* _myStruct ;
C++ Что за объект? Забыл уже плюсы да и голова не соображает. class Table; class X { static Table mem; } Table X::mem; что мы делаем в последней строчке? Вызываем конструктор для X::mem? Для чего? Чтобы просто проинициализировать, раз член-класса является статичным? подробнее

Показать сообщение отдельно
Vozyka Yaroslav
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 45
26.07.2013, 11:02  [ТС]     Экспорт из 3d max, наложение текстуры
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
    void LoadObj(char* fxname)
{
  num_texture = 0;
  // ----------------
  //* Откроем файл
  // ----------------
 
  file3ds *file= NULL;
  database3ds *db = NULL;
  file = OpenFile3ds(fxname, "rw");
 
 
 
  PRINT_ERRORS_EXIT(stderr);
  InitDatabase3ds(&db);
  PRINT_ERRORS_EXIT(stderr);
  CreateDatabase3ds(file, db);
  PRINT_ERRORS_EXIT(stderr);
 
 
  // ----------------
  //* Обработка файла
  // ----------------
    material3ds *mat=NULL;
    ulong3ds nbrmat = GetMaterialCount3ds(db);
    mesh3ds *mesh=NULL;
    ulong3ds nbrmesh=GetMeshCount3ds(db);
 
 
 
    ulong3ds meshid;
 
    int nmatfaceind, indface;
 
    glClearColor(0.0, 0.0, 0.0, 0.0); // This clear the background color to black
    glShadeModel(GL_SMOOTH); // Type of shading for the polygons
    glViewport(0,0,Form1->Panel_Picture->Width,Form1->Panel_Picture->Height);
 
    // Projection transformation
    glMatrixMode(GL_PROJECTION); // Specifies which matrix stack is the target for matrix operations
    glLoadIdentity(); // We initialize the projection matrix as identity
    gluPerspective(45.0f,(GLfloat)Form1->Panel_Picture->Width/(GLfloat)Form1->Panel_Picture->Width,1.0f,10000.0f); // We define the "viewing volume"
 
    glEnable(GL_DEPTH_TEST); // We enable the depth test (also called z buffer)
    glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); // Polygon rasterization mode (polygon filled)
    glEnable(GL_TEXTURE_2D); // This Enable the Texture mapping
    float maxNumRan=0;
 
 
    for (int ind = 0; ind < int(nbrmesh); ind++) //sozdanie otdelnogo spiska dlya kajdogo elementa
    {
        glNewList(NumElement,GL_COMPILE);
 
        GetMeshByIndex3ds(db,ind,&mesh);
        num_texture = LoadBitmap(mat->texture.map.name);
 
        glBindTexture(GL_TEXTURE_2D, num_texture);       // We set the active texture
 
 
        if (mesh->matarray!=NULL)
        {
            nmatfaceind = mesh->nmats-1;
            for (int d = 0; d < mesh->nmats; d++)
             if (mesh->matarray[d].faceindex[0]==0)
             {
                InitMaterial3ds(&mat);
                GetMaterialByName3ds(db,mesh->matarray[d].name,&mat);
                indface = mesh->matarray[d].nfaces;
                break;
             }
 
        }
        for (int k = 0; k <  (mesh->nfaces); k++)
        {
            if (indface<k)
            {
                for (int d = 0; d < mesh->nmats; d++)
                 if (mesh->matarray[d].faceindex[0]==k-1)
                 {
                    InitMaterial3ds(&mat);
                    GetMaterialByName3ds(db,mesh->matarray[d].name,&mat);
                    indface = indface+mesh->matarray[d].nfaces;
                    break;
                 }
 
 
            }
 
            glColor3f(0.0,0.0,1);
            glBegin(GL_TRIANGLES);
            try
            {
                if ((mesh->facearray[k].v1  < mesh->nvertices) && (mesh->facearray[k].v1  < mesh->nvertices)
                    && (mesh->facearray[k].v1  < mesh->nvertices))
                {
                    glTexCoord2d(mesh->textarray[mesh->facearray[k].v1].u ,mesh->textarray[mesh->facearray[k].v1].v);
                    if (mesh->facearray[k].v1  < mesh->nvertices)
                    glVertex3d(mesh->vertexarray[mesh->facearray[k].v1].x,
                               mesh->vertexarray[mesh->facearray[k].v1].y,
                               mesh->vertexarray[mesh->facearray[k].v1].z);
 
 
                    glTexCoord2d(mesh->textarray[mesh->facearray[k].v2].u ,mesh->textarray[mesh->facearray[k].v2].v);
                    if (mesh->facearray[k].v2  < mesh->nvertices)
                    glVertex3d(mesh->vertexarray[mesh->facearray[k].v2].x,
                               mesh->vertexarray[mesh->facearray[k].v2].y,
                               mesh->vertexarray[mesh->facearray[k].v2].z);
                    glTexCoord2d(mesh->textarray[mesh->facearray[k].v3].u ,mesh->textarray[mesh->facearray[k].v3].v);
                    if (mesh->facearray[k].v3  < mesh->nvertices)
                    glVertex3d(mesh->vertexarray[mesh->facearray[k].v3].x,
                               mesh->vertexarray[mesh->facearray[k].v3].y,
                               mesh->vertexarray[mesh->facearray[k].v3].z);
               //   Form1->Label1->Caption=mesh->textarray[mesh->facearray[k].v1].u;
                //  Form1->Label_Pressure->Caption=mesh->textarray[mesh->facearray[k].v1].v;
                }
 
                else
                {
                    Form1->Memo_State->Lines->Add("err  " + k);
                }
                Application->ProcessMessages();
            }
             catch (Exception &exception)
            {
 
            }
            glEnd();
 
                if (mesh->facearray[k].v1  < mesh->nvertices)
                {
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v1].x)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v1].x);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v1].y)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v1].y);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v1].z)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v1].z);
                }
                if (mesh->facearray[k].v2  < mesh->nvertices)
                {
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v2].x)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v2].x);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v2].y)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v2].y);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v2].z)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v2].z);
                }
                if (mesh->facearray[k].v3  < mesh->nvertices)
                {
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v3].x)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v3].x);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v3].y)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v3].y);
                maxNumRan = (maxNumRan>mesh->vertexarray[mesh->facearray[k].v3].z)?maxNumRan:(mesh->vertexarray[mesh->facearray[k].v3].z);
               }
 
        }
      glEndList();
      NumElement++;
    }
 
    nRange = 2*maxNumRan;
 
    SetViewport(true,Form1->Panel_Picture->Width,Form1->Panel_Picture->Height);
  if (mesh!=NULL)
  {
    RelMeshObj3ds(&mesh);
  }
  if (mat!=NULL)
  {
    RelMeshObj3ds(&mesh);
  }
 
  ReleaseDatabase3ds(&db);
  PRINT_ERRORS_EXIT(stderr);
  CloseFile3ds(file);
  PRINT_ERRORS_EXIT(stderr);
 
}
Это загрузчик

далее создание сетки
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
int LoadBitmap(char *filename)
{
    int i, j=0; //Index variables
    FILE *l_file; //File pointer
    unsigned char *l_texture; //The pointer to the memory zone in which we will load the texture
 
    // windows.h gives us these types to work with the Bitmap files
    BITMAPFILEHEADER fileheader;
    BITMAPINFOHEADER infoheader;
    RGBTRIPLE rgb;
 
    num_texture++; // The counter of the current texture is increased
 
    //Zadaem Texturu object 1
 
    if (NumPicture==1) {
    UnicodeString Texture= ExtractFileDir (Application->ExeName) + "\\texmal.bmp";
    filename = Texture.t_str();
    }
 
    //Zadaem Texturu obkect2
 
    if (NumPicture==2) {
    UnicodeString Texture= ExtractFileDir (Application->ExeName) + "\\Device.bmp";
    filename = Texture.t_str();
    }
 
    //Zadaem Texturu object 3
 
    if (NumPicture==3) {
    UnicodeString Texture= ExtractFileDir (Application->ExeName) + "\\Door.bmp";
    filename = Texture.t_str();
    }
 
    NumPicture++;
    if( (l_file = fopen(filename, "rb"))==NULL) return (-1); // Open the file for reading
 
    fread(&fileheader, sizeof(fileheader), 1, l_file); // Read the fileheader
 
    fseek(l_file, sizeof(fileheader), SEEK_SET); // Jump the fileheader
    fread(&infoheader, sizeof(infoheader), 1, l_file); // and read the infoheader
 
    // Now we need to allocate the memory for our image (width * height * color deep)
    l_texture = (byte *) malloc(infoheader.biWidth * infoheader.biHeight * 4);
 
    // And fill it with zeros
    memset(l_texture, 0, infoheader.biWidth * infoheader.biHeight * 4);
 
    // At this point we can read every pixel of the image
    for (i=0; i < infoheader.biWidth*infoheader.biHeight; i++)
    {
            // We load an RGB value from the file
            fread(&rgb, sizeof(rgb), 1, l_file);
 
            // And store it
            l_texture[j+0] = rgb.rgbtRed; // Red component
            l_texture[j+1] = rgb.rgbtGreen; // Green component
            l_texture[j+2] = rgb.rgbtBlue; // Blue component
            l_texture[j+3] = 255; // Alpha value
            j += 4; // Go to the next position
    }
 
    fclose(l_file); // Closes the file stream
 
    glBindTexture(GL_TEXTURE_2D, num_texture); // Bind the ID texture specified by the 2nd parameter
 
    // The next commands sets the texture parameters
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // If the u,v coordinates overflow the range 0,1 the image is repeated
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // The magnification function ("linear" produces better results)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); //The minifying function
 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); // We don't combine the color with the original surface color, use only the texture map.
 
    // Finally we define the 2d texture
    glTexImage2D(GL_TEXTURE_2D, 0, 4, infoheader.biWidth, infoheader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, l_texture);
 
    // And create 2d mipmaps for the minifying function
    gluBuild2DMipmaps(GL_TEXTURE_2D, 4, infoheader.biWidth, infoheader.biHeight, GL_RGBA, GL_UNSIGNED_BYTE, l_texture);
 
    free(l_texture); // Free the memory we used to load the texture
 
    return (num_texture); // Returns the current texture OpenGL ID
}
 
Текущее время: 20:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru