PMG

Форумы по созданию игр
Текущее время: 04 окт 2024 03:26

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по OpenGl
СообщениеДобавлено: 18 ноя 2009 23:14 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
посмотрел в уроках 2,3 как строками задаётся рисование треугольника и квадрата , возник тут же вопрос , а как нарисовать круг ?
и вообще где можно взять команды и их описание , может книга есть у кого-то в электр виде ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 19 ноя 2009 10:05 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
тоже ищи в инете :evil: !!!
Код:
n=256;
glLineWidth(2.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
  float angle = 2*pi*i/n;
  glVertex2f(r*cos(angle), r*sin(angle));
}
glEnd();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 19 ноя 2009 15:47 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
ок, Спасибо! -) завтра же побегу в книжный =))) оч интересная тема =))) меня пропёрло-))) вот ещё вопрос появился , в OpenGl как нить можно музыку вставить ?
слышал про директикс что можно , а тут не знаю ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 19 ноя 2009 17:05 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
тоже очень много уроков на эту тему в инете, я использую OpenAL, он простой


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 02:02 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
bad_duck писал(а):
тоже ищи в инете :evil: !!!
Код:
n=256;
glLineWidth(2.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
  float angle = 2*pi*i/n;
  glVertex2f(r*cos(angle), r*sin(angle));
}
glEnd();



попробывал круг создать , тут ошибка с типами переменных

i - целое
pi - вещественное

хотя не , я гоню , компилятор сожрал и не подавился=)) правда вместо pi= 3.14 поставил 3 , забавный многогранник получился=))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 03:06 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
странно ... хочу нарисовать 3 одинаковых круга в строчку , а получается 1й круг нормальный а все последующие уменьшаются до крошечных размеров, в чём ошибка не пойму ...

Код:
int n;
float pi =3.14;
float r=0.1;

glTranslatef(3.0f,0.0f,-6.0f);   // Сдвинемся влево на 3 единицы
   //круг

n=256;
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
  double angle = 2*pi*i/n;
  glVertex2f(r*cos(angle), r*sin(angle));
}
glEnd();

glTranslatef(2.5f,0.0f,-6.0f);   // Сдвинемся влево на 0.5 единицы
   //круг
n=256;
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
  float angle = 2*pi*i/n;
  glVertex2f(r*cos(angle), r*sin(angle));
}
glEnd();

glTranslatef(2.0f,0.0f,-6.0f);   // Сдвинемся влево на 0.5 единиц
   //круг
n=256;

glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
  double angle = 2*pi*i/n;
  glVertex2f(r*cos(angle), r*sin(angle));
}
glEnd();


и как можно закрасить круг?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 09:14 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
ага, забыл дописать double angle = 2*pi*i/double(n)
А насчет кругов glTranslatef(2.5f,0.0f,-6.0f); ты каждый раз передвиuаешь на 2,5 по Х и на -6 по Z. Убери -6 и будут одинаковыми.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 13:29 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
bad_duck писал(а):
ага, забыл дописать double angle = 2*pi*i/double(n)
А насчет кругов glTranslatef(2.5f,0.0f,-6.0f); ты каждый раз передвиuаешь на 2,5 по Х и на -6 по Z. Убери -6 и будут одинаковыми.


