Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OPENGL-三角形移动_C++_Opengl - Fatal编程技术网

C++ OPENGL-三角形移动

C++ OPENGL-三角形移动,c++,opengl,C++,Opengl,我的opengl项目有问题。我必须创建沿x轴移动的三角形。它必须改变颜色并掉头。我创造了这个,但我不知道加速是怎么回事 #include <stdio.h> #include <stdlib.h> #include<iostream> #include <math.h> #include<iomanip> #include <time.h> #include "glut.h" #include "math.h"

我的opengl项目有问题。我必须创建沿x轴移动的三角形。它必须改变颜色并掉头。我创造了这个,但我不知道加速是怎么回事

#include <stdio.h>      
#include <stdlib.h> 
#include<iostream>
#include <math.h>
#include<iomanip>
#include <time.h>
#include "glut.h"
#include "math.h"

using namespace std;
float x = 0, y = 0, angle = 0, anglen = 0,q=1,w=1,e=1,qn=0,wn=0,en=0;
double xn = 0,c=0;
int licznik = 0;
int zmiana = 0,a=0;
bool flaga = true;


static void timerCallback(int value)
{
if (xn!=x)
{

    licznik++; //odliczanie kolejnych klatek

    x += xn / 100.0;
    angle += anglen / 100.0;
    q += qn / 100.0;
    w += wn / 100.0;
    e += en / 100.0;
    if (q > 1){ q = 0; }
    if (w > 1){ w = 0; }
    if (e > 1){ e = 0; }

    glutPostRedisplay();
    glutTimerFunc(50, timerCallback, value); //ustawienie ponownego wywołania naszej funkcji "timerCallback" po 100 ms
}
if (licznik==100)
{
    if (a == 0){ x = -0.8; glutPostRedisplay(); }
    else if (a == 1){ x = 0; glutPostRedisplay(); }
    else if (a == 2){ x = 0.8; glutPostRedisplay(); }
    else if (a == 3){ x = 0; glutPostRedisplay(); }

    xn = 0;
    anglen = 0;
    licznik = 0;
    zmiana = 1; 
}
}


void trojkat(float x, float y, float angle)
{
glColor3f(q, w, e);
glPushMatrix();
glTranslatef(x, y, 0);
glRotatef(angle, 0, 0, 1);


glBegin(GL_POLYGON);
glVertex2f(0, 0.2);
glVertex2f(-0.2, -0.2);
glVertex2f(0.2, -0.2);

glEnd();
glPopMatrix();
}


void przesuwanie()
{

a++;
if (a >3){ a = 0; };
if ((a == 1) || (a == 2)){ flaga = true; }
else if ((a == 0) || (a == 3)){flaga = false;}


if (flaga == true)
{
    xn += .8; anglen += 360; 
    qn += .1;
    wn += .7;
    en += .3;
}
else if (flaga == false)
{
    xn -= .8; anglen += 360; 
    qn += .8;
    wn += .4;
    en += .3;
}
zmiana = 4;
//wyzerowanie zliczania klatek
timerCallback(0); //wywołanie funkcji która będzie się okresowo powtarzać
}

void przesuwanie_w_lewo()// pierwsze przesuniecie o połowe jednostki
{
xn = 0;
xn -= .8;
anglen += 360;
qn -= .9;
wn -= .7;
en -= .3;

zmiana = 4;
timerCallback(0);
//wywołanie funkcji która będzie się okresowo powtarzać

}

void display(void)
{
/* clear window */

glClear(GL_COLOR_BUFFER_BIT);

trojkat(x, y, angle);

glFlush();

if ((zmiana == 0) || (zmiana == 1) || (zmiana == 2))
{
    if (zmiana == 0)
    {
        przesuwanie_w_lewo();
    }
    else if (zmiana==1)
    {
        przesuwanie();
    }
   }
 }




