2017-03-03 125 views
0

我读了tutorial,我正确执行它。在OpenGL中使用glviewport()

但是,我想应用一些更改。第一个变化是看到该圆的不同视图,例如只显示圆的1/4。我知道这是由glViewPort(参数)完成的。但是,更改参数后,没有任何反应。我已经检查了很多论坛来弄清楚为什么会出现这个问题,但我找不出任何东西。

有人可以解释我更多关于这个以及如何使用它? (要了解问题出在哪里发生)

这是代码(原始写入对tutorial

代码:

#include <GL/glut.h> 
#include <stdio.h> 
#include <math.h> 
#include<stdlib.h> 

void init(void) 
{ 
    glClearColor(1.0,1.0,1.0,0.0); 
    glMatrixMode(GL_PROJECTION); 
    //glLoadIdentity(); 
    gluOrtho2D(0.0,200.0,0.0,200.0); 
    //glViewport(0, 0, 250, 250); 
} 


void setPixel(GLint x,GLint y) 
{ 
    glBegin(GL_POINTS); 
    glVertex2i(x,y); 
    glEnd(); 
} 

void Circle(){ 

    int xCenter=100,yCenter=100,r=50; 
    int x=0,y=r; 
    int p = 3/2 - r; 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1 ,0, 0); 
    while(x<=y){ 
    setPixel(xCenter+x,yCenter+y); 
    setPixel(xCenter+y,yCenter+x); 
    setPixel(xCenter-x,yCenter+y); 
    setPixel(xCenter+y,yCenter-x); 
    setPixel(xCenter-x,yCenter-y); 
    setPixel(xCenter-y,yCenter-x); 
    setPixel(xCenter+x,yCenter-y); 
    setPixel(xCenter-y,yCenter+x); 

    if (p<0) 
    p += (2*x)+3; 
    else { 
p += (2*(x-y))+5; 
y -= 1; 
    } 
    x++; 
    } 

    glFlush(); 
} 

int main(int argc,char **argv){ 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    glutInitWindowPosition(0,0); 
    glutInitWindowSize(500,500); 


    glutCreateWindow("My Circl2e"); 
    init(); 

    glViewport(0,0,250,250); 
    //glLoadIdentity(); 

    glutDisplayFunc(Circle); 

    glutMainLoop(); 
    return 0; 
} 

PS:在一些例子中我看到他们使用setWindow(参数)在使用glViewPort(参数)之前。但setWindow()需要库,它不适用于Ubuntu。

回答

2

默认GLUT整形函数调用glViewport()与窗口大小。从documentation

如果重塑回调还未注册窗口或NULL传递给glutReshapeFunc(注销先前注册的回调),默认重塑回调使用。这个默认回调将在普通平面(如果存在覆盖图上)调用glViewport(0,0,宽度,高度)。

既然你这么早打电话给glViewport(),那么在你打电话之后,窗口将会被塑造,覆盖你指定的视口。

你要么需要注册自己的重塑功能,并调用glViewport()与您所需的视口的参数那里,或者在你Circle()功能开始通话glViewport()

+0

非常感谢您的回复。我在我的circle()函数开始时调用了glViewport(),并且发现了一些变化。问题是它现在只是改变了圆圈的大小。例如,如果我设置glviewPort(0,0,200,200),我看到的圆圈比我将其设置为glViewport(0,0,100)时大两倍。我想要做的只是看到一个圆圈的一部分,例如一半。你能帮我解决吗?谢谢 – Kadaj13