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

Проблемка с ООП и OpenGl - C++

Восстановить пароль Регистрация
 
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
11.05.2013, 23:32     Проблемка с ООП и OpenGl #1
Привет!Проблемка с ООП и OpenGl. Может ли быть, что OpenGl не видят мои созданые функции из-за использования в них обектов класа?если да, то как можно исправить ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 23:32     Проблемка с ООП и OpenGl
Посмотрите здесь:

C++ Небольшая проблемка)
C++ Проблемка с массивом
C++ Проблемка
Проблемка с указателями C++
Проблемка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
11.05.2013, 23:47     Проблемка с ООП и OpenGl #2
Что значит "OpenGL не видят" ?
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
11.05.2013, 23:52  [ТС]     Проблемка с ООП и OpenGl #3
вот к примеру в мейне есть "glutDisplayFunc(Draw)".функцию Draw компилятор считает неоприделенной, хотя она определина, но в ней используються обекты класа
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
11.05.2013, 23:56     Проблемка с ООП и OpenGl #4
Мне кажется мы так никогда "не придем к общему знаменателю" ...
Покажи код.
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
12.05.2013, 00:07  [ТС]     Проблемка с ООП и OpenGl #5
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
H файл:
 
  #pragma once
#include <cmath>
#include <GL/glut.h>
class Point
{
protected:
    int N;    
    int x;
    int y;
    int z;
    int mastab;
 
public:
    Point(void);
    Point(int N,int x,int y,int z);
    ~Point();
 
    const Point & Point::operator = (const Point & Point);
 
    Point( const Point &Point);
    void Draw();
};
    void Initialize();
    void Timer();
 
 
 
class Pointsoon: public Point
{
    
    int ANgle_;
 
public:
    
    Pointsoon( const Pointsoon& Point ) ;
    Pointsoon(int ANgle_);
    ~Pointsoon();
 
    const Pointsoon & Pointsoon::operator = (const Pointsoon & Point);
    
    void Vvod();
    void SKeyboard(int key, int x, int y);
};
    void  Povorot();
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
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
срр файл:
 
#include "Point.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <cmath>
#include <GL/glut.h>
 
 
float WinWid=700.0;
float WinHei=700.0;
float Angle=0.0, Scale=1.0;
 
const double M_PI =3.1415926535898;
 
 
void Pointsoon::Vvod()
{
    setlocale(LC_ALL,"");
    printf("-------Намалювати багатокутник-------");
    printf("\nКiлькiсть граней: ");
    scanf_s("%d", &N);
 
    printf("\n*******Перемiщення фiгури*******");
    printf("\nx = ");
    scanf_s("%d", &x);
    
    printf_s("\ny = ");
    scanf_s("%d", &y);
    
    printf("\nz = ");
    scanf_s("%d", &z);
    
    printf("\nМасштаб = ");
    scanf_s("%d", &mastab);
 
    printf("\nВведтiь кут повороту:");
    scanf_s("%d", &ANgle_);
       
    printf("\n*******Задайте колiр фiгури*******");
    
    char ch;
    do
    {
        puts("");
        puts("1-Чорний");
        puts("2-Червоний");
        puts("3-Зелений");
        puts("4-Жовтий");
        puts("5-Синiй");
        puts("6-Пурпурний");
        puts("7-Блакитний");
        puts("8-Бiлий");
        puts("ESC-vuhod");
        ch=_getch();
    }
    while((ch>'8'||ch<'1')&&ch!=27);
    switch(ch)
    {
        case '1':glColor3f(0.0, 0.0, 0.0); break;
        case '2':glColor3f(1.0, 0.0, 0.0); break;
        case '3':glColor3f(0.0, 1.0, 0.0); break;
        case '4':glColor3f(1.0, 1.0, 0.0); break;
        case '5':glColor3f(0.0, 0.0, 1.0); break;
        case '6':glColor3f(1.0, 0.0, 1.0); break;
        case '7':glColor3f(0.0, 1.0, 1.0); break;
        case '8':glColor3f(1.0, 1.0, 1.0); break;
    }
    _getch();
 
}
 
void Timer(int value)
{
      //Draw();
        glutPostRedisplay();
        glutTimerFunc(50, Timer, 0);
}
 
Pointsoon::Pointsoon( int ANgle_)
    :Point (N, x, y, z)
{
    this ->ANgle_ = ANgle_;
}
 
Pointsoon::Pointsoon( const Pointsoon& Point ) 
    : Point( Point )
{
    ANgle_ = Point.ANgle_;
}
 
Pointsoon:: ~Pointsoon()
{
 
}
 
void Pointsoon::SKeyboard(int key, int x, int y)
{
    for( ; ANgle_ > 0; ANgle_--)
        switch(key)
        {
        case GLUT_KEY_LEFT: Angle++;
                break;
        case GLUT_KEY_RIGHT: Angle--;
                break;
        }
}
 
void Initialize()
{
        glClearColor(0.0, 0.0, 0.0, 1.0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-WinWid/2, WinWid/2, -WinHei/2, WinHei/2, -200.0, 200.0);
        glMatrixMode(GL_MODELVIEW);
}
 
Point::Point(int N, int x, int y, int z)
{
    this ->N = N;
    this ->x = x;
    this ->y = y;
    this ->z = z;
    this ->mastab = mastab;
 
}
 
 
Point::Point(const Point&Point)
{
    N = Point.N;
    x = Point.x;
    y = Point.y;
    z = Point.z;
    mastab = Point.mastab;
}
 
