Как найти файл obj

mvngr, Наследование публичное, QMainWindow подключил, макрос прописал.
DataParametrs :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct DataParametrs {
    DataParametrs(string Rep, int Age, string Date, string Month, int Year, int Num, int BP, string Type);
    string Rep;
    int Age;
    string Date;
    string Month;
    int Year;
    int Num;
    int BP;
    string Type;
};
DataParametrs::DataParametrs(string Rep, int Age, string Date, string Month, int Year, int Num, int BP, string Type):
        Rep(Rep), Age(Age), Date(Date), Month(Month), Year(Year), Num(Num), BP(BP), Type(Type) {}

Добавлено через 3 минуты
mvngr, насчёт гадания на кофейной гуще: «вычислительная» часть до совмещения с интерфейсом тестировалась, интерфейс отдельно тоже тестировался. А вместе не работает по какой-то причине. Если Вы и после этого уверены, что все сурсы нужны, я их скину, только скажите.

Добавлено через 9 минут

C++ (Qt)
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
#ifndef MAINENTERWINDOW_H
#define MAINENTERWINDOW_H
 
#include <QMainWindow>
#include <QString>
 
namespace Ui {
class MainEnterWindow;
}
 
class MainEnterWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainEnterWindow(QWidget *parent = nullptr);
    ~MainEnterWindow();
private slots:
 
    void on_StartButton_clicked();
 
private:
    Ui::MainEnterWindow *ui;
};
 
#endif // MAINENTERWINDOW_H
C++ (Qt)
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
#ifndef READFROMTXT_H
#define READFROMTXT_H
//#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
struct ResultRat {
    ResultRat(double Rep, double Age, double Num, double BP, double Type);
    double Rep;
    double Age;
    double Num;
    double BP;
    double Type;
};
struct DataParametrs {
    DataParametrs(string Rep, int Age, string Date, string Month, int Year, int Num, int BP, string Type);
    string Rep;
    int Age;
    string Date;
    string Month;
    int Year;
    int Num;
    int BP;
    string Type;
};
 
struct DataPerson
{
public:
    DataPerson(size_t N = 0, string Rep = "No data", int Age = 0, string Date = "No data", string Month = 0,
        int Year = 0, int Num = 0, int BP = 0, string Type = "No data");
    DataPerson(const DataPerson & copy);
    DataPerson& operator = (DataPerson& Obj);
 
    ~DataPerson();
 
    string GetDate();
    string GetRep();
    string GetType();
    size_t GetN();
    int GetAge();
    string GetMonth();
    int GetYear();
    int GetNum();
    int GetBP();
 
private:
    size_t N_;
    string Rep_;
    int Age_;
    string Date_;
    string Month_;
    int Year_;
    int Num_;
    int BP_;
    string Type_;
};
vector<DataPerson> ReadStringFromFile(ifstream& file);
vector<DataPerson> GetVector();
ResultRat Ratio(vector<DataPerson> Vector, DataParametrs par, string EndDate);
 
 
#endif // READFROMTXT_H

C++ (Qt)
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
#include <QApplication>
#include <QtWidgets>
//#include "ui_mainenterwindow.h"
#include "mainenterwindow.h"
//#include "readfromtxt.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    MainEnterWindow MEW;
    MEW.show();
 
   // UiForm->setupUi(wnd);
 
 
   // wnd->show();
 
 
   // QApplication app(argc, argv);
   // CalculatorForm calculator;
   // calculator.show();
   // return app.exec();
 
    return a.exec();
}

C++ (Qt)
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
#include "mainenterwindow.h"
#include "ui_mainenterwindow.h"
//#include <cstring>
#include "readfromtxt.h"
 
MainEnterWindow::MainEnterWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainEnterWindow)
{
 
    ui->setupUi(this);
    connect(ui->StartButton, SIGNAL(clicked()), this, SLOT(on_StartButton_clicked()));
 
}
 
MainEnterWindow::~MainEnterWindow()
{
    delete ui;
}
    //чтение из лайнэдитов
    //QString str1 = ui->Age->text();
    //ui->Bp->setText("111");
 
 
