[英]Terrain will draw alone, but won't render with other objects in scene OpenGL
[英]OpenGL won't draw polygons for objects not in namespace
我用绘图函数.draw()制作了一个类,该类将在屏幕上绘制该对象。 此函数对命名的全局变量有效,但不适用于在堆上分配或放置在数组中的变量。
这是main()文件中的代码:
Object obj1 = Object::Object (SCALE);
Object obj2 = Object::Object (SCALE);
Object* objPtr2;
Object* objPtr3;
Object objArray [5];
void init (void)
{
//...
objPtr2 = &obj2;
objPtr3 = new Object (SCALE);
objArray [0] = Object::Object (SCALE);
//...
}
void display (void)
{
//...
obj1.draw(); // Draws polygons
objPtr2->draw(); // Draws polygons
objPtr3->draw(); // POINTs only
objArray [0].draw(); // POINTs only
//...
}
您传递给glMaterialfv()
的向量没有足够的值:
float wh [] = {1, 1, 1};
glBegin ( GL_POINTS);
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wh);
该调用期望一个带有四个值的向量(请参见此处的手册页 )。 因此,此调用将为第四个组件使用未定义的内存内容,该内容定义了alpha值。 这可能解释了未绘制“随机”对象的原因。
该调用应如下所示:
float wh[] = {1.0f, 1.0f, 1.0f, 1.0f};
glBegin(GL_POINTS);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wh);
这里有第二个调用,其中未显示变量的定义。 它可能有相同的问题:
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color );
我发现了问题。 在我的构造函数中,我只是声明一个开始的旋转,而不是对其进行初始化。 我习惯了Java,它将自动初始化为零,因此我没有发现bug。
值得注意的是:对于静态对象,C ++会初始化整数,将浮点数或双精度数设为零,这就是导致差异的原因。 动态初始化在轮换的字段中留下了垃圾。 与名称空间或使用堆进行动态内存存储没有任何关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.