Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > движение шарика по каналу


Автор: ammhitman 18.4.2012, 20:56
помогите пожалуйста
есть решенная задача физически,
user posted image

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

Код

void rigidBody()
{
    //Рисуем стержень
    glPushMatrix();
        glTranslated(0, 0, -12);
        glLineWidth(9);
        glBegin(GL_LINES);        
            glVertex3f(0, 0, 0);
            glVertex3f(0, 5, 0);
        glEnd();
    glPopMatrix();

    //Рисуем нижнюю грань
    glPushMatrix();
        glTranslated(0, 0, -12);
        glLineWidth(9);
        glBegin(GL_LINES);        
            glVertex3f(0, 1, 0);
            glVertex3f(deltaXa(), 1, deltaYa());
        glEnd();
    glPopMatrix();

    //Рисуем верхнюю грань
    glPushMatrix();
        glTranslated(0, 0, -12);
        glLineWidth(9);
        glBegin(GL_LINES);        
            glVertex3f(0, 4, 0);
            glVertex3f(2*deltaXa(), 4, 2*deltaYa());
        glEnd();
    glPopMatrix();

    //Рисуем желоб
    glPushMatrix();
        glTranslated(0, 0, -12);
        glLineWidth(9);
        glBegin(GL_LINES);        
            glVertex3f(2*deltaXa(), 4, 2*deltaYa());
            glVertex3f(1.5*deltaXa(), 2.5, 1.5*deltaYa());
        glEnd();
    glPopMatrix();


    //Рисуем желоб
    glPushMatrix();
        glTranslated(0, 0, -12);
        glLineWidth(9);
        glBegin(GL_LINES);        
            glVertex3f(1.5*deltaXa(), 2.5, 1.5*deltaYa());
            glVertex3f(deltaXa(), 1, deltaYa());
        glEnd();
    glPopMatrix();


    //Рисуем соединительную точку1
    glPushMatrix();
        glTranslated(0, 0, -12);    
        glTranslated(2*deltaXa(), 4, 2*deltaYa());
        glutSolidSphere(0.1, 15, 15);
    glPopMatrix();

    //Рисуем соединительную точку2(нижняя)
    glPushMatrix();
        glTranslated(0, 0, -12);    
        glTranslated(deltaXa(), 1, deltaYa());
        glutSolidSphere(0.1, 3, 3);
    glPopMatrix();

    //Рисуем соединительную точку3(средняя)
    glPushMatrix();
        glTranslated(0, 0, -12);    
        glTranslated(1.5*deltaXa(), 2.5, 1.5*deltaYa());
        glutSolidSphere(0.1, 15, 15);
    glPopMatrix();


    
}


надеюсь кто-нить поможет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)