绘制四边形时,当旋转进入垂直于屏幕的位置时,它消失。理想情况下,我想看到的是(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/