繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM