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