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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2010, 15:13   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Изменение цвета (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(0,0,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.3; v1.y = 0.3; // записываем статичиские кординаты фигуры
v2.x =-0.08; v2.y = 0.08;
v4.x = 0.08; v4.y =-0.08;

}
struct Vec3D {float x, y, z;};

class Asteroid
{
//...
void Draw();
//...
Vec3D A, B, C, D;
//...
};

void Asteroid::Draw()
{
	glBegin(GL_POLYGON);
	glColor3ub(255,255,255);
            glVertex3f(A.x, A.y, A.z);   // Слева вверху
            glVertex3f(B.x, B.y, B.z);   // Справа вверху
            glVertex3f(C.x, C.y, C.z);   // Справа внизу
            glVertex3f(D.x, D.y, D.z);   // Слева внизу
	
	glEnd(); 
}
//------------------------------------------------------------------------------------


void display(void)
{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glLoadIdentity();



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

 if(GetAsyncKeyState(VK_UP)) { 
	 Vector tmp; tmp.x = 0.004; tmp.y = 0.004;
	 tmp = Rotate(tmp, angle);
	 
	 pos.x += tmp.x; pos.y += tmp.y;
	 if(pos.x > 5.1) pos.x = -5.1;
	 if(pos.x < - 5.1) pos.x = 5.1;

	 if(pos.y > 5.1) pos.y = -5.1;
	 if(pos.y < - 5.1) pos.y = 5.1;
 
 }  // Кнопки вверх и вниз меняют позицию фигуру! 
 if(GetAsyncKeyState(VK_DOWN)) {
	 Vector tmp; tmp.x = -0.003; tmp.y = -0.003;
	 tmp = Rotate(tmp, angle);
	 pos.x += tmp.x; pos.y += tmp.y;

	 pos.x += tmp.x; pos.y += tmp.y;
	 if(pos.x > 5.1) pos.x = -5.1;
	 if(pos.x < - 5.1) pos.x = 5.1;

	 if(pos.y > 5.1) pos.y = -5.1;
	 if(pos.y < - 5.1) pos.y = 5.1;
 
 }


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

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

	glTranslatef(-3.0f,2.0f,0.0f);
	 glBegin(GL_POLYGON);
		 glColor3ub(255,255,255);
                glVertex3f(-0.2f, 0.3f, 0.0f);  // Слева вверху
                glVertex3f( 0.0f, 0.3f, 0.0f);  // Справа вверху
                glVertex3f( 0.2f,-0.5f, 0.0f);  // Справа внизу
                glVertex3f(-0.3f,-0.2f, 0.0f);  // Слева внизу
				glVertex3f(0.4f, 0.3f, 0.0f);
				glVertex3f(-0.4f, -0.3f, 0.0f);

				glEnd(); 

glutSwapBuffers();
glutPostRedisplay();


}


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

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

    glutCreateWindow("FrOsT");

    glutReshapeFunc(resize);    
    glutDisplayFunc(display);

    glutMainLoop();

	return 0;
}
revaldo666 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение цвета MaXoN66613 Помощь студентам 2 02.06.2010 18:56
Изменение цвета girz Общие вопросы Delphi 6 30.05.2009 13:43
Различение и изменение цвета peq Microsoft Office Excel 10 16.04.2009 19:50
ColorBar изменение цвета Vladya Помощь студентам 1 19.11.2008 10:09
Изменение цвета Artem Общие вопросы Delphi 5 12.07.2007 09:07