这个程序创建一个包含100个框的图像,在创建框之后,它的4个坐标存储在类数组Tile的索引中,所以我可以在我的代码中稍后引用每个图块。这工作正常,我不能在我的main函数中引用Tile数组,只能在创建它的Draw()函数中引用。任何解决方案都将不胜感激。
编辑:制作瓷砖*瓷砖[100]全局似乎无法解决问题。
简化代码:
#include <iostream>
class Tiles {
public:
Tiles() : mA (1){}
double mA;
};
void Function1() {
Tiles Tile[5];
Tile[1].mA = 10;
}
int main(int iArgc, char** cppArgv) {
Function1();
Tile[1].mA = 2; // ERROR "Tile" is unidentified.
return 0;
}
完整代码:
#include <iostream>
#include <glut.h>
class Tiles {
public:
Tiles() : mA () , mB() , mC() , mD() , mCP(){}
double mA[2] , mB[2] , mC[2] , mD[2] , mCP[2];
};
void Draw() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
double dX1 = 0.0, dY1 = 0.0, dMidX = 0.0, dMidY = 0.0, dXC = 0.0, dYC = 0.0;
int sq = 0, row = 1, CoordMap = 0;
Tiles Tile[100];
//Tiles* Tile = new Tiles[100]; doesnt seem to be any different..
for (int i=0; i < 10;i++ ) { // ROWS
for (int i2=0; i2 < 10; i2++) { // BOXES
glBegin(GL_LINE_STRIP);
glVertex3f(dX1, dY1, 0.0);
Tile[sq].mA[1] = dX1;
Tile[sq].mA[2] = dY1;// Bottom Left
dX1 = dX1 + .1;
dXC = dX1;
dYC = dY1;
glVertex3f(dX1, dY1, 0.0);
Tile[sq].mB[1] = dX1;
Tile[sq].mB[2] = dY1;// Bottom Right
dY1 = dY1 + .1;
glVertex3f(dX1, dY1, 0.0);
Tile[sq].mC[1] = dX1;
Tile[sq].mC[2] = dY1;// Top Left
dX1 = dX1 - .1;
glVertex3f(dX1, dY1, 0.0);
Tile[sq].mD[1] = dX1;
Tile[sq].mD[2] = dY1;// Top Right
glEnd();
glBegin(GL_POINTS);
glVertex3f((dX1 + .05) , (dY1 - .05), 0.0);
glEnd();
++sq;
dX1 = dXC;
dY1 = dYC;
}
row++;
dX1 = 0.0;
dY1 = ((row * .1) - .1);
}
glFlush();
}
void Initialize() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
int main(int iArgc, char** cppArgv) {
glutInit(&iArgc, cppArgv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(250, 250);
glutInitWindowPosition(200, 200);
glutCreateWindow("XoaX.net");
Initialize();
glutDisplayFunc(Draw);
glutMainLoop();
//Tile[2].mA[1] = 2; //
return 0;
}
此代码是根据XoaX - Michael Hall编写的原始版本修改的。
谢谢
答案 0 :(得分:1)
要从Tiles
访问您的main()
数组,您必须在Tiles
范围内声明main()
。例如,将您的声明Tiles Tile[100];
移至全局范围,即在void Draw() {
行之前。
答案 1 :(得分:0)
如果你想从main访问它,答案是将它移到全局范围,但是..
你在这里使用openGL和过剩,并且你在访问main()中的Tile之前调用了glutMainLoop ..如规范中所写,glutMainLoop一旦调用就永远不会返回..
如果偶然的话,你试图在调用glutMainLoop之前测试该值,那么draw方法将不会被调用,因为它是在glutMainLoop中调用的..这使得值仍为0 .. < / p>
参考:http://www.opengl.org/documentation/specs/glut/spec3/node14.html