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