| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1235 人关注过本帖
标题:关于OpenGL 动画的问题
只看楼主 加入收藏
stonexiong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
关于OpenGL 动画的问题
请教各位大侠,最近我在做关于OpenGL动画方面的作业。我要做的是一个显示模块,希望在场景最左边随机产生物体(假设长方体)并匀速向右运动。

我的代码如下:
#include "windows.h"   
#include <GL/gl.h>   
#include <GL/glaux.h>   
#include <gl/glut.h>   

float step;   

void init(void);
void display(void);
void quad(void);
void reshape (int w, int h);
void keyboard(unsigned char key, int x, int y);
void Animate(void);
   

void init(void)   
{   
glClearColor (0.0, 0.0, 0.0, 0.0);   
glShadeModel (GL_FLAT);   
}   

void display(void)   
{   
glClear (GL_COLOR_BUFFER_BIT);   
glColor3f (0.5, 0.7, 1.3);   
glLoadIdentity ();   
gluLookAt (0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0);   
glTranslatef(step,0.0,0.0);
for(int i=0;i<2;i++)
{
quad();
glTranslatef(2.0,2.0,0.0);
quad();

}
glFlush ();   
}   

void quad(void)
{
glBegin(GL_QUADS); // 绘制正方形
glVertex3f(-7.0f, 0.5f, 0.0f); // 左上
glVertex3f( -5.0f, 0.5f, 0.0f); // 右上
glVertex3f( -5.0f,-0.5f, 0.0f); // 左下
glVertex3f(-7.0f,-0.5f, 0.0f); // 右下
glEnd(); // 正方形绘制结束
}

void reshape (int w, int h)   
{   
glViewport (0, 0, (GLsizei) w, (GLsizei) h);   
glMatrixMode (GL_PROJECTION);   
glLoadIdentity ();   
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);   
glMatrixMode (GL_MODELVIEW);   
}   

void keyboard(unsigned char key, int x, int y)   
{   
switch (key)   
{   
case 27:   
exit(0);   
break;   
}   
}   

void Animate(void)
{
step+=0.001;
display();
}

void main(int argc, char** argv)   
{   
glutInit(&argc, argv);   
glutInitDisplayMode (GLUT_SINGLE|GLUT_RGB);   
glutInitWindowSize (500, 200);   
glutInitWindowPosition (100, 100);   
glutCreateWindow (argv[0]);   
init ();   
glutDisplayFunc(display);   
glutReshapeFunc(reshape);   
glutKeyboardFunc(keyboard);   
glutIdleFunc(Animate);
glutMainLoop();   

}  

可我怎么才能在display函数中随机产生一个长方形,并跟着前一帧长方形一起向右匀速运动,在代码中我是手动添加一个三个方形,我希望做到随机产生。希望各位大侠指点。在下先谢谢咯。
搜索更多相关主题的帖子: OpenGL 动画 
2010-08-23 10:18
stonexiong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-23
收藏
得分:0 
小弟在这里跪求啦。
2010-08-23 10:19
stonexiong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-23
收藏
得分:0 
在线等啊
2010-08-23 17:22
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:10 
void quad(void)
{
glBegin(GL_QUADS); // 绘制正方形
glVertex3f(-7.0f, 0.5f, 0.0f); // 左上
glVertex3f( -5.0f, 0.5f, 0.0f); // 右上
glVertex3f( -5.0f,-0.5f, 0.0f); // 左下
glVertex3f(-7.0f,-0.5f, 0.0f); // 右下
glEnd(); // 正方形绘制结束
}
这是你的绘图函数,你所谓的随机无非是指正方形的位置、大小随机。你用随机函数产生上述坐标值不就行了?

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-23 20:49
stonexiong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-8-23
收藏
得分:0 
回复 4楼 东海一鱼
谢谢东海一鱼的回复,我是希望做到的事,例如过50ms画面上多一个方形,并且跟前帧画面的方形一起往右移动。请问东海一鱼能不能做到这样啊?
2010-08-24 09:25
weble
Rank: 2
等 级:论坛游民
帖 子:59
专家分:83
注 册:2009-4-12
收藏
得分:10 
如果要做动画,就要使用双缓冲,GLUT_SINGLE改成GLUT_DOUBLE,并且画好一帧图像的时候应该使用glutSwapBuffers()来交换前后缓冲,否则动画效果很不好。
另外,Animate(void)里面不应该直接调用display,而应该调用glutPostRedisplay(),它会按照图形流水线的方式来重绘场景

路漫漫其修远兮,吾将上下而求索
2010-08-26 00:16
快速回复:关于OpenGL 动画的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017076 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved