利用OpenGL图形库实现人物动画移动效果
使用OpenGL库实现人物动画移动效果需要涉及到更复杂的图形编程和事件处理。以下是一个简单的例子,使用OpenGL和GLUT库实现人物的基本动画移动效果。
确保你已经安装了OpenGL和GLUT。你可以使用包管理器或者从官方网站下载并安装。
一、如果你已经安装过了OpenGL和GLUT可以直接跳到下一步
安装OpenGL和GLUT库的步骤会根据你使用的操作系统和开发环境而有所不同。以下是一些常见操作系统的简单指南:
Windows:
-
安装Code::Blocks:
- 前往 Code::Blocks 官网 下载最新版本。
- 安装 Code::Blocks。
-
安装OpenGL和GLUT:
- 下载 glut-3.7.6-bin.zip。
- 解压缩
glut-3.7.6-bin.zip
,将其中的glut32.dll
复制到C:\Windows\System32
或者C:\Windows\SysWOW64
目录。 - 创建
C:\Program Files (x86)\CodeBlocks\MinGW\include\GL
目录,将解压缩得到的glut.h
复制到此目录。 - 创建
C:\Program Files (x86)\CodeBlocks\MinGW\lib
目录,将解压缩得到的glut32.lib
复制到此目录。
-
配置Code::Blocks:
- 打开 Code::Blocks,选择 "Settings" -> "Compiler" -> "Linker settings"。
- 在 "Link Libraries" 部分,添加
opengl32
,glu32
,glut32
。 - 确保 "Toolchain executables" 中的编译器路径正确。
macOS:
-
安装Xcode:
- 安装 Xcode,这是macOS下的开发工具。
-
安装Homebrew:
- 打开终端,运行以下命令安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 打开终端,运行以下命令安装 Homebrew:
-
安装OpenGL和GLUT:
- 在终端中运行以下命令:
brew install freeglut
- 在终端中运行以下命令:
Linux (Ubuntu为例):
- 安装OpenGL和GLUT:
- 在终端中运行以下命令:
sudo apt-get update sudo apt-get install freeglut3 freeglut3-dev
- 在终端中运行以下命令:
以上是基本的安装步骤,具体情况可能会因操作系统版本、开发环境、架构等而有所不同。在安装后,你就可以使用OpenGL和GLUT库进行C语言的图形编程了。请根据自己的环境选择相应的方法进行安装。
二、具体代码如下:
#include <GL/glut.h>float x = 100.0f, y = 100.0f; // 初始位置
float deltaX = 0.0f, deltaY = 0.0f; // 位移增量void drawCharacter() {glBegin(GL_QUADS);glColor3f(1.0f, 0.0f, 0.0f); // 设置颜色为红色glVertex2f(x - 20, y - 20);glVertex2f(x + 20, y - 20);glVertex2f(x + 20, y + 20);glVertex2f(x - 20, y + 20);glEnd();
}void display() {glClear(GL_COLOR_BUFFER_BIT);drawCharacter();glutSwapBuffers();
}void update(int value) {x += deltaX;y += deltaY;// 边界检测,防止人物移出窗口if (x > glutGet(GLUT_WINDOW_WIDTH) - 20 || x < 20) {deltaX *= -1;}if (y > glutGet(GLUT_WINDOW_HEIGHT) - 20 || y < 20) {deltaY *= -1;}glutPostRedisplay(); // 重新绘制窗口glutTimerFunc(16, update, 0); // 设置定时器,每16毫秒调用一次update函数
}void specialKeys(int key, int x, int y) {switch (key) {case GLUT_KEY_UP:deltaY = 5.0f; // 向上移动deltaX = 0.0f;break;case GLUT_KEY_DOWN:deltaY = -5.0f; // 向下移动deltaX = 0.0f;break;case GLUT_KEY_LEFT:deltaX = -5.0f; // 向左移动deltaY = 0.0f;break;case GLUT_KEY_RIGHT:deltaX = 5.0f; // 向右移动deltaY = 0.0f;break;}
}int main(int argc, char** argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow("OpenGL Character Animation");glutInitWindowSize(800, 600);glutInitWindowPosition(100, 100);glutDisplayFunc(display);glutSpecialFunc(specialKeys); // 处理特殊键盘事件glutTimerFunc(25, update, 0); // 设置定时器,每25毫秒调用一次update函数glutMainLoop();return 0;
}
希望你也学会了,更多编程请来二当家的素材网:https://www.erdangjiade.com
相关文章:
利用OpenGL图形库实现人物动画移动效果
使用OpenGL库实现人物动画移动效果需要涉及到更复杂的图形编程和事件处理。以下是一个简单的例子,使用OpenGL和GLUT库实现人物的基本动画移动效果。 确保你已经安装了OpenGL和GLUT。你可以使用包管理器或者从官方网站下载并安装。 一、如果你已经安装过了OpenGL和…...
History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)
目 录 一、history命令介绍 1、history命令是什么? 2、history的主要功能 二、history命令的用法 1、语法 2、选项说明 3、命令实例 三、history和历史记录文件bash_history 四、history命令的相关配置 1,命令带时间展示-HISTTI…...
apisix 单机部署 linux
安装etcd: cd /home/app rz tar -zxvf etcd-v3.5.4-linux-amd64.tar.gz cd etcd-v3.5.4-linux-amd64 vim start.sh内容: #!/bin/sh nohup etcd --name infra0 --initial-advertise-peer-urls http://127.0.0.1:2380 \--listen-peer-urls http://127.0.…...