void MainEnterWindow::on_StartButton_clicked()
{
    //получаем из полей
    QString BeginDate = ui->Begin->text();
    QString EndDate = ui->End->text();
    QString Rep = ui->Rep->text();
    int Age = ui->Age->text().toInt();
    int Num = ui->Num->text().toInt();
    int BP = ui->Bp->text().toInt();
    QString Type = ui->Type->text();
    std::string BegD = BeginDate.toStdString();
    std::string EndD = EndDate.toStdString();
    std::string RepS = Rep.toStdString();
    std::string TypeS = Type.toStdString();
    //DataParametrs obj = {"Rep1", 30, "20.04.2015", "apr", 2018, 1, 0, "one" };
        //ResultRat a = Ratio(GetVector(), obj, "22.04.2015");
    DataParametrs objF (RepS, Age, BegD, "apr", 2015, Num, BP, TypeS);
    ResultRat a = Ratio(GetVector(), objF, EndD);
    /*cout << a.Age << endl;
        cout << a.BP << endl;
        cout << a.Num << endl;
        cout << a.Rep << endl;
        cout << a.Type << endl;
    */
 
    QString Resultat = QString::number(a.Age);
    Resultat += " ";
    Resultat +=QString::number(a.BP);
    Resultat += " ";
    Resultat +=QString::number(a.Num);
    Resultat += " ";
    Resultat +=QString::number(a.Rep);
    Resultat += " ";
    Resultat +=QString::number(a.Type);
 
    ui->ReS->setText(Resultat);
}
C++ (Qt)
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
//#include <iostream>
//#include <fstream>
//#include <string>
 
//#include <conio.h>
#include "readfromtxt.h"
//using namespace std;
 
// DataPerson methods
 
    DataPerson::DataPerson(size_t N, string Rep, int Age, string Date, string Month,
        int Year, int Num, int BP, string Type)
        : N_(N), Age_(Age), Month_(Month), Year_(Year), Num_(Num), BP_(BP)
    {
        Date_ = Date;
        Rep_ = Rep;
        Type_ = Type;
 
 
    }
    DataPerson::DataPerson(const DataPerson & copy) : N_(copy.N_), Age_(copy.Age_), Month_(copy.Month_),
        Year_(copy.Year_), Num_(copy.Num_), BP_(copy.BP_), Date_(copy.Date_), Rep_(copy.Rep_), Type_(copy.Type_) {}
 
    DataPerson& DataPerson::operator = (DataPerson& Obj) {
        N_ = Obj.N_;
        Age_ = Obj.Age_;
        Month_ = Obj.Month_;
        Year_ = Obj.Year_;
        Num_ = Obj.Num_;
        BP_ = Obj.BP_;
        Date_ = Obj.Date_;
        Rep_ = Obj.Rep_;
        Type_ = Obj.Type_;
        return *this;
    }
 
    DataPerson::~DataPerson() {
 
    }
    string DataPerson::GetDate() {
        return Date_;
    }
    string DataPerson::GetRep() {
        return Rep_;
    }
    string DataPerson::GetType() {
        return Type_;
    }
    size_t DataPerson::GetN() {
        return N_;
    }
    int DataPerson::GetAge() {
        return Age_;
    }
    string DataPerson::GetMonth() {
        return Month_;
    }
    int DataPerson::GetYear() {
        return Year_;
    }
    int DataPerson::GetNum() {
        return Num_;
    }
    int DataPerson::GetBP() {
        return BP_;
    }
 
    // End of DataPerson methods
 
 
 
    ResultRat::ResultRat(double Rep, double Age, double Num, double BP, double Type) : Rep(Rep), Age(Age), Num(Num), BP(BP), Type(Type){}
    DataParametrs::DataParametrs(string Rep, int Age, string Date, string Month, int Year, int Num, int BP, string Type):
        Rep(Rep), Age(Age), Date(Date), Month(Month), Year(Year), Num(Num), BP(BP), Type(Type) {}
 
