所以我想将几行GL的Vertex2d坐标打印到一个文件中,我使用了这个:
{
//namespace (for cout + cin)
using namespace std;
int p; //number of sides
//body
double r,d=3/4.0;
cout << "input side count" <<endl;
cin >> p;
cout << "input radius" <<endl;
cin >> r;
FILE *fp;
int i=0;
double x,y,t;
while(i<p)
{
t=2*M_PI*((double)i/p+d);
x=cos(t)*r;
y=sin(t)*r;
if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
printf("glVertex2d(%f, %f);\n",i,x,i,y);
i++;
}
fclose(fp);
}
但它只在文件中打印了一行,看起来像这样;
glVertex2d(-0.406737,-0.913545);
在控制台中,它会打印所有行,如下所示:
glVertex2d(-0.406737, -0.913545);
glVertex2d(0.591057, -0.309017);
glVertex2d(0.587785, 0.80197);
glVertex2d(-0.687785, 0.809017);
etc.
为什么这样做?我需要他们所有人稍后将它们导入程序的OpenGL部分,以便绘制具有所需半径和边数的多边形
我知道它不应该是glVertex2d(0.0,0.0);但是有些东西,但是我没有达到重要的程度。
答案 0 :(得分:0)
将以下行移到while
循环之外。
if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
我不知道在程序中多次使用它时freopen
的行为是什么。
使用:
if((fp=freopen("PTRON", "w" ,stdout))==NULL) {
printf("Cannot open file.\n");
exit(1);
}
while(i<p)
{
t=2*M_PI*((double)i/p+d);
x=cos(t)*r;
y=sin(t)*r;
printf("glVertex2d(%f, %f);\n",i,x,i,y);
i++;
}