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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 07:43   #1
rocky7
Пользователь
 
Регистрация: 16.02.2009
Сообщений: 16
По умолчанию Вывод графических объектов

Моя прога рисует движующиеся фигуры(как в скринсейвере). Не могу придумать удобный интерфейс, который позволял бы добавлять шары и кубы
с необходимыми параметрами (радиусами и размерами сторон).
Кусок кода:
Код:
void TForm1::Draw()
{
 #define DMAX 0.1
  float rndx = random(100)-50;
  float rndy = random(100)-50;
  float rndz = random(100)-50;

  rndx/=10000.f;
  rndy/=10000.f;
  rndz/=10000.f;
  dx += rndx;
  dy+=rndy;
  dz+=rndz;
  if(dx>DMAX)
    dx = DMAX;
  if(dx<-DMAX)
    dx = -DMAX;
  if(dy>DMAX)
    dy = DMAX;
  if(dy<-DMAX)
    dy = -DMAX;
  if(dz>DMAX)
    dz = DMAX;
  if(dz<-DMAX)
    dz = -DMAX;


  x +=dx;
  y +=dy;
  z +=dz;

  if(x>4 || x<-4)
    dx = -dx;

  if(y>4 || y<-4)
    dy = -dy;

  if(z>4 || z<-4)
    dz = -dz;

  glLoadIdentity();

  glClear(GL_DEPTH_BUFFER_BIT ^ GL_COLOR_BUFFER_BIT);
   //выводим шар1
  GLUquadricObj *quadObj;
  quadObj=gluNewQuadric();
  gluQuadricDrawStyle(quadObj, GLU_FILL);
  glColor3f(1,0,0);
  glTranslatef(x,y,z);
  glRotatef(2,x*10,y*10,z*10);
  gluSphere(quadObj, 1.2,32,32);
  //выводим шар2
  glLoadIdentity();
  glColor3f(0,1,0);
  glTranslatef(-x,-y,-z);
  glRotatef(2,x*10,y*10,z*10);
  gluSphere(quadObj, 1,32,32);
  //выводим шар3
  glLoadIdentity();
  glTranslatef(-x+2,-y+2,-z+2);
  glRotatef(2,x*10,y*10,z*10);
  gluSphere(quadObj, 1.5,32,32);
  //выводим куб
  glLoadIdentity();
  glColor3f(0,0,2);
  glPushMatrix;
  glTranslatef(x+2,y+2,z+2);
  glRotatef(10, 0,0,1);
  glRotatef(25, 0,1,0);
  glRotatef(20, 1,0,0);
  piped(2,2,2);
  glPopMatrix;
  SwapBuffers(ghDC);

}



//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Draw();

}

Последний раз редактировалось Sazary; 20.08.2009 в 13:20.
rocky7 вне форума Ответить с цитированием
Старый 20.08.2009, 11:01   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2rocky7
эм... если я правильно понял, то вам нужны классы. Создайте класс CShape с необходимыми функциями (возможно виртуальными), от него наследуйте CCircle и CQuad например, переопределяете у этих фигур функции рисования, и добавляйте их сколько угодно.
в книгах куча примеров именно на эту тему
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.08.2009, 12:27   #3
rocky7
Пользователь
 
Регистрация: 16.02.2009
Сообщений: 16
По умолчанию

В принципе сейчас попробую сделать так: В цикле будет перебираться
массив объектов CCircle и CQuad, которые я добавляю, и при переборе
будет вызываться виртуальная функция рисования(для каждого объекта своя соответственно). Цикл вставлю в процедуру Draw(). Спасибо pproger!
rocky7 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лента графических файлов бел Помощь студентам 1 13.04.2009 10:15
Перемещение графических объектов на форме bush007 Помощь студентам 3 05.04.2009 17:43
Условное форматирование графических объектов FAKDIM Microsoft Office Excel 1 16.01.2009 06:45
Перемещение графических объектов по форме Klyacksa Общие вопросы Delphi 15 20.06.2008 12:58
Открытия графических файлов Kocapb Общие вопросы C/C++ 3 01.12.2007 19:11