vector<DataPerson> ReadStringFromFile(ifstream& file) {
    vector<DataPerson> VectorOfData;
    DataPerson temp();
    string line;//Строчка текста
 
    while (getline(file, line)) {
        // << line << " is filling line" << endl; // Что хранится в line смотрим
 
        //Теперь в line хранится содержимое строчки из файла.
 
 
        size_t N = 0;
        int Age;
        string Rep, Date, Type;
        string Month;
        int Year;
        int Num;
        int BP;
 
        //Создадим поток для считывания данных из строчки
        istringstream iss(line);
        string token;
        int i = 0;
        while (getline(iss, token, 't')) {
            //cout << token <<" token" << endl;
            if (i == 0) N = atoi(token.c_str());
            if (i == 1) Rep = token;
            if (i == 2) Age = atoi(token.c_str());
            if (i == 3) Date = token;
            if (i == 4) Month = token;
            if (i == 5) Year = atoi(token.c_str());
            if (i == 6) Num = atoi(token.c_str());
            if (i == 7) BP = atoi(token.c_str());
            if (i == 8) Type = token;
            i++;
        }
        if (Rep != "") {
            DataPerson temp2(N, Rep, Age, Date, Month, Year, Num, BP, Type);
            VectorOfData.push_back(temp2);
        }
    }
    return VectorOfData;
}
 
vector<DataPerson> GetVector(/*строка адреса*/) {
    ifstream file("C:\Users\alexi\Documents\Visual Studio 2017\Projects\AnalysisData\AnalysisData\input.txt");
    vector<DataPerson> VectorOfData;
    if (file.is_open())//Если открытие файла прошло успешно
    {
        //cout << "File open" << endl;
        VectorOfData = ReadStringFromFile(file);
        //cout << VectorOfData[0].GetAge();
        //cout << VectorOfData[1].GetAge();
    }
    else //cout << "File not open";
    return VectorOfData;
}
 
ResultRat Ratio(vector<DataPerson> Vector, DataParametrs par, string EndDate) {
    string token;
    istringstream iss(par.Date);
    int j = 0;
    int DDay, DMonth, DYear;
    int DDay1, DMonth1, DYear1;
    while (getline(iss, token, '.')) {
        if (j == 0) DDay = atoi(token.c_str());
        if (j == 1) DMonth = atoi(token.c_str());
        if (j == 2) DYear = atoi(token.c_str());
        ++j;
    }
    istringstream iss1(EndDate);
    j = 0;
    while (getline(iss1, token, '.')) { //верхняя граница
        if (j == 0) DDay1 = atoi(token.c_str());
        if (j == 1) DMonth1 = atoi(token.c_str());
        if (j == 2) DYear1 = atoi(token.c_str());
        ++j;
    }
    if (DYear == DYear1) {//год
        if (DMonth == DMonth1) {//год и месяц
            if (DDay == DDay1) { // год месяц день
                // Вычислить процентное отношение полей из par относительно всех полей объектов из вектора
                int coutAge = 0;
                int coutRep = 0, coutDate = 0, coutType = 0;
                int coutMonth = 0;
                int coutYear=0;
                int coutNum = 0;
                int coutBP = 0;
                for (j = 0; j < Vector.size(); ++j) {
                    if (Vector[j].GetAge() == par.Age) coutAge++;
                    if (Vector[j].GetBP() == par.BP) coutBP++;
                    //if (Vector[j].GetMonth == par.Month) coutMonth++;
                    if (Vector[j].GetNum() == par.Num) coutNum++;
                    if (Vector[j].GetRep() == par.Rep) coutRep++;
                    if (Vector[j].GetType() == par.Type) coutType++;
                }
 
                ResultRat res(((double)coutRep / (double)Vector.size()), ((double)coutAge / (double)Vector.size()),
                    ((double)coutNum / (double)Vector.size()),((double)coutBP / (double)Vector.size()), ((double)coutType / (double)Vector.size())); //корявое приведение типа
                return res;
            }
            else { //если месяц и год один и тот же //
                string token2;
                int coutAge = 0;
                int coutRep = 0, coutDate = 0, coutType = 0;
                int coutMonth = 0;
                int coutYear = 0;
                int coutNum = 0;
                int coutBP = 0;
                for (j = 0; j < Vector.size(); ++j) {
 
                    istringstream iss2(Vector[j].GetDate());
                    int k = 0;
                    int DDay2, DMonth2, DYear2;
                    while (getline(iss2, token, '.')) {
                        if (k == 0) DDay2 = atoi(token.c_str());
                        if (k == 1) DMonth2 = atoi(token.c_str());
                        if (k == 2) DYear2 = atoi(token.c_str());
                        ++k;
                    }
                    if (DDay2 <= DDay1 && DDay2 >= DDay) {
                        if (Vector[j].GetAge() == par.Age) coutAge++;
                        if (Vector[j].GetBP() == par.BP) coutBP++;
                        //if (Vector[j].GetMonth == par.Month) coutMonth++;
                        if (Vector[j].GetNum() == par.Num) coutNum++;
                        if (Vector[j].GetRep() == par.Rep) coutRep++;
                        if (Vector[j].GetType() == par.Type) coutType++;
                    }
                }
                ResultRat res(((double)coutRep / (double)Vector.size()), ((double)coutAge / (double)Vector.size()),
                    ((double)coutNum / (double)Vector.size()), ((double)coutBP / (double)Vector.size()), ((double)coutType / (double)Vector.size())); //корявое приведение типа
                return res;
 
            }
 
        }
    }
}