void init()
{
/* set clear color to black */
glClearColor(0.0, 0.0, 0.0, 0.0);
/* set fill  color to white */


/* set up standard orthogonal view with clipping */
/* box as cube of side 2 centered at origin */
/* This is default view and these statement could be removed */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutInitWindowPosition(0, 0);
glutCreateWindow("trojkat");
glutDisplayFunc(display);
init();
glutMainLoop();

return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括“glut.h”
#包括“math.h”
使用名称空间std;
浮动x=0,y=0,角度=0,角度n=0,q=1,w=1,e=1,qn=0,wn=0,en=0;
双xn=0,c=0;
int-licznik=0;
int-zmiana=0,a=0;
bool-flaga=true;
静态无效timerCallback(int值)
{
如果(xn!=x)
{
licznik++;//odliczanie kolejnych klatek
x+=xn/100.0;
角度+=角度/100.0;
q+=qn/100.0;
w+=wn/100.0;
e+=en/100.0;
如果(q>1){q=0;}
如果(w>1){w=0;}
如果(e>1){e=0;}
再发现();
glutTimerFunc(50,timerCallback,value);//Ustawiene ponownego wywołania naszej funkcji“timerCallback”po 100毫秒
}
如果(licznik==100)
{
如果(a==0){x=-0.8;glutPostRedisplay();}
else如果(a==1){x=0;glutPostRedisplay();}
如果(a==2){x=0.8;GLUTPOSTRESDISPLAY();}
else如果(a==3){x=0;glutPostRedisplay();}
xn=0;
角n=0;
licznik=0;
zmiana=1;
}
}
空心套管(浮动x、浮动y、浮动角度)
{
gl3f(q,w,e);
glPushMatrix();
glTranslatef(x,y,0);
glRotatef(角度,0,0,1);
glBegin(GL_多边形);
glVertex2f(0,0.2);
glVertex2f(-0.2,-0.2);
glVertex2f(0.2,-0.2);
格伦德();
glPopMatrix();
}
void przesuwanie()
{
a++;
如果(a>3){a=0;};
如果((a==1)| |(a==2)){flaga=true;}
如果((a==0)| |(a==3)){flaga=false;}
如果(flaga==true)
{
xn+=0.8;角度+=360;
qn+=0.1;
wn+=0.7;
en+=0.3;
}
else if(flaga==false)
{
xn-=0.8;角度+=360;
qn+=0.8;
wn+=0.4;
en+=0.3;
}
zmiana=4;
//Wyserowanie zliczania klatek
时光倒流(0)//wywołanie funkcji która będzie sięokreswo powtarzać
}
void przesuwanie_w_lewo()//pierwsze przesuniecie o poł欠jednostki
{
xn=0;
xn-=.8;
角度+=360;
qn-=0.9;
wn-=0.7;
en-=.3;
zmiana=4;
timerCallback(0);
//瓦瓦尼·芬克基·克托拉·博季西·奥克雷索沃·鲍塔尔扎ć(wywołanie funkcji która będzie sięokreswo powtarzać)
}
作废显示(作废)
{
/*清除窗口*/
glClear(GLU颜色缓冲位);
trojkat(x,y,角);
glFlush();
如果((zmiana==0)| |(zmiana==1)| |(zmiana==2))
{
如果(zmiana==0)
{
przesuwanie_w_lewo();
}
else if(zmiana==1)
{
przesuwanie();
}
}
}
void init()
{
/*将“清除颜色”设置为黑色*/
glClearColor(0.0,0.0,0.0,0.0);
/*将填充颜色设置为白色*/
/*使用剪裁设置标准正交视图*/
/*长方体为以原点为中心的第2面立方体*/
/*这是默认视图,可以删除这些语句*/
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-1.0,1.0,-1.0,1.0,-1.0,1.0);
glMatrixMode(GLU模型视图);
glLoadIdentity();
}
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400400);
glutInitWindowPosition(0,0);
玻璃窗(“trojkat”);
glutDisplayFunc(显示器);
init();
glutMainLoop();
返回0;
}

速度到底有什么问题?因为速度不规则。