Redis 面试题 | 06.精选Redis高频面试题
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

2008年苏州大学837复试机试C/C++
2008年苏州大学复试机试 题目 编写程序充成以下功能: 一、从键盘上输入随机变量x的 10个取样点。X0,X1—X9 的值; 1、计算样本平均值 2、判定x是否为等差数列 3、用以下公式计算z的值(t0.63) 注。请对程序中必要地方进行注释 补充:个人觉得这个题目回忆…...
MySQL笔记-information_schema库中COLUMNS表的一些笔记
mysql建表中可以添加comment,也就是注释,这些注释会写到information_schema库的COLUMNS表中,可以使用如下SQL语句进行查询: SELECT COLUMN_NAME, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA your_data…...

归并排序模板
模板在文末,以下步骤方便理解记忆。 先贴一张快速排序模板步骤,用于对比记忆 归并排序步骤: (0)如果数组左边界L ≥ 数组右边界,则不需要排序,直接return。 (1)直接取…...

【NVIDIA】Jetson Orin Nano系列:安装 Qt6、firefox、jtop、flameshot
1、使用命令安装 sudo apt install qtcreator sudo apt install qt6-* sudo apt install libqt6* sudo apt install qml-qt6 sudo apt install qmlscene-qt6 sudo apt install assistant-qt6 sudo apt install designer-qt62、启动 qtcreator 3、常用工具安装 sudo apt in…...
Fastapi+Jsonp实现前后端跨域请求
文章目录 一、实现方法1.后端部分【Fastapi】2.前端部分【JS】二、测试一、实现方法 1.后端部分【Fastapi】 # coding:utf-8import json from fastapi import FastAPI, Response from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI(...

MacOS受欢迎的数据库开发工具 Navicat Premium 15 中文版
Navicat Premium 15 Mac是一款数据库管理工具,提供了一个全面的解决方案,用于连接、管理和维护各种数据库系统。以下是Navicat Premium 15 Mac的一些主要功能和特点: 软件下载:Navicat Premium 15 中文版下载 多平台支持ÿ…...

helm---自动化一键部署
什么是helm?? 在没有这个helm之前,deployment service ingress helm的作用就是通过打包的方式,把deployment service ingress 这些打包在一块,一键式部署服务,类似于yum 官方提供的一个类似于安装仓库的功能,可以实…...
求助帖(setiosflags)的左右对齐问题:
以后自己要注意,如果两个相互矛盾的标志同时被设置,如先设置 setiosflags(ios::right),然后又设置 setiosflags(ios::left),那么结果可能就是两个标志都不起作用。因此,在设置了某标志,又要设置其他与之矛盾…...

升级8.0:民生手机银行的“内容解法”
数字化浪潮,滚滚来袭。 随着数字中国建设的持续推进,数字经济正在蓬勃发展。中商产业研究院分析师预测,2023年中国数字经济市场规模将增长至56.7万亿元,占GDP的比重将达到43.5%。 在此浪潮下,数字化的触角蔓延到各行…...

Kubernetes多租户实践
由于namespace本身的限制,Kubernetes对多租户的支持面临很多困难,本文梳理了K8S多租户支持的难点以及可能的解决方案。原文: Multi-tenancy in Kubernetes 是否应该让多个团队使用同一个Kubernetes集群? 是否能让不受信任的用户安全的运行不受信任的工作…...

【GEE】GEE反演地表温度相关问题说明(空洞、Landsat9数据集等)
之前分享了基于GEE-Landsat8数据集地表温度反演(LST热度计算),最近有很多小伙伴私信我很多问题,一一回复太慢了,所以今天写篇文章统一回答一下大家的问题。 问题1:数据有很多空洞、某些条带没有数据等 问题…...
【蓝桥备赛】数组分割——组合数学?
题目链接 数组分割 个人思路 两个数组都需要和为偶数,那么就去思考一个数组如何才能和是偶数呢?? 数组里肯定要么是奇数要么是偶数,偶数无论有多少个,都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数&…...

iphone5s基带部分电源部分主主电源供电及
时序: 1.,基带电源的供电,基带电源也叫pmu。 首先时序图说电池提供供电,电池是J6接口,视频习惯把接口称之为座子。查U2_RF芯片,发现供电信号为PP_BATT_VCC_CONN,但是没查到跟电池座子有关系,电池座子写的是…...

【每日一题】按分隔符拆分字符串
文章目录 Tag题目来源解题思路方法一:遍历方法二:getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一:遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…...

spawn_group_template | spawn_group | linked_respawn
字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来,这样如果你杀死boss, creatures | gameobjects 在副本重置之前…...

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等
文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...