0



A binary consisted of lots of obj file and libraries,

Use objdump I can get a list all symbols in this binary.

For example:

000342c4 l     F .text  000000cc xdrmem_getlong

00034390 l     F .text  000000cc xdrmem_putlong

0003445c l     F .text  0000008c xdrmem_getbytes

000344e8 l     F .text  0000008c xdrmem_putbytes

00034574 l     F .text  00000038 xdrmem_getpos

My question is how to find the object file or pre-built library that contains specified function such as «xdrmem_putbytes» in above example?

Решил написать obj reader в QtCreator, на языке C++. Всё вроде компилируется, но файл который я закинул в сборку box.obj не виден для программы, хотя там указано read(«box.obj»). Подскажите, пожалуйста, в чём дело.

void load()
{
	objl::Loader Loader;
		
		// Load .obj File
		bool loadout = Loader.LoadFile("pistol_0.obj");
		std::cout << "bool = "<< loadout << "n";
		
		// Check to see if it loaded
		
		// If so continue
		if (loadout)
		{

5dd5a0fed282a898436746.png

  1. I created a GUI Application -> QMainWindow
  2. I added 1 item to the menu + the slot.
  3. I created a new item -> QDialog
  4. I the slot method i try to show the created dialog but i get this errors:

    mainwindow.obj:-1: error: LNK2019: unresolved external symbol «public: __cdecl EditStudentDialog::EditStudentDialog(class QWidget *)» (??0EditStudentDialog@@QEAA@PEAVQWidget@@@Z) referenced in function «private: void __cdecl MainWindow::on_actionNew_triggered(void)» (?on_actionNew_triggered@MainWindow@@AEAAXXZ)

    mainwindow.obj:-1: error: LNK2019: unresolved external symbol «public: virtual __cdecl EditStudentDialog::~EditStudentDialog(void)» (??1EditStudentDialog@@UEAA@XZ) referenced in function «private: void __cdecl MainWindow::on_actionNew_triggered(void)» (?on_actionNew_triggered@MainWindow@@AEAAXXZ)

This is the main window:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_actionNew_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "editstudentdialog.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionNew_triggered()
{
    EditStudentDialog editDialog;
    editDialog.setModal(true);
    editDialog.exec();
}

This is the dialog ( just an empty one, no controls on it ):

#ifndef EDITSTUDENTDIALOG_H
#define EDITSTUDENTDIALOG_H

#include <QDialog>

namespace Ui {
class EditStudentDialog;
}

class EditStudentDialog : public QDialog
{
    Q_OBJECT

public:
    explicit EditStudentDialog(QWidget *parent = 0);
    ~EditStudentDialog();

private:
    Ui::EditStudentDialog *ui;
};

#endif // EDITSTUDENTDIALOG_H


#include "editstudentdialog.h"
#include "ui_editstudentdialog.h"

EditStudentDialog::EditStudentDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::EditStudentDialog)
{
    ui->setupUi(this);
}

EditStudentDialog::~EditStudentDialog()
{
    delete ui;
}

What am I doing wrong?

EDIT: This is the .pro file

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = GUI1
TEMPLATE = app


SOURCES += main.cpp
        mainwindow.cpp 
    editstudentdialog.cpp

HEADERS  += mainwindow.h 
    editstudentdialog.h

FORMS    += mainwindow.ui 
    editstudentdialog.ui

PS: I tried to clean the project and then build it but still the same issue.

EDIT 2: I am using Qt Creator 2.7 with Qt 5.0.2

#pragma hdrstop
#pragma argsused
#include <tchar.h>
#include <stdio.h>

/* функции загрузки файлов**********************************************/
 //для установки консоль на паузу
#include <conio.h>
//вывод данных в консоль
#include <iostream.h>
//функции работы с файлом
#include <fstream.h>
//функции работы с файлом
#include <sstream>
//функции работы со строками
#include <string.h>
#include <cstring>

//переменная для чтения строк из файла
 string line;
//переменная ссылка на читаемый файл файл
 fstream My_File_obj;
//точки из которых будет состоять обьект
float* coords;
int* Index;

int  coords_index=0, Fase_index=0; //номер текущей прочитанной коордианты точки

struct coord
{
   float x;
   float y;
   float z;
};
struct polygons
{
   coord* point; //1 точки
};
//точка
coord* MyMass;
//полигоны
polygons* models;
//количества точек
 int point=1;
//собераем координаты в индексы
 int p=0;
//собираем обьект в единую структуру
void Compare(float* Coords, int* indexs, int count_fase, int count_point)
{
//задаем массив для точек
  MyMass = new  coord[count_point/3];
  //(coord*) malloc (count_point/3);
//задаем массив для полигонов
  models = new polygons[count_fase/4];
  //(polygons*) malloc (count_fase/4);

//перебираем точки и присваиваем координаты каждой с индеса 1
  for (int i = 0; i < count_point; i+=3)
  {
    MyMass[point].x=Coords[i+0]; //координата Х
    MyMass[point].y=Coords[i+1]; //координата Y
    MyMass[point].z=Coords[i+2]; //координата Z
   point++;
  }
   p=0;
   //перебираем ребра и присваиваем координаты в зависимости от индекса точки
   for (int f = 0; f < count_fase; f+=4)
   {
    models[p].point=new coord[4];
        for (int s = 0; s < 4; s++)
          models[p].point[s]= MyMass[indexs[f+s]];

 /*
  models[p].point[1]= MyMass[indexs[f+1]];
  models[p].point[2]= MyMass[indexs[f+2]];
  models[p].point[3]= MyMass[indexs[f+3]];     */
    p++;
   }

}
//читаем файл
void Rad_file_obj(char* name_file)
{
My_File_obj.open(name_file);
//открываем файл
   if (My_File_obj.is_open())
   { //если открыли будем читать данные из файла
     cout << "file open";
     //перечитсывем файл до концы
    My_File_obj.seekg (0, ios::end);
    //получаем количество считанных из файла символов
    int  File_Size = My_File_obj.tellg();
     //задаем размер временного массива для координат
    float*   Tmp_Coords = (float*) malloc (File_Size);
     //задаем размер временного массива индексов точек поверхности
    int*     Tmp_faseArray=(int*) malloc (File_Size);
    //устанавливаем в 0 элемент массива
    coords_index=0;
    Fase_index=0;
    //устанавливаем курсор в начало файла
    My_File_obj.seekg (0, ios::beg);

    int countpoint=0;
    int countfase=0;
     //читаем файл до конца
     while (!My_File_obj.eof())
        {
            //читаем строку текста из файла
             getline (My_File_obj,line);
             //проверяем первые два символа строки
             if ((line.c_str()[0] == 'v')&&(line.c_str()[1]==' '))
             {
                //обнуляем 1 символ
                    line[0] = ' ';
                //обнуляем 1 символ
                    line[1] = ' ';
                //чтобы функция правельно разбирала координаты обнуляем начало строки
                sscanf(line.c_str(),"%f %f %f ",
                                &Tmp_Coords[coords_index+0],   //координата X
                                &Tmp_Coords[coords_index+1], //координата Y
                                &Tmp_Coords[coords_index+2]  //координата Z
                       );



               //сдвигаем индекс на 3 так как 3 координаты
               coords_index+=3;
                //расчет точек
               countpoint++;
             }
        //проверяем не нашли ли грань
           if ((line.c_str()[0] == 'f')&&(line.c_str()[1]==' '))
           {
            //обнуляем 1 символ
                line[0] = ' ';
            //получаем параметры поверхности
            //     v1       v2     v3      v3
             int tmp_point[4], tmp_normal[4], tmp_texture[4];
              sscanf(line.c_str(),"%i/%i/%i%i/%i/%i%i/%i/%i%i/%i/%i",
              // номер точки  номер нормали   номер текстуры
                &tmp_point[0],&tmp_normal[0], &tmp_texture[0]  //p1
               ,&tmp_point[1],&tmp_normal[1], &tmp_texture[1]  //p2
               ,&tmp_point[2],&tmp_normal[2], &tmp_texture[2]  //p3
               ,&tmp_point[3],&tmp_normal[3], &tmp_texture[3]  //p4
              );

             //сохраняем индексы в массив
              Tmp_faseArray[Fase_index+0]=tmp_point[0]; //сохраняем первый индекс точки
              Tmp_faseArray[Fase_index+1]=tmp_point[1]; //сохраняем второй индекс точки
              Tmp_faseArray[Fase_index+2]=tmp_point[2]; //сохраняем третий индекс точки
              Tmp_faseArray[Fase_index+3]=tmp_point[3]; //сохраняем четвертый индекс точки



             Fase_index+=4;
             countfase++;
           }
        }

      //определяем параметры полигонов для рисования
      Compare(Tmp_Coords,Tmp_faseArray,Fase_index,coords_index );
  }
  else
   {
   //если не открыли не будем читать
     cout << "file not open";
   }


}
/*реализация OpenGL********************************************************/
#include  "glut.h"
#include <windows.h>
 GLfloat  tx=0;            // Сдвиг по оси X
GLfloat     ty=0;            // Y
GLfloat     tz=0;            // Z
GLfloat  rx=0;            // Угол поворта сцены вокруг оси X
GLfloat  ry=0;            // Y
GLint     tt=0;            // Активная плоскось: 0 - XY, 1 - XZ

int mx=0,my=0;                // Координаты мыши
bool ldown=false,        // Нажата левая клавиша мыши?
     rdown =false;


float size=1;

void Draw_Obj()
{
   /*
       glEnable(GL_ALPHA_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   glEnable(GL_LIGHTING);
    glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
    glEnable(GL_NORMALIZE);
    float light0_diffuse[] = {1, 1, 1};
    float light0_direction[] = {-1, -1, 0, 100};
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
    glLightfv(GL_LIGHT0, GL_POSITION, light0_direction);
                                                         */
    for (int  i = 0; i < p; i++)
    {
    //рисуем каркас из линий
    //GL_POLYGON  GL_POINTS   GL_LINES GL_POLYGON GL_QUADS
        glColor3f(0,0,0);
        glBegin(GL_LINE_LOOP);
        for (int s=0; s<4; s++)
        glVertex3f(models[i].point[s].x,models[i].point[s].y,models[i].point[s].z);
        glEnd();
     //рисуем полигоны
        glColor3f(0,1,0);
        glBegin(GL_POLYGON);
        for (int s=0; s<4; s++)
        glVertex3f(models[i].point[s].x,models[i].point[s].y,models[i].point[s].z);
        glEnd();
    }


}

void MouseMotion(int x, int y)    //Перемешение мыши
{
    if (ldown)        // Левая кнопка
    {
        rx+=0.5*(y-my);    //Изменение угола поворота
        ry+=0.5*(x-mx);
        mx=x;
        my=y;
       //    glutPostRedisplay();    //Перерисовать экран
    }

    if (rdown)    //Правая
    {
        tx+=0.01*(x-mx);    //Перемещение вдоль активной плоскости
        if (tt)
            tz+=0.01*(y-my);
        else
            ty+=0.01*(my-y);
        mx=x;
        my=y;
    }
        cout <<"n X="<< tx<< " Y= " << ty<<" Z="<< tz ;
}


void Mouse(int button, int state, int x, int y)        //Обработка щелчков мыши
{
    cout << "nbutton "<< button << "state" << state;

    if (button==GLUT_LEFT_BUTTON)        //Левая кнопка
    {
        switch (state)
        {
            case GLUT_DOWN:        //Если нажата
                ldown=true;        //установить флаг
                mx=x;            //Запомнить координаты
                my=y;
                break;
            case GLUT_UP:
                ldown=false;
                break;
        }
    }
    if (button==GLUT_RIGHT_BUTTON)    //Правая кнопка
    {
        switch (state)
        {
            case GLUT_DOWN:
                rdown=true;
                mx=x;
                my=y;
                break;
            case GLUT_UP:
                rdown=false;
                break;
        }
    }


}


void Display()
{
   glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);

    glColor3f(0.1,0.7,0.2);
    glClearColor(0.5, 0.5, 0.75, 1);

 //    glClearColor(0.5f, 0.5f, 0.5f, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);



   glPushMatrix();
   glTranslatef(tx,ty,tz);        //Перемещение и поворт объекта
        glRotatef(rx,1,0,0);
        glRotatef(ry,0,1,0);
        glScalef(size,size,size);        //Перемещение и поворт объекта
         Draw_Obj();            //Вывод объекта на экран
  glPopMatrix();
  glutSwapBuffers();
}

