• Stars
    star
    181
  • Rank 212,110 (Top 5 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created over 6 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

简单的2D物理引擎(CMake,OpenGL)

clib2d(C++ 2D物理引擎)

已整合Qt:Qlib2d

apollonia的基础上,结合先前的C# 2D物理引擎,从零开始打造一个简单的2D物理引擎。

目前已经完成基本功能,目前正整合cliblisp

整合cliblisp进度:

  1. 按键盘数字7自动运行情景一脚本:box #(pos 0.5d 0.5d) #(size 0.4d 0.5d) #(mass 1d)创建一个矩形物体(#号替换为反引号)

介绍

先前所做C#版本的PhysicsEngine代码翻译自JS物理引擎matter.js

本次借鉴OpenGL工程apollonia,两者取长补短。

代码为CMake跨平台,需要使用库:

  • freeglut
  • opengl32
  • glu32
  • glm(已移除)

Win7上使用CLion+MinGW编译没有问题,Linux、MacOS系统下暂未尝试,64位系统需要“-m32”编译。

先前立下雄心壮志制作简单的2D物理引擎(零),如今在一点点实现中~


使用

  • 键盘数字1到7:切换经典场景
  • WASD:给所有物体分别添加四个方向的力
  • QE:给所有物体添加旋转
  • G:切换重力
  • 空格/鼠标离开:暂停

计划

进度与注释:

  • 第一部分已完成
  • 第二部分已完成
  • 第三部分已完成,单文件共1537行代码
  • 第四部分已完成,实现圆与多边形的碰撞,单文件共2069行代码
  • 第五部分进行中,用cliblisp作控制台语言,拆分代码,不再是单文件,长期更新

分阶段最小化原则添加代码,功能由简到繁。前期的代码99%引自apollonia(为第一时间可以运行),后面会从头开始写。

文章发表在知乎专栏:学习C++

目录(暂定):

  1. 【c1p1】使用OpenGL搭建基本框架
  2. 【c1p2】工厂模式,渲染第一个polygon body矩形物体
  3. 【c1p3】时钟同步,给物体添加重力gravity
  4. 【c1p2】绘制物体的受力force及速度向量velocity
  5. 【c1p2】给物体添加旋转rotate
  6. 【c1p3】求几何凸多边形的centroid重心和inertia转动惯量(刚体的数据结构)
  7. 【c1p3】给物体添加线冲量和角冲量
  8. 【c2p1】collision detection 碰撞检测
    1. 【c2p1】AABB方法(仅限矩形)及SAT方法(仅限凸包)
    2. 【c2p2】计算压力作用点(仅限两个以下)位置(及绘制),多边形裁剪
    3. 【c2p3】计算压力方向
    4. 【c2p3】实现摩擦力friction
    5. 【c2p3】设置弹性碰撞系数bias
    6. 【c2p3】碰撞检测的动态更新vector
    7. 【c2p3】休眠状态的实现
  9. 【c3p1】joint 关节(铰链)的实现
    1. 【c3p1】关节的数据结构
    2. 【c3p1】关节的受力分析
  10. 实现几种基本场景(分别按键盘上的数字1-7)
    1. 【c2p3】三角形
    2. 【c2p3】金字塔
    3. 【c2p3】方块堆叠
    4. 【c3p1】牛顿摆(可测试完全弹性碰撞)
    5. 【c3p1】铰链(测试关节joint结构)
    6. 【c4p2】圆与多边形金字塔(测试圆的碰撞)
    7. 【c5p2】测试cliblisp控制接口
  11. 实现其他特性
    1. 【c4p1】添加圆物体
    2. 【c4p2】碰撞检测(多边形与圆)
    3. 【c4p2】碰撞检测(圆与圆)
  12. 算法测试(有空做)
    1. 遗传算法
    2. 神经网络
    3. 流体力学
  13. 整合cliblisp胶水语言
    1. 【c5p1】整合代码
    2. 【c5p2】编码添加物体
    3. 控制台添加物体

改进

想到的如下优化:

  1. 物体休眠,优化碰撞检测
  2. 修正碰撞点,添加弹力碰撞系数

改进了一些问题:

  • 拖动窗口导致的问题
  • 标题位置随分辨率不一致的问题
  • 将圆的碰撞实现转化为多边形的实现,解决碰撞问题

目前遇到的问题:

  • 碰撞机制存在问题
  • 圆与多边形的碰撞检测存在问题
  • 圆粘住边界的问题圆无法弹跳牛顿摆的问题
  • 圆的摩擦力问题

文章

物理引擎系列:

LISP系列:

截图

joint

参考

  1. apollonia
  2. matter.js
  3. PhysicsEngine
  4. OpenGL
  5. GLUT
  6. Box2D
  7. Chipmunk2D
  8. cliblisp

More Repositories

1

MiniOS

Simple DIY OS
C
160
star
2

GameFramework

简易游戏框架,整合D2D和Lua
C++
107
star
3

jMiniLang

用Kotlin实现的编译器和虚拟机,并在此基础上构建操作系统。
Kotlin
65
star
4

clibparser

General LR Parser(CMake,C++)
C++
63
star
5

PhysicsEngine

Physics Engine inspired by matter.js
C#
46
star
6

CParser

解析C语言的解释器
C++
46
star
7

tinix

forked from http://code.taobao.org/p/tinixdev/src/
C
44
star
8

learnstl

手撸STL库
C++
41
star
9

cliblisp

Simple Lisp VM(C++ 14)
C++
33
star
10

GraphEditor

图形编辑器(MFC VC6.0)
C++
29
star
11

CMiniLang

简易C语言编译器+虚拟机(CMake,C++14)
C++
26
star
12

clibalgserver

算法可视化网站
C++
21
star
13

Qlib2d

clib2d with lisp using Qt 5.11 (VS2017,x64)
C++
15
star
14

C-Compiler

MFC project with UIEditView, code author(陆晓春)
C++
12
star
15

Inject

API Hook Test for Taskmgr.exe
C
10
star
16

Spy

Spy - find window
C++
9
star
17

clibjs

JS-like script(C++)
JavaScript
8
star
18

CEval

四则运算器(C++)——设计模式练习
C++
7
star
19

jProlog

Simple prolog language using ANTLR, dealing with simple logic problems/maze. The key is FOREACH and FILTER.
Java
6
star
20

OnlineReader

Online txt reader. 在线小说阅读,自动导入txt。
JavaScript
6
star
21

ElevatorSystem

电梯调度系统(MFC) 2014.10
C++
4
star
22

clibalgserver_mac

算法可视化网站 - MAC版
C++
4
star
23

clibrpg

2D RPG Game with React(nodejs)
JavaScript
4
star
24

clibjson

简易JSON解析器(参考CMiniLang)
C++
4
star
25

CCGuiFoundation

C++设计的GUI框架
C++
4
star
26

MyScript

LISP解释器(with ANTLR), IDE=VS2017
C++
3
star
27

translate

数字转人民币翻译系统
Java
2
star
28

NewsApp

C#
2
star
29

Popstar

Popstar implementation(MFC)
C++
2
star
30

Seat

基于Express和GraphQL的在线座位安排网站
JavaScript
1
star
31

CppShell

C++实现的Shell,支持管道和流。
C++
1
star
32

ACM

ACM相关练习用代码兼笔记
JavaScript
1
star
33

SimuCPU

CPU Simulator
C#
1
star
34

WaveAnimation

Wave animation MFC application from tortoisesvn
C++
1
star
35

clibui

GUI with clibjs and direct2d
C++
1
star
36

SimpleConsole

Simple Functional Interpreter
C#
1
star
37

SimuCircult

C# 模拟系列
C#
1
star
38

clibproxy

online proxy
JavaScript
1
star
39

RemoteConsole

Android App with MaterialDrawer and MQTT.
Java
1
star