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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 15:02   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию win32 opengl треугольник

Народ нужна помощь
в кратце:
как ограничить размер окна, чтоб при движении треугольник когда будет выходить за пределы окна появлялся в противоположной части.
и ещё одно, как сделать чтоб треугольник двигался в заданном направлении, тоисть при нажатии клавиши вверх низ он двигался в ту сторону в которую направлен его острый угол.
это скажем так пошаговый подход к игре АСТЕРОИДЫ.Может так будет легче.
вот код того что сделано
Код:
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <glut.h>
#define PI 3.1415926535898

struct Vector 
{ 
float x, y;
};

Vector v1, v2, v3,v4; 
Vector pos;
float angle;

//------------------------------------------------------------------------------------
void resize(int width,int height)
{
   glViewport(1,1,width,height);
   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   glOrtho(-5,5, -5,5, 2,12);
   gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
   glMatrixMode( GL_MODELVIEW );
}

//------------------------------------------------------------------------------------

Vector Rotate(Vector v,float a) // функция вращения вектора на угол а.
{
Vector r;

a = a * (PI/180.0);
r.x = (v.x*cos(a)) + (v.y*sin(a));
r.y = (v.x*-sin(a)) + (v.y*cos(a));

return r;
}
//------------------------------------------------------------------------------------

void init() // Задаем установки прогы
{
v1.x = 0.8; v1.y = 0.8; // записываем статичиские кординаты фигуры
v2.x =-0.2; v2.y = 0.2;
v4.x = 0.2; v4.y =-0.2;
}
//------------------------------------------------------------------------------------


void display(void)
{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor3ub(255,255,0);
glLoadIdentity();

 if(GetAsyncKeyState(VK_LEFT))  angle += 0.7; // Кнопки Влево и вправо крутят фигуру! 
 if(GetAsyncKeyState(VK_RIGHT)) angle -= 0.7;

 if(GetAsyncKeyState(VK_UP))       pos.y += 0.02;   // Кнопки вверх и вниз меняют позицию фигуру! 
 if(GetAsyncKeyState(VK_DOWN))  pos.y -= 0.02; 


 Vector tv1 = Rotate(v1,angle); // создаем временой вектор  для создания глобальних кординат
 Vector tv2 = Rotate(v2,angle);
 Vector tv3 = Rotate(v4,angle);


 glBegin(GL_TRIANGLES);
    glVertex2f(tv1.x + pos.x, tv1.y + pos.y); // рисуем фигуру и добовляем позицию
    glVertex2f(tv2.x + pos.x, tv2.y + pos.y);
    glVertex2f(tv3.x + pos.x, tv3.y + pos.y);
 glEnd();

glutSwapBuffers();
glutPostRedisplay();

}


//------------------------------------------------------------------------------------
int main(int argc, char *argv[])
{

  init();
    glutInit(&argc, argv);             
    glutInitWindowSize(600, 600);        
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 

    glutCreateWindow("FrOsT");

    glutReshapeFunc(resize);    
    glutDisplayFunc(display);  

    glutMainLoop();          
}
заранее спасибо
revaldo666 вне форума Ответить с цитированием
Старый 19.07.2010, 20:37   #2
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

дайте плиз хоть новодочку..ато целый день ищю ничё найти немогу...=((
revaldo666 вне форума Ответить с цитированием
Старый 19.07.2010, 23:16   #3
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Вобщем задачя фактически решена
я вот нашол кое что поидеи должно работать...
подскажите плиз куда пихать эти куски и может чтото в коде надо переделать...
буду безконечно благодарен.

как ограничить размер окна, чтоб при движении треугольник когда будет выходить за пределы окна появлялся в противоположной части.

if ( v.x < 0 ) v.x = width;
if ( v.x > width ) v.x = 0;
if ( v.y < 0 ) v.y = height;
if ( v.y > height ) v.y = 0;

и ещё одно, как сделать чтоб треугольник двигался в заданном направлении, тоисть при нажатии клавиши вверх низ он двигался в ту сторону в которую направлен его острый угол.

v.x += move_distance*cos(angle);
v.y += move_distance*sin(angle);
revaldo666 вне форума Ответить с цитированием
Старый 21.07.2010, 11:38   #4
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

пожалуйста подскажите очень надо.
Никак допереть немогу...
revaldo666 вне форума Ответить с цитированием
Старый 21.07.2010, 15:01   #5
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

По-моему, я дал Вам ссылку на туториал опенгловский?
Вы прочитали то, что там было?
Вы разобрались в коде, который там был представлен?
Что Вы флудите на весь форум-то?

Скиньте сюда исходники, посмотрим, что у Вас там.
И либы не забудьте, у меня глута на компе нету.
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 21.07.2010, 15:06   #6
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

туториал я прочитал.а вот именно этого ненашол там....
щас скину проект
revaldo666 вне форума Ответить с цитированием
Старый 21.07.2010, 15:11   #7
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Вот исходник с либами
Вложения
Тип файла: rar Glrotate.RAR (3.16 Мб, 9 просмотров)
revaldo666 вне форума Ответить с цитированием
Старый 21.07.2010, 15:20   #8
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Такс. Я это даже скомпилил. Теперь излагай вопрос внятно и подробно.
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 21.07.2010, 15:25   #9
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

это не может не радовать))то что оно хотябы компилится
значит так...
нужно сделать так
ограничить область экрана, тоисть когда треугольник будет выходить за предел окна то он должен возвращатся с противоположной части.
и сделать так чтоб при нажатии кнопки (стрелка вверх) он перемещался в ту сторону в которую направлена его удленённая сторона.(типа космический кораблик)
Надеюсь понятно изложил.
revaldo666 вне форума Ответить с цитированием
Старый 21.07.2010, 15:41   #10
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Ок. Как сделаю - отпишусь.
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++(треугольник) Runner Помощь студентам 2 13.05.2010 10:32
Треугольник в VBA FullmetalAlchemist Microsoft Office Excel 3 27.04.2010 13:44
HLLW.Shadow.based / Net-Worm.Win32.Kido / Win32.Conficker / W32.Downadup Pirotexnik Безопасность, Шифрование 13 27.03.2009 14:02
Треугольник serega11 Помощь студентам 2 22.05.2008 09:01