Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 08:40   #1
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
Восклицание объекты

помогите сделать объекты
хочу делать их так:
задаем массив в котором каждое число это координата ну например так:
int a[] = {x1, y1, x2, y2, x3, y3}; и так далее, их можно ставить сколько угодно, потом этот массив надо передать функции и она нарисует фигуру
вот только как такое сделать?? использую C++ OpenGL
заранее блогодарен
jec вне форума Ответить с цитированием
Старый 29.09.2010, 08:56   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,770
По умолчанию

glBegin + GL_POLYGON или GL_LINE_LOOP
p51x вне форума Ответить с цитированием
Старый 29.09.2010, 09:10   #3
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
glBegin + GL_POLYGON или GL_LINE_LOOP
не в этом проблема мне надо как то указать этому бегину где координата x а где y, и также там можно указывать сколько угодно точек
вот в чем проблема

ну вот пример:

Код:
int quad[] = {-1, -1,  -1, 1,  1, 1,  1, -1};

DrawPrimitive(quad);
в dravprimitive будет что то вроде

Код:
glBegin(GL_POLYGON);

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

glEnd();

Последний раз редактировалось Stilet; 29.09.2010 в 09:57.
jec вне форума Ответить с цитированием
Старый 29.09.2010, 17:32   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
int* figure;
int N;
//Здесь мы узнаем, сколько у нас точек
figure = new int[2 * N];
for (int i = 0; i < 2 * N; i++)
 {
 //Выясняем координаты точки i - это будут figure[2 * i] и figure[2 * i + 1]
 }
//Ну и далее просто их используем
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.09.2010, 19:35   #5
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию

чет никак не могу понять как это использовать

мне нужно узнать кличество точек и также передать каждую точку в функцию

вот делаю модель int model[] = {-1, -1, -1, 1, 1, 1, 1, -1};
получился квадрат

дальше передаю ее в функцию отрисовки

DrawPrimitive(model);

(эта функция находится совсем другом файл)

теперь надо как то узнать сколько точек там и отрисовать все это дело
ну точки я думаю можно самому указать (хотя желательно что бы автоматически)

потом надо все отрисовать точек у нас 4 значит надо сделать 4 функции
делаем так

glBegin(GL_POLYGON);
//и вот тут надо сделать вызов glVertex2f(x, y);
//но как это сделать?? тоесть это ясно но это надо сделать столько раз сколько
//точек в моделе и в каждую занести по такому принципу:

//если модель условно такая int model[] = {x1, y1, x2, y2, x3, y3, x4, y4};
//тогда надо сделать в каждой glVertex свои координаты тоесть
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glVertex2f(x3, y3);
glVertex2f(x4, y4);

glEnd();


как ТАКОЕ сделать??
jec вне форума Ответить с цитированием
Старый 29.09.2010, 19:50   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

С ОпенГЛ не знаком, но, полагаю, никто вас не накажет за примерно такой код:
Код:
//...
for (int i = 0; i < 4; i++)
 glVertex2f(model[2 * i], model[2 * i + 1]);
//...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.09.2010, 19:53   #7
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию

ну так это работать не будет так как я хочу
у меня же уже есть сами координаты мне их из массива надо достать и позасовывать какую куда
jec вне форума Ответить с цитированием
Старый 29.09.2010, 21:48   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,770
По умолчанию

glBindBuffer, glDrawArrays, glDrawElements и иже с ними
p51x вне форума Ответить с цитированием
Старый 29.09.2010, 22:48   #9
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию

CObject* object = new CObject();
можно как нить оптимизировать код??
я просто делаю оюъекты и если их делать много то эта надпись как то не очень.
или же не в классах делать?


решил проблему вот так:

void CObject::DrawPrimitive(int* model, int count)
{
glVertexPointer(2, GL_INT, 0, model);
glDrawArrays(GL_POLYGON, 0, count);
}

на гемдеве подсказали (а точнее написали)

мне просто надо сделать перемещение вращение и тд так что надо написать по другому




glBindBuffer, glDrawArrays, glDrawElements

это VBO же да? можете дать доку по VBO а то я гуглю но ничего не могу найти нормального (ну или плохо ищу)
jec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объекты volchik1991 Общие вопросы C/C++ 3 16.06.2010 22:19
Объекты Asira Помощь студентам 7 15.06.2010 02:46
Объекты в С++ MasterGH Общие вопросы C/C++ 3 13.11.2009 22:14
объекты в си Барби Помощь студентам 1 13.05.2008 01:10
3D объекты в Си g0liath Помощь студентам 2 20.04.2008 21:39