вооо, Спасибо!! нарисовал я кольца эти , теперь как мне сделать их кругами, закрасить всё что внутри колец в 1 цвет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 13:31 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
жалко что уроков по созданию фигур различных нету (( а то только треугольник квадрат и куб , а вот сферу как сделать тоже вопрос , конус , цилиндр и т д ....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 14:27 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
уроков нет наверно потому, что это всё нужно загружать из готовой модели, а не считать каждый раз при отрисовке. И для отрисовки лучше использовать не glBegin(), а вершинные буфера http://pmg.org.ru/nehe/nehe45.htm
Да и закрашивать их тоже не нужно - на это есть текстуры
Но вот код из моего редактора, может он тебе поможет...
Код:
float xlen=xlength-1,ylen=ylength-1,pi=3.14159,ang,phi,alp;
вот цилиндр
Код:
for(int j=0;j<ylength;j++)
{
   for(int i=0;i<xlength;i++)
   {
         ang=(xlength-i-1)*2.0015*pi/(xlen)/360*angle;         
         points[j*xlength+i].x=rad*cos(ang);
         points[j*xlength+i].y=j*Heigh/ylen; //Heigh - высота цилиндра
         points[j*xlength+i].z=rad*sin(ang);   
   }   
}
вот сфера
Код:
for(int j=0;j<ylength;j++)
{
       ang=j*pi/ylen*angle/360;
       phi=(j+1)*pi/ylen;
       float angcos=cos(ang);
       float angsin=sin(ang);
       float phicos=cos(phi);
       float phisin=sin(phi);   
       for(int i=0;i<xlength;i++)
       {     
         alp=i*2.00014*pi/xlen;
         float alpcos=cos(alp);
         float alpsin=sin(alp);
         points[j*xlength+i].x=rad*angsin*alpsin;
         points[j*xlength+i].y=rad*angcos;
         points[j*xlength+i].z=rad*angsin*alpcos;
       }
}   
надеюсь, конус понятно как делать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 15:24 
Не в сети
Любитель

Зарегистрирован: 18 ноя 2009 13:50
Сообщения: 22
bad_duck писал(а):
уроков нет наверно потому, что это всё нужно загружать из готовой модели, а не считать каждый раз при отрисовке. И для отрисовки лучше использовать не glBegin(), а вершинные буфера http://pmg.org.ru/nehe/nehe45.htm
Да и закрашивать их тоже не нужно - на это есть текстуры
Но вот код из моего редактора, может он тебе поможет...
Код:
float xlen=xlength-1,ylen=ylength-1,pi=3.14159,ang,phi,alp;
вот цилиндр
Код:
for(int j=0;j<ylength;j++)
{
   for(int i=0;i<xlength;i++)
   {
         ang=(xlength-i-1)*2.0015*pi/(xlen)/360*angle;         
         points[j*xlength+i].x=rad*cos(ang);
         points[j*xlength+i].y=j*Heigh/ylen; //Heigh - высота цилиндра
         points[j*xlength+i].z=rad*sin(ang);   
   }   
}
вот сфера
Код:
for(int j=0;j<ylength;j++)
{
       ang=j*pi/ylen*angle/360;
       phi=(j+1)*pi/ylen;
       float angcos=cos(ang);
       float angsin=sin(ang);
       float phicos=cos(phi);
       float phisin=sin(phi);   
       for(int i=0;i<xlength;i++)
       {     
         alp=i*2.00014*pi/xlen;
         float alpcos=cos(alp);
         float alpsin=sin(alp);
         points[j*xlength+i].x=rad*angsin*alpsin;
         points[j*xlength+i].y=rad*angcos;
         points[j*xlength+i].z=rad*angsin*alpcos;
       }
}   
надеюсь, конус понятно как делать.



Спасибо!! сейчас попробую нарисовать эти фигуры

Насчёт текстур .... Я наложил на кольцо текстуру , но закрашивается только кольцо а внутри снова прозрачность ... поэтому я и подумал что сначала надо закрасить середину и поверх уже накладывать , как в уроках NeHe накладывали на куб .

ещё вот какая байда получается ....

все 4 кольца привязаны друг к другу glTranslatef(-0.4f,0.0f,0.0f);
и когда я меняю код
Код:
void Draw3()
{
if(X==1)
{
glTranslatef(-0.4f,0.0f,0.0f);
glColor3f(0.1f,0.1f,1.0f);
n=256;
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
   double angle = 2*pi*i/n;
   glVertex2f(rad*cos(angle), rad*sin(angle));
}
glEnd();
}
else
{
void Draw3()
{
glTranslatef(-0.4f,-0.5f,0.0f);
glColor3f(0.7f,0.7f,1.0f);
n=256;
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
for (int i = 0; i < n; i++)
{
   double angle = 2*pi*i/n;
   glVertex2f(rad*cos(angle), rad*sin(angle));
}
glEnd();
}
}

}


все последующие 10 фигур сдвигаются в зависимости от предыдущей ....

как можно сделать так чтоб все фигуры рисовались независимо друг от друга , и когда я меняю действия(код) 1й из них - остальные оставались на месте ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по OpenGl
СообщениеДобавлено: 20 ноя 2009 15:39 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
конечно можно - нужно сохранять текущую матрицу и возвращать когда нужно
Код:
glPushMatrix();
Draw();
glPopMatrix();


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB