OPENGL慢速动画在2 Icosaedres上
OPENGL SLOWER ANIMATION on 2 Icosaedres
我有下面的代码。有2个发光的二十叶草旋转得非常非常快。我应该怎么做才能使旋转变慢?我不太擅长 OpenGL,我尝试修改 Idle 函数的值,但它仍然没有变慢。
void
display(void)
{
static GLfloat amb[] =
{0.4, 0.4, 0.4, 0.0};
static GLfloat dif[] =
{1.0, 1.0, 1.0, 0.0};
amb[3] = dif[3] = cos(s) / 2.0 + 0.5;
glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);
glPushMatrix();
glTranslatef(-0.3, -0.3, 0.0);
glRotatef(angle1, 1.0, 5.0, 0.0);
glCallList(1); /* render ico display list */
glPopMatrix();
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_LIGHT2);
glDisable(GL_LIGHT1);
amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0;
glMaterialfv(GL_FRONT, GL_AMBIENT, amb);
glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);
glPushMatrix();
glTranslatef(0.3, 0.3, 0.0);
glRotatef(angle2, 1.0, 0.0, 5.0);
glCallList(1); /* render ico display list */
glPopMatrix();
}
void
idle(void)
{
angle1 = (GLfloat) fmod(angle1 + 0.8, 360.0);
angle2 = (GLfloat) fmod(angle2 + 1.1, 360.0);
s += 0.05;
glutPostRedisplay();
}
void
visible(int vis)
{
if (vis == GLUT_VISIBLE)
glutIdleFunc(idle);
else
glutIdleFunc(NULL);
}
在 c++ 中,我建议使用 std::chrono
来计算持续时间:
在开始应用程序的主循环之前,请记住开始时间:
#include <chrono>
typedef std::chrono::high_resolution_clock TClock;
typedef std::chrono::duration<long, std::milli> Tms;
TClock::time_point start_time; // global start time
....
start_time = TClock::now();
在idle
函数中计算持续时间:
double time_duration_seconds = 0.0; // past time in seconds
void idle(void)
{
TClock::time_point current_time = TClock::now();
long milli_seconds =
std::chrono::duration_cast<Tms>( current_time - start_time ).count();
time_duration_seconds = (double)milli_seconds / 1000.0;
}
可以轻松计算具有恒定间隔的旋转角度。以下代码以度为单位计算 5 秒内完整旋转的角度:
double interval1 = 5.0; // 5 seconds for 360 degrees
double angle1 = 360.0 * fmod(time_duration_seconds / interval1, 1.0f);
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用 GLUT 使用键停止动画?
- 使用对象数组对 SFML 进行动画处理
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 从精灵表在 sfml 中为精灵制作动画
- Qt3D 骨骼动画
- ASCII 旋转光标 (TUI) 动画出现问题
- 带有 std::cout 的多线程控制台文本动画
- 有没有办法像动画一样移动控制台窗口?
- 围绕特定轴对 qt3d 旋转进行动画处理
- 如何在Qt中设置围绕固定点的线的动画
- 试图用c++制作一个动画加载圈
- 精灵动画查看器应该使用哪些Qt小部件
- 骨骼动画:变换矩阵(collada)之间的插值
- 使用增量时间的对象动画
- 精灵没有动画
- 使用 GDI+ 在C++中制作流畅的动画
- OPENGL慢速动画在2 Icosaedres上