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

相关推荐
程序新视界2 分钟前
实战技巧:使用冗余查询条件解锁MySQL中的索引
数据库·mysql·dba
武子康1 小时前
AI-调查研究-104-具身智能 从模型训练到机器人部署:ONNX、TensorRT、Triton全流程推理优化详解
人工智能·gpt·ai·性能优化·机器人·tensorflow·具身智能
CryptoRzz1 小时前
越南k线历史数据、IPO新股股票数据接口文档
java·数据库·后端·python·区块链
学Java的bb1 小时前
MybatisPlus
java·开发语言·数据库
重生之我要当java大帝1 小时前
java微服务-尚医通-编写医院设置接口上
java·数据库·微服务
灵犀物润2 小时前
机器宠物建模的第一步:基础形体搭建(Blocking)
人工智能·机器人·宠物
Mu.3872 小时前
初始Spring
java·数据库·spring
葡萄城技术团队2 小时前
突破Excel局限!SpreadJS让电子表格“活”起来
java·数据库·excel
J总裁的小芒果2 小时前
SQL Server 报错 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘ORDER_BTN‘ 中的标识列插入显式值
数据库
神的孩子都在歌唱2 小时前
PostgreSQL 向量检索方式(pgvector)
数据库·人工智能·postgresql