绘制四边形时,当旋转进入垂直于屏幕的位置时,它消失。理想情况下,我想看到的是(b)但我什么也没得到

我的代码有问题吗? (以下警告旧的openGL代码)

void draw_rect(double vector[4][3], int rgb[3], double transp)
{
    GLint is_depth, is_blend, blend_src, blend_dst;

    glGetIntegerv(GL_DEPTH_WRITEMASK, &is_depth);
    glGetIntegerv(GL_BLEND, &is_blend);
    glGetIntegerv(GL_BLEND_SRC, &blend_src);
    glGetIntegerv(GL_BLEND_DST, &blend_dst);

    glEnable(GL_BLEND);
    glDepthMask(0);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    // code to set the color ...

    glBegin(GL_POLYGON);
    glVertex3v(&vector[0][0]);
    glVertex3v(&vector[1][0]);
    glVertex3v(&vector[2][0]);
    glVertex3v(&vector[3][0]);
    glEnd();

    if (!is_blend){ glDisable(GL_BLEND); }
    glDepthMask(is_depth);
    glBlendFunc(blend_src, blend_dst);
}

最佳答案

根据定义,四边形(假设它是由共面定义的,如本例所示)无限薄。垂直于摄像机时,它不可见是正确的行为。

“正确”的解决方案是制作一个盒子而不是一个四边形。

有关使用多维数据集的示例,请参见Drawing cube 3D using Opengl。您需要调整顶点位置,以使多维数据集沿一个维度(可能为Z)变小,但它会为您提供所需的效果。

另外,停止使用固定功能填充(glVertex等)。它已被弃用多年。着色器并不难,并且可以通过您喜欢的搜索引擎轻松找到示例。

关于c++ - 显示垂直于屏幕的四边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29122043/

10-12 14:51