Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 显示垂直于屏幕的四边形_C++_C_Opengl - Fatal编程技术网

C++ 显示垂直于屏幕的四边形

C++ 显示垂直于屏幕的四边形,c++,c,opengl,C++,C,Opengl,绘制四边形时,当旋转使其处于垂直于屏幕的位置时,四边形将消失。理想情况下,我希望看到的是(b),但我什么也得不到 我的代码有问题吗?(警告:下面是旧的openGL代码) 当四边形垂直于屏幕时,尝试将其设置为一条一定宽度的线四边形(假设它是由共面面定义的,如本例所示)根据定义是无限薄的。当垂直于摄影机时,它不可见是正确的行为 “正确”的解决方案是制作一个长方体而不是一个四边形 有关使用多维数据集的示例,请参见。您需要调整顶点位置,使立方体沿一个维度(可能是Z)变小,但它会提供您想要的效果 另外,

绘制四边形时,当旋转使其处于垂直于屏幕的位置时,四边形将消失。理想情况下,我希望看到的是(b),但我什么也得不到

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


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

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

“正确”的解决方案是制作一个长方体而不是一个四边形

有关使用多维数据集的示例,请参见。您需要调整顶点位置,使立方体沿一个维度(可能是Z)变小,但它会提供您想要的效果


另外,停止使用固定函数stuff
glVertex
等)。它已经被弃用多年了。着色器并没有那么难,通过您喜爱的搜索引擎很容易找到示例

我认为这种行为是正确的。因为一层中有一个四边形,所以它没有深度,所以如果你垂直观察它,它的大小为0。按预期工作。也许你可以把它做成一个很浅的立方体。@SinisterMJ很公平;我从标题中删除了“corectly”一词,因此我们可以关注一些技巧,比如刚才添加的技巧。如果填充的基本体(例如四边形)垂直于图像平面,则它没有光栅化的表面积。您是否考虑过使用
GL\u线
来绘制这些垂直四边形?直线和点基本体始终具有保证的宽度。立即模式(
glVertex
等)与着色器正交。可以在即时模式下使用着色器,也可以对数组甚至缓冲区对象使用固定函数管道。
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); 
}