显示垂直于屏幕的四边形

时间:2015-03-18 12:27:25

标签: c++ c opengl

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

enter image description here

我的代码有问题吗? (警告以下旧的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); 
}

2 个答案:

答案 0 :(得分:2)

四边形(假设它由共面面定义,如在这种情况下)根据定义是无限薄的。垂直于相机时它是不可见的是正确的行为。

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

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

此外,停止使用固定功能glVertex等)。它已被弃用多年。着色器并不那么困难,通过您最喜欢的搜索引擎很容易找到示例。

答案 1 :(得分:1)

当四边形垂直于屏幕时,尝试将其设为一定宽度的线