Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ OpenGL在窗口边界外绘制_C++_Opengl - Fatal编程技术网

C++ OpenGL在窗口边界外绘制

C++ OpenGL在窗口边界外绘制,c++,opengl,C++,Opengl,在绘制GL_线_带时,我注意到图形超出了窗口边界,我看不到图形的一半 我想把它放在窗口的中心,并自动调整大小以适应它。 有人能告诉我如何才能做到这一点吗 这就是我所看到的: 我希望它的大小和位置: 这是我的代码: int main(int argc, char** argv) { // GUI Stuff glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutI

在绘制GL_线_带时,我注意到图形超出了窗口边界,我看不到图形的一半

我想把它放在窗口的中心,并自动调整大小以适应它。 有人能告诉我如何才能做到这一点吗

这就是我所看到的:

我希望它的大小和位置:

这是我的代码:

int main(int argc, char** argv)
{
    // GUI Stuff
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize(600, 600);

    glutCreateWindow("Graph showing the waveform after hanning window");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

void display()
{
    glDisable(GL_DEPTH_TEST); glDisable(GL_BLEND);
    glDisable(GL_LINE_SMOOTH); glLineWidth(2);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-6, 6, -6, 6, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();


    glColor4f(0.4, 1.0, 0.6, 1);
    glBegin(GL_LINE_STRIP);
    for (int i = 0; i < N / 2; i++)
    {
        glVertex2f(frequencies[i], mag[i]);
    }
    glEnd();
    glutSwapBuffers();
}
int main(int argc,char**argv)
{
//图形用户界面的东西
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(600600);
glutCreateWindow(“显示汉宁窗口后波形的图形”);
glutDisplayFunc(显示器);
glutMainLoop();
返回0;
}
无效显示()
{
glDisable(GLU深度测试);glDisable(GLU混合);
glDisable(GLU线条平滑);GLLINEWITH(2);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-6,6,-6,6,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glColor4f(0.4,1.0,0.6,1);
glBegin(GL_线_带);
对于(int i=0;i

这是我的

要解isseu,你需要知道曲线的边界。您必须更改正交投影的比例:

格洛托(-6,6,-6,6,-1,1)

在正交投影中,视图空间坐标线性映射到剪辑空间坐标。查看体积由6个距离(左、右、下、上、近、远)定义。“左”、“右”、“下”、“上”、“近”和“远”的值定义了长方体(长方体)

如果要使视图在曲线上居中,则投影的中心必须是曲线的中心。e、 g:

glOrtho(最小x-1,最大x+1,最小y-1,最小y+1,-1,1);
minux
minuy
)是曲线周围边界矩形的左下角,(
max\ux
max\uy
)是右上角

#包括
#包括
std::向量x_corrds(频率,频率+N/2);
标准:向量y_corrds(mag,mag+N/2);
float min_x=std::min_元素(x_corrds.begin(),x_corrds.end());
float max_x=std::max_元素(x_corrds.begin(),x_corrds.end());
float min_y=std::min_元素(y_corrds.begin(),y_corrds.end());
float max_y=std::max_元素(y_corrds.begin(),y_corrds.end());

您需要创建一个包含窗口外的
frequencies'和
mag`的一些示例值的。这些值很可能超出了您在
glOrtho
@yarinCohen No中定义的范围。为什么不设置正确的正交投影?使用
glOrtho
glScale
并不重要。无论哪种情况,您都需要知道曲线的最小值和最大值。我提供了一些计算极限值的代码。@yarincon当您的问题的标题是“OpenGL在窗口边界外绘制”时。要解决这个问题,你需要知道曲线的边界。我会把它标记为已解决,因为我相信这是正确的答案,但glScale对我有效,所以我同意that@yarinCohen“…
glScale
为我工作…”不是通用的解决方案。这完全取决于论据
glScale
以及
glOrtho
缩放顶点。使用解决方案时,我会收到以下警告:“C26451算术溢出:对4字节值使用运算符“+”,然后将结果转换为8字节值。在调用运算符“+”之前,将值转换为更宽的类型,以避免溢出(io.2)”