Point:: ~Point()
{
 
}
 
void inform()
{
    void Vvod();
}
 
 
void Point:: Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    Scale = mastab - abs(sin(3.14*Angle/90.0)/sqrt(3.0)/2);
    glTranslated(x , y, z);         
    glRotatef(Angle, 0.0, 0.0, 1.0);
    glScalef(Scale, Scale, 1.1);
 
    glLineWidth(2);
    glBegin(GL_LINE_LOOP);
    
    for (int i = 0; i < N; ++i)
        for (int j = i + 0.5; j < N; ++j)
        {
            glVertex2f(cos(2 * M_PI * i  / N), sin(2 * M_PI * i / N));
 
        }
    glEnd();
    glPopMatrix();
    glutSwapBuffers();
}
 
void Drawing()
{
    void Draw();
}
 
void Povorot()
{
     void SKeyboard();
}
 
int main(int argc, char **argv)
{   
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
        glutInitWindowSize(WinWid, WinHei);
        glutInitWindowPosition(300, 200);
        glutCreateWindow("Mnogogrannik");
        
        inform();
        Initialize();
 
        glutInitWindowSize(1000, 1600);
        glutDisplayFunc(Drawing);
        glutTimerFunc(50, Timer, 0);
       // glutSpecialFunc(Povorot);
        glutMainLoop();
 
        return 0;
}

здесь прада я попробовал вызвать функции класа глобальными функциями
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
12.05.2013, 00:14     Проблемка с ООП и OpenGl #6
А где определение класса?
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
12.05.2013, 00:21  [ТС]     Проблемка с ООП и OpenGl #7
где должно быть?
FreeMan108
 Аватар для FreeMan108
120 / 120 / 6
Регистрация: 04.03.2013
Сообщений: 368
12.05.2013, 00:27     Проблемка с ООП и OpenGl #8
C++
1
2
3
4
5
void Drawing ()
{
Point pt;
pt.Draw();
}
Добавлено через 1 минуту
Да, кст. пишите всю реалезацию класса в файле h/hpp.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.05.2013, 14:45     Проблемка с ООП и OpenGl #9
Цитата Сообщение от FreeMan108 Посмотреть сообщение
Да, кст. пишите всю реалезацию класса в файле h/hpp.
Обосновать сможете?
FreeMan108
 Аватар для FreeMan108
120 / 120 / 6
Регистрация: 04.03.2013
Сообщений: 368
17.05.2013, 23:18     Проблемка с ООП и OpenGl #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
Обосновать сможете?
Простое отделение инерфейса от реализации. Например, если вы используете стандартный класс для работы со строками - string, то вы же не определяете в нем описание всех функций, их описание идет отдельно.
Вообще, в этом и заключается главное преимущество классов - его могут использовать и другие программисты.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.05.2013, 23:24     Проблемка с ООП и OpenGl #11
FreeMan108, я, может, чего-то не понял, но вы в своём предыдущем сообщении порекомендовали писать реализацию в заголовочных файлах, т.е. делать вещи, противоположные этому:
Цитата Сообщение от FreeMan108 Посмотреть сообщение
отделение инерфейса от реализации
Цитата Сообщение от FreeMan108 Посмотреть сообщение
Вообще, в этом и заключается главное преимущество классов - его могут использовать и другие программисты.
Это не в тему, поскольку отделять объявление от реализации (объявление в h, реализация в cpp) или нет (и объявление, и реализация в h), класс в любом случае можно использовать извне.
FreeMan108
 Аватар для FreeMan108
120 / 120 / 6
Регистрация: 04.03.2013
Сообщений: 368
18.05.2013, 13:36     Проблемка с ООП и OpenGl #12
В данном проекте было два файла - h и cpp. Вся реализация функций была в исполняемом файле cpp, что является неправильным. Нужно было создавать файл hpp, где определен класс с реализацией всех его функций или же создавать файл h, где будут прототипы функций, а их описание в файле dll.
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
18.05.2013, 14:37     Проблемка с ООП и OpenGl #13
2FreeMan108 Вам стоит почитать что такое раздельная компиляция и тогда вы поймете зачем нужны заголовочные файлы ( *.h, *.hpp ) и файлы исходных текстов ( *.с, *.cpp ). Причем компилятору c++ (тоже и для компилятора с) все равно расширение *.c или *.cpp (*.h или *.hpp) если код будет написан корректно с точки зрения выбранного языка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 18:07     Проблемка с ООП и OpenGl
Еще ссылки по теме:

Проблемка с exit C++
Проблемка с g++ C++
C++ ООП в с++ и OpenGL

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.05.2013, 18:07     Проблемка с ООП и OpenGl #14
Цитата Сообщение от FreeMan108 Посмотреть сообщение
В данном проекте было два файла - h и cpp. Вся реализация функций была в исполняемом файле cpp, что является неправильным.
Как раз это и является правильным.
Цитата Сообщение от FreeMan108 Посмотреть сообщение
или же создавать файл h, где будут прототипы функций, а их описание в файле dll
А dll откуда возьмётся? Аист в клюве принесёт? Его же надо откомпилировать из чего-то.
Короче говоря, прислушайтесь к совету stima, почитайте про раздельную компиляцию.
Yandex
Объявления
18.05.2013, 18:07     Проблемка с ООП и OpenGl
Ответ Создать тему
Опции темы

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