它现在似乎可以工作了,谢谢。
我的问题是参数似乎在其中一个函数中丢失了。
我在 Windows 7 上将 Code::Blocks 与 GNU GCC 编译器一起使用。
好的,我有一个需要 6 个 GLfloat 参数的函数。
void ProMesh::gen_quad_world(GLfloat _w,GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2);
如您所见,它是 ProMesh 类的一部分。在 ProMesh 中,我有一个初始化函数,它调用有问题的 gen_quad_world 函数。
void ProMesh::initialize(GLfloat _w, GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2)
{
numverts = 18;
numtexcoords = 12;
vert_array = NULL;
tex_array = NULL;
id = glGenLists(1);
gen_quad_world(_w,_h,_x1,_y1,_x2,_y2);
}
如您所见,它只是将参数传递给 gen_quad_world。
到目前为止一切都好吗?
不管 _w 和 _h 的值是什么,gen_quad_world 都会收到愚蠢的长数字。
示例:我打电话
gen_quad_world(1,2,345,4,5,6);
我在 gen_quad_world 函数中得到 _w: 3.7648e-039 _h: 7.4044e+031 _x1: 345 _y1: 4 _x2: 5 _y2: 6。怎么会这样?这很奇怪。此外,有时当我在调试模式下逐行遍历它时,它可以正常工作。
更复杂的是,我有一个几乎相同的函数 gen_quad_local,它需要相同的参数。如果我用那个代替它,那么它工作正常。
-------------------------要查看 gen_quad_world 函数,请看下面----------------- ---
void ProMesh::gen_quad_world(GLfloat _w,GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2)
{
std::ofstream myfile("gen_quad_world.txt");
myfile<<"_w: "<<_w<<"\n_h: "<<_h<<"\n";
myfile<<"_x1: "<<_x1<<"\n_y1: "<<_y1<<"\n";
myfile<<"_x2: "<<_x2<<"\n_y2: "<<_y2<<"\n";
myfile.close();
glNewList(id,GL_COMPILE);
glBegin(GL_TRIANGLES);
glVertex3f(_w,0,0);
glVertex3f(0,0,0);
glVertex3f(0,_h,0);
glVertex3f(0,_h,0);
glVertex3f(_w,_h,0);
glVertex3f(_w,0,0);
glEnd();
glEndList();
}