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