首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在OpenGL中实现动画

在OpenGL中实现动画
EN

Stack Overflow用户
提问于 2012-02-27 03:45:34
回答 1查看 597关注 0票数 0

我很难想出一种方法来实现类似吐温的动画,比如移到currentX+3,在那里你只放了deltaX,剩下的就被插进去了。我现在要做的是:

绘图/opengl线程,它跟踪绘图时间并处理框架:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onDrawFrame(GL10 gl) {

    endingTime = System.currentTimeMillis();
    int timeElapsed = (int) (endingTime - startingTime);

    if (timeElapsed < FRAMEDURATION_MILISEC) {
        try {
            Thread.sleep(FRAMEDURATION_MILISEC - timeElapsed);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    startingTime = System.currentTimeMillis();
    Game.renderGame(gl);
}

和一个逻辑线程,它通过更改GameObjects‘x和y值来激活:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static long RATE = 30l; // times
static long duration = 1000l / RATE;

public void run() {
    lastUpdate = System.currentTimeMillis();

    long dur = duration; // copy

    while (Game.running) {

        long tElapsed = System.currentTimeMillis() - lastUpdate;

        if (tElapsed >= dur) {
            lastUpdate = System.currentTimeMillis();
            Game.updateGame(tElapsed);
        } else {
            try {
                GameLogicThread.sleep(dur - tElapsed);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

我想要实现一个动画类,例如,我可以为GameObject设置一个x的差异,并将这个动画对象应用到GameObject中,以便在绘图或逻辑循环中更新位置。

我不知道该在哪里做这件事,也不知道该如何保持一个干净的结构。有人能帮我吗?

编辑:

谢谢,我现在做了一个GLAnimation类,您可以通过它传递dX、dY、dRotation、dScale等,然后计算出对象每毫秒必须更改的速度。通过将此动画对象调用应用于GameObject,因此更新和呈现调用可以传递timeElapsed以移动对象。谢谢兹科德!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-27 04:58:48

所以,从本质上说,你现在谈论的情况是一个物理线程(“逻辑线程”)和一个图形线程。我认为你想问自己的第一个问题是,是否值得把它们分成不同的线程;你的逻辑/物理实际上是否计算密集到足以对你的框架产生负面影响?对于一个简单的游戏,您将保存bug和努力,保持他们在一个循环。对于每个功能类别,代码肯定应该使用不同的文件进行分解,但是它们都可以在同一个线程上运行(步骤逻辑一次,绘制,重复)。

采用单线程方法的原因之一是现在看来你的物理运行速度越快越好,这实际上不是个好主意。你会因为小的精度增加而消耗大量的能量--可能是精度下降,这取决于游戏代码的外观。除非你的物理非常复杂,而且需要很高的精度,否则你的物理框架要比你的图形框架高得多。

我喜欢您的动画对象的想法;您如何做到这一点在很大程度上取决于GameObjects可以包含什么或者您的动画对象可能想要改变什么。我建议编写GameObject以符合动画对象可以用来对其进行变异的协议;如果您在C++中,最简单的实现方法是让所有GameObjects继承根GameObject类。然后,您的动画对象可以包含有关如何修改GameObject的信息。

如果我们在C++,我建议:

根GameObject类方法:

其他状态游戏对象所拥有的position

  • set/get orientation

  • set/get设置/获取
  • ;大小?颜色?速度?

根动画类是一个具有一个(虚拟)方法的虚拟类:

  • 将动画应用于对象

然后子类动画根类来执行单独的动画,例如AnimationTranslate可以在对象的位置和角度上添加一个偏移量,或者AnimationScale可以改变大小,或者AnimationGravity可以将对象加速到屏幕底部。

类似的设计可以在任何面向对象的语言中完成。你也可以用直截了当的C来完成它;如果你这样做了,你可能会想要把函数指针成员放入你的结构中。如果您使用的语言具有sum类型,则可以使用sum类型代替继承层次结构用于动画;同样的想法也适用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9464470

复制
相关文章
Python+OpenGL切分图形窗口在多视区中显示不同动画
编写Python程序,调用OpenGL,切分图形窗口,在不同的视口中显示旋转的三角形。
Python小屋屋主
2022/04/13
9910
Python+OpenGL切分图形窗口在多视区中显示不同动画
Python+OpenGL实现简单的矩形旋转动画
安装和配置Python+OpenGL开发环境,详见Win10系统配置Python3.6+OpenGL环境详细步骤
Python小屋屋主
2022/03/07
1.4K0
Python+OpenGL实现简单的矩形旋转动画
Android开发笔记(一百五十七)使用OpenGL实现翻书动画
上一篇文章介绍了如何通过纹理渲染绘制地球仪,当然OpenGL的三维图形处理能力是很强大的,只要善于利用OpenGL,就能很方便地虚拟各种现实生活中的动画效果。本文再来谈谈使用OpenGL实现浏览电子书时候的翻书动画。 博主早期的博文《Android开发笔记(十八)书籍翻页动画》已经介绍了如何通过贝塞尔曲线实现翻书动画的过程,不过该方式展示动画时存在卡顿的现象,并且在书页范围之外还会经常拖着长长的影子,实在是有碍观瞻。现在有了OpenGL,借助三维图形技术能够让翻书动画显得更为平滑、更加逼真。正好博主偶然间淘到了一个外国人写的OpenGL翻书动画,感觉显示效果还不错,故而简单改造了一下贡献出来,方便有需要的朋友。 通过OpenGL描绘三维图形的原理,可参见前面几篇文章,这里就不啰嗦了,下面直接观看使用OpenGL实现翻书动画的效果。 首先是从前往后翻页的效果动画:
aqi00
2019/01/18
1.7K0
2014-10-31Android学习------在小窗口Dialog中实现GIF动画--------GIF动画实现
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个GIF动画完美实现 源码 百度搜就知道很多下载的地方 我写的东西有可能比较乱,如果单一的篇章没看明白,请看上一篇文章
wust小吴
2022/03/07
6590
2014-10-31Android学习------在小窗口Dialog中实现GIF动画--------GIF动画实现
OpenGL(五)-- OpenGL中矩阵的变换OpenGL(五)-- OpenGL中矩阵的变换
通过模型矩阵,观察者矩阵(View Matrix),投影矩阵(Projection Matrix)三步矩阵变换后最终确定该展示怎样的图像。要注意的是矩阵的计算时从右往左的所以: result = 投影矩阵 * 观察者矩阵 * 模型矩阵。
用户8893176
2021/08/09
2.3K0
OpenGL(五)-- OpenGL中矩阵的变换OpenGL(五)-- OpenGL中矩阵的变换
OpenGL与OpenGL在移动端的应用
OpenGL首先我们从字面意思来理解:Open Graphics Library,开放的图形库,图形库自然是处理图形的,所以简单来说OpenGL就是用来处理图形的一个三方库。 稍微技术流一点,作如下解释:是用于渲染2D,3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
清墨
2019/11/15
2.7K0
OpenGL与OpenGL在移动端的应用
实验8 OpenGL太阳系动画
  模拟简单的太阳系,如图A.8所示。太阳在中心,地球每365天绕太阳转一周,月球每年绕地球转12周。另外,地球每天24个小时绕它自己的轴旋转。
步行者08
2020/10/27
2.2K0
实验8 OpenGL太阳系动画
在ESP32上移植OpenGL实现(一)
看@FrostMiku最近一直在玩ESP32,而且看起来真的很有趣,所以就求了个链接买了一块板子自己玩。咱也很想玩玩嵌入式嘛。不过ESP32的板子倒是真便宜,基本都在二三十左右。我这块由于带了个TFT屏,所以稍贵,价格是38。到手之后发现屏幕虽然不大,但是分辨率有135×240,所以整体显示效果还是很清晰的。正好最近在学OpenGL,于是就觉得移植一个OpenGL实现玩玩。
KAAAsS
2022/01/14
2.7K0
在ESP32上移植OpenGL实现(一)
OpenGL 实现视频编辑中的转场效果
现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了。
音视频开发进阶
2019/10/22
3K0
在布局切换之间实现Transition动画
同一个Activity之间,布局切换是可以有动画效果的,下面是仿照API Demo中的一个例子,如下图:
用户1108631
2019/08/17
1.5K0
在Activity切换之间实现Transition动画
在Android 5.0执行,如果需要在Activity切换之间实现动画,需要实现 overridePendingTransition()方法,并实现入场动画和退场动画。而在5.0之后,出现了一些Material Design的转场动画,先看下demo样子。
用户1108631
2019/08/17
1.9K0
GPX数据在mapboxGL中轨迹动画
喜欢跑步的人都会选择一款APP来自己跑步的,常用的有keep、悦跑圈、华为健康等等,每次跑完步,会根据跑步的轨迹绘制轨迹动画。今天咱们讲讲技术,不扯淡,讲一下在mapboxGL中如何实现类似的效果。
牛老师讲GIS
2020/06/08
2K0
GPX数据在mapboxGL中轨迹动画
在 macOS 下配置 OpenGL
下载 glad,macOS 据说只支持 3.3,所以我选择了 gl: 3.3 和 Profile: Core。 解压后将 glad 文件夹直接放入 /usr/local/Cellar 文件夹下。
云游君
2021/05/21
6790
Python在tkinter界面中显示matplotlib动画
在tkinter应用程序界面中同时显示matplotlib绘制的动态折线图、动态散点图和动态柱状图。
Python小屋屋主
2020/02/23
5K0
可视化(番外篇)——在Eclipse RCP中玩转OpenGL
  最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容,但是没有强调版本,造成我在搭建环境以及编码时阻碍重重,本篇的重点主要是针对几个遇到的问题,强调版本的重要性以及这个问题的主要思路。   环境介绍   eclipse:  eclipse-dsl-luna-SR1a-win32(32位)   jdk:    jdk1.6.0_22(32位)   opengl:
JackieZheng
2018/01/15
1.1K0
可视化(番外篇)——在Eclipse RCP中玩转OpenGL
在.NET中实现彩色光标,动画光标和自定义光标
using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection;
Java架构师必看
2021/03/22
1.8K0
ol中闪烁点动画的实现
实现如图的动画,可以用两种思路: 1.overlay+css3动画实现; 2.canvas动画实现。
牛老师讲GIS
2019/08/29
1.7K0
ol中闪烁点动画的实现
CSS 3.0实现音阶加载中动画
给大家分享一个用CSS 3.0实现的音阶加载中的动画,效果如下: 以下是代码实现,欢迎大家复制粘贴和收藏。 <!DOCTYPE html> <html lang="en"> <head>
越陌度阡
2020/11/26
9350
CSS 3.0实现音阶加载中动画
在项目中运用Meterial Design实现动画效果
CoordinatorLayout,是继承自 FrameLayout 。该布局非常好用,能够协调子元素之间的依赖关系。CoordinatorLayout通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果。常常与CoordinatorLayout一起使用的控件有AppBarLayout、CollapsingToolbarLayout、NestedScrollView以及Toolbar。这几个控件相互配合,可以写出一个类似上面效果图不错的页面出来。
程序员小猿
2021/01/18
4040
在项目中运用Meterial Design实现动画效果
OpenGL (二)--OpenGL中那些晦涩难懂的名词、动词解析OpenGL (二)--OpenGL中那些晦涩难懂的名词、动词解析
说起图形处理,一定是离不开GPU的,因为我们所做的操作,最终都会由GPU负责展示到监视器上。而这个过程中就离不开计算,计算每一个像素点的颜色信息。所以GPU是计算图像数据的单元。 说起计算,在我的理解里CPU就是专门用于做二进制运算的计算单元、控制单元,可以处理复杂的逻辑和依赖,那为什么还需要GPU呢?
用户8893176
2021/08/09
1.1K0
OpenGL (二)--OpenGL中那些晦涩难懂的名词、动词解析OpenGL (二)--OpenGL中那些晦涩难懂的名词、动词解析

相似问题

在OpenGL中利用核心动画实现动画

30

使用Assimp在OpenGL中实现动画

11

在OpenGL动画中实现延迟/刷新

23

用OpenGL实现弹跳动画

14

如何在opengl中实现逐帧动画

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文