void Keyboard(unsigned char key,int x,int y)            //Обработка сообщений от клавиатуры
{
    switch (key)
    {
        case VK_ESCAPE:        //Если нажата клавиша ESC - выход
            exit(0);
        break;
            case '+':        //Если нажата клавиша ESC - выход
             size+=0.1f;
        break;
        case '-':        //Если нажата клавиша ESC - выход
             size-=0.1f;
        break;
    }
   if (size<0) size=0;
}
 void IDLE()
{
glutPostRedisplay();
}
void InitOpenGL(int argc, _TCHAR* argv[])
{


   //включаем потдержку OpenGL в приложении
    glutInit(&argc, argv);
//задаем параметры рисования картинки
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
//устанавливаем размеры окна для картинки
    glutInitWindowSize(640, 480);
//устанавливаем позицию окна
    glutInitWindowPosition(100, 100);
//создаем окно и указываем ему заголовок
    glutCreateWindow("My first Pack Man");
//вызываем функцию рисования окна
    glutDisplayFunc(Display);
//обработка нажатия клавиш
    glutKeyboardFunc(Keyboard);

    glutMouseFunc(Mouse);

    glutMotionFunc(MouseMotion);

    glutIdleFunc(IDLE);

//запускаем бесконечный цикл работы приложения
    glutMainLoop();
}

/**************************************************************************/
int _tmain(int argc, _TCHAR* argv[])
{
//загружаем файл
cout <<"Loading cube2.obj";
  Rad_file_obj("cube2.obj");
//загружаем граяический примитив с список отображения

//запускаем OpenGL
   InitOpenGL(argc, argv);
    return 0;
}

Понравилась статья? Поделить с друзьями:
  • Как составить требование кредитора при реорганизации
  • Как найти процент от числа крест накрест
  • Как исправить вай фай на модеме
  • Doubleclick на мышке как исправить
  • Как найти телефон redmi по imei