怎么通过opengl实现一个二维图形的平移和曲线移动呢?
请大神们解释清楚下,最好附代码,对于平移glTranslate具体怎么用,我绘制了简单的矩形,但是运用glTranslate之后,矩形并没有移动啊?求解!另外怎么实现物体...
请大神们解释清楚下,最好附代码,对于平移glTranslate具体怎么用,我绘制了简单的矩形,但是运用glTranslate之后,矩形并没有移动啊?求解!另外怎么实现物体沿曲线移动呢。跪求解答,重金答复。
#include<gl/glut.h>#include<windows.h>
void display()
{
float i=0.0,x=-1.0,y;
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity ();
for(i=0;i<10;i++)
{
x=x+0.1;y=0;
glTranslatef(x,y,0);
glBegin(GL_POLYGON);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,0.2);
glVertex2f(0.2,0.2);
glVertex2f(0.2,-0.2);
glEnd();
glFlush();
Sleep(1000);
}
}
int main(int argc,char ** argv){
glutInit(& argc, argv);
glutCreateWindow("traffic control");
glutDisplayFunc(display);
glutMainLoop(); return 0;
}
如上,矩形移到了左边,但是我想要的是移动过程的动画效果,求解?? 展开
#include<gl/glut.h>#include<windows.h>
void display()
{
float i=0.0,x=-1.0,y;
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity ();
for(i=0;i<10;i++)
{
x=x+0.1;y=0;
glTranslatef(x,y,0);
glBegin(GL_POLYGON);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,0.2);
glVertex2f(0.2,0.2);
glVertex2f(0.2,-0.2);
glEnd();
glFlush();
Sleep(1000);
}
}
int main(int argc,char ** argv){
glutInit(& argc, argv);
glutCreateWindow("traffic control");
glutDisplayFunc(display);
glutMainLoop(); return 0;
}
如上,矩形移到了左边,但是我想要的是移动过程的动画效果,求解?? 展开
展开全部
应该是你translate使用错误,translate使用时应该在绘制矩形之前。
实现物体曲线移动:做一个随时间刷新的命令响应,隔一个刷新时间更新一下物体的坐标。例如做正弦函数移动:
OnTimer
{
xpos=sin(t);
ypos=cos(t);
zpos=tan(t);
t++
gltranslatef(xpos,ypos,zpos);
gldraw*******();//你要绘制的物体
}
实现物体曲线移动:做一个随时间刷新的命令响应,隔一个刷新时间更新一下物体的坐标。例如做正弦函数移动:
OnTimer
{
xpos=sin(t);
ypos=cos(t);
zpos=tan(t);
t++
gltranslatef(xpos,ypos,zpos);
gldraw*******();//你要绘制的物体
}
追问
额,我有点菜,没有太理解,您能给我个小例子程序吗?我又增加了问题补充,麻烦您帮忙看下!
追答
你这个程序的算法错了,你的display函数中每次都对X进行了初始化为-1,也就是说,每次执行这个函数,物体的位置都没有变化。再有,你为什么要用for循环,虽然你的循环中X有了变化,比如变化了10次,但是,系统进行绘图刷新的时候不会管你这些变化的,他只会读取一个值。
改成这样试试吧
#include#include
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity ();
x=x+0.1;y=0;
glTranslatef(x,y,0);
glBegin(GL_POLYGON);
glVertex2f(-0.2,-0.2);
glVertex2f(-0.2,0.2);
glVertex2f(0.2,0.2);
glVertex2f(0.2,-0.2);
glEnd();
glFlush();
Sleep(1000);
}
int main(int argc,char ** argv){
float i=0.0,x=-1.0,y;
glutInit(& argc, argv);
glutCreateWindow("traffic control");
glutDisplayFunc(display);
glutMainLoop(); return 0;
}
展开全部
如果您使用错误翻译翻译使用之前绘制一个矩形。
移动对象曲线:随着时间的推移,刷新命令响应的时间间隔更新的对象的坐标的刷新时间。例如,正弦函数手机:
的OnTimer
{
XPOS = SIN(T);
ypos = COS(T);
zpos =棕褐色(T);
T + +
的glTranslatef(XPOS,ypos,zpos),
gldraw *******();/ /你想要的对象画
}
移动对象曲线:随着时间的推移,刷新命令响应的时间间隔更新的对象的坐标的刷新时间。例如,正弦函数手机:
的OnTimer
{
XPOS = SIN(T);
ypos = COS(T);
zpos =棕褐色(T);
T + +
的glTranslatef(XPOS,ypos,zpos),
gldraw *******();/ /你想要的对象画
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询