qt-双臂SCARA机器人动画

qt-双臂SCARA机器人动画


在Qt + opengl中完成的双臂SCARA机器人的简单模拟。

一、演示效果

二、核心程序

c 复制代码
#include "glwidget.h"

#include <GL/glu.h>

GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent),
    pitch(30.0), yaw(0.0), distance(7.0)
{
}

void GLWidget::initializeGL()
{
    glEnable(GL_DEPTH_TEST);
    glClearDepth(1.0);

    glEnable(GL_CULL_FACE);

    glEnable(GL_POINT_SMOOTH);
    glPointSize(10.0);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    glClearColor(0.0, 0.0, 0.0, 0.0);
}

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    setView();
    setLight();

    glEnable(GL_COLOR_MATERIAL);
    glDisable(GL_LIGHTING);

    glColor4f(0.0, 0.5, 0.0, 0.5);
    for(int i = 0; i <= 20; ++i) {
        glBegin(GL_LINES);
            glVertex3f(-5.0+0.5*i, -5.0, 0.0); glVertex3f(-5.0+0.5*i, 5.0, 0.0);
            glVertex3f(-5.0, -5.0+0.5*i, 0.0); glVertex3f(5.0, -5.0+0.5*i, 0.0);
        glEnd();
    }
    glColor4f(0.5, 0.5, 0.0, 0.5);
    glBegin(GL_LINES);
        glVertex3f(robot->getY(), -robot->getX(), 0.0); glVertex3f(robot->getY(), -robot->getX(), robot->getZ()+0.5);
    glEnd();

    glColor4f(0.9, 0.0, 0.0, 0.5);
    robot->displayPath();

    glDisable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    robot->display();

    glFlush();
}

void GLWidget::resizeGL(int _w, int _h)
{
    w = _w; h = _h;

    glViewport(0.0, 0.0, w, h);

    setView();
}

void GLWidget::setPitch(double _pitch)
{
    pitch = _pitch;
}

void GLWidget::setYaw(double _yaw)
{
    yaw = _yaw;
}

void GLWidget::setDistance(double _distance)
{
    distance = _distance;
}

void GLWidget::setView()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, 1.0*w/h, 0.1, 100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    gluLookAt(-distance, 0.0, 0.0,
              0.0, 0.0, 0.0,
              0.0, 0.0, 1.0);
    glRotatef(pitch, 0.0, -1.0, 0.0);
    glRotatef(yaw, 0.0, 0.0, -1.0);
}

void GLWidget::setLight()
{
    GLfloat lamb[] = { 0.1, 0.1, 0.1, 1.0 };
    GLfloat ldif[] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat lpos[] = { -10.0, -10.0, 10.0, 1.0 };

    glEnable(GL_COLOR_MATERIAL);
    glDisable(GL_LIGHTING);
    glDisable(GL_LIGHT0);
    glColor4fv(ldif);
    glBegin(GL_POINTS);
        glVertex4fv(lpos);
    glEnd();

    glDisable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);

    glLightfv(GL_LIGHT0, GL_POSITION, lpos);
    glLightfv(GL_LIGHT0, GL_AMBIENT, lamb);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, ldif);
}

三、下载链接

https://download.csdn.net/download/u013083044/88851543

相关推荐
zzzzzz3101 小时前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人
无响应de神2 小时前
三、用户与权限管理
数据库·mysql
通信小呆呆17 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
麦聪聊数据19 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_19 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡20 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
桥田智能20 小时前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
曹牧20 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon20 小时前
SQL学习指南——视图
数据库·sql
活宝小娜20 小时前
mysql详细安装教程
数据库·mysql·adb