Показать сообщение отдельно
Старый 26.12.2009, 09:56   #1
zinador
AnyKey`щик
 
Регистрация: 26.12.2009
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос OpenGL арконойд проблема с отскакиванием шарика от платформы

всем здрасте.
я начал писать арконойд с помощью OpenGL
в с++ я ешо мало чего понимаю и поэтому прошу у вас помощи.
дело в том что я пытаюсь реализовать отскок шарика от платформы а у меня получаеться не так как надо тоесть платформа идет в лево шарик летит вверх,а платформа идет вправо шарик летит в низ и самое главное не происходит отскока от платформы для того чтобы вы поняли о чем я кидаю код
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glaux.h>
#pragma comment (lib,"glut32.lib")
#pragma comment (lib,"glaux.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"opengl32.lib")
extern double xp=0.1;//координаты шарика	
extern double yp=0.1;//координаты шарика
extern double vx=0.1;//координаты скорости
extern double vy=0.1;//координаты скорости
extern double dt=0.1;  

void CALLBACK 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 );
}    
void podstavka (void)
{
	glPushMatrix();
	glTranslated(vx/0.1, 0.0, 0.0);
	glTranslated(-1.0,-4.5, 0.0);
	glColor3d(0,0,1);
	auxSolidBox(3,0.2,1); 
    glPopMatrix();  
}
void sharik()
{
	glPushMatrix();       
	glTranslated(0, xp/1.0, 0.0);
    auxSolidSphere(0.3);
	xp = xp-vx*dt; 
    yp = yp-vy*dt;
	if(vy ==vx)
    vy = -vy;
    glPopMatrix();         
}

void CALLBACK display(void)
{
     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	 podstavka();
	 sharik();
	 auxSwapBuffers();
}
void CALLBACK levo(void)
{ 
	vx=vx-0.03;	
}
void CALLBACK pravo(void)
{    
	vx=vx+0.03;
}

void main()
{
	float pos[4] = {3,3,3,1};
	float dir[3] = {-1,-1,-1};
    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( L"Sphere2" );
    auxIdleFunc(display);
    auxKeyFunc(AUX_LEFT,levo);
	auxKeyFunc(AUX_RIGHT,pravo);
    auxReshapeFunc(resize);
    glEnable(GL_ALPHA_TEST);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
	auxMainLoop(display);	
}
прошу помогите пожалуйста
(Offline)
 
Ответить с цитированием