Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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++11 如何在opengl中绘制空矩形?_C++11_Opengl - Fatal编程技术网

C++11 如何在opengl中绘制空矩形?

C++11 如何在opengl中绘制空矩形?,c++11,opengl,C++11,Opengl,需要在opengl中绘制一个空心矩形,我尝试使用基本体对象: void Skin::draw() { glColor4f(1.0, 1.0, 1.0, 1.0); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON); glVertex3f(-0.8, -0.86, 0); // XYZ left, top glVertex3f(-0.7, -0.86, 0); // XYZ rig

需要在opengl中绘制一个空心矩形,我尝试使用基本体对象:

void Skin::draw()
{
    glColor4f(1.0, 1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

    glBegin(GL_POLYGON);

    glVertex3f(-0.8, -0.86, 0); // XYZ left, top
    glVertex3f(-0.7, -0.86, 0); // XYZ right, top
    glVertex3f(-0.7, -0.96, 0); // XYZ right, bottom
    glVertex3f(-0.8, -0.96, 0); // XYZ left, bottom
    glVertex3f(-0.8,  -0.86, 0); // XYZ left, top (close)

    glVertex3f(-0.79, -0.87, 0); // XYZ left, top (diagonal down-right)
    glVertex3f(-0.79, -0.95, 0); // XYZ left, bottom
    glVertex3f(-0.71, -0.95, 0); // XYZ right, bottom
    glVertex3f(-0.71, -0.87, 0); // XYZ right, top
    glVertex3f(-0.79, -0.87, 0); // XYZ left, top (close)

    glVertex3f(-0.8, -0.86, 0); // XYZ left, top (close diagonal top-left)

    glEnd();
}

但是结果是一个填充的矩形:

如果您想用不推荐的OpenGL固定函数管道绘制一个矩形,那么您可以使用。但是您必须先更改多边形模式。看见多边形模式定义顶点坐标GL_点上是否有绘制点,顶点坐标GL_线之间的线或由基本体包围的区域是否填充GL_填充:

一般来说,OGL中有不同类型的应用程序:

点基本体:GL_点

线基本体:GL\U线、GL\U线\U带、GL\U线\U环

具有邻接信息的线图元:GL_线_邻接、GL_线_带_邻接 邻接不会创建进一步的几何体,但会提供可在几何体着色器阶段中使用的信息

三角形基本体:GL_三角形、GL_三角形条带、GL_三角形扇形

具有邻接信息的三角形基本体:GL_三角形_邻接、GL_三角形_条带_邻接 邻接不会创建进一步的几何体,但会提供可在几何体着色器阶段中使用的信息

对于完整性问题,不推荐使用的基本体类型列表有:GL_四边形、GL_四边形条带和GL_多边形:

进一步见:

基于顶点流的不同解释,有3种线基本体

GL_线:顶点0和1被视为一条线。顶点2和3被视为一条线。等等如果用户指定了非偶数个顶点,则会忽略额外的顶点

GL_线_带:相邻顶点被视为线。因此,如果传递n个顶点,将得到n-1条线。如果用户仅指定1个顶点,则忽略绘图命令

GL_LINE_LOOP:作为线条,除了第一个和最后一个顶点也用作线。因此,对于n个输入顶点,可以得到n条线。如果用户仅指定1个顶点,则忽略绘图命令。第一个顶点和最后一个顶点之间的线位于序列中所有先前的线之后

这意味着,矩形可以由具有4个顶点的GL_线_循环绘制:

glBegin(GL_LINE_LOOP);
glVertex3f(-0.8, -0.86, 0); // XYZ left, top
glVertex3f(-0.7, -0.86, 0); // XYZ right, top
glVertex3f(-0.7, -0.96, 0); // XYZ right, bottom
glVertex3f(-0.8, -0.96, 0); // XYZ left, bottom
glEnd();

glBegin(GL_LINE_LOOP);
glVertex3f(-0.79, -0.87, 0); // XYZ left, top
glVertex3f(-0.79, -0.95, 0); // XYZ left, bottom
glVertex3f(-0.71, -0.95, 0); // XYZ right, bottom
glVertex3f(-0.71, -0.87, 0); // XYZ right, top
glEnd();

但是需要设置一个自定义的线的重量,他们建议我使用矩形,将来需要做一个圆角,我使用多边形这个问题还不清楚。它是已解决还是已弃用?在前一种情况下,你应该自己回答,在后一种情况下,你应该删除它。
glBegin(GL_LINE_LOOP);
glVertex3f(-0.8, -0.86, 0); // XYZ left, top
glVertex3f(-0.7, -0.86, 0); // XYZ right, top
glVertex3f(-0.7, -0.96, 0); // XYZ right, bottom
glVertex3f(-0.8, -0.96, 0); // XYZ left, bottom
glEnd();

glBegin(GL_LINE_LOOP);
glVertex3f(-0.79, -0.87, 0); // XYZ left, top
glVertex3f(-0.79, -0.95, 0); // XYZ left, bottom
glVertex3f(-0.71, -0.95, 0); // XYZ right, bottom
glVertex3f(-0.71, -0.87, 0); // XYZ right, top
glEnd();