【发布时间】:2017-09-16 22:16:08
【问题描述】:
我正在尝试使用GL_POLYGON 绘制一个圆,我尝试的代码正在运行,但圆的半径似乎与窗口大小不相符,我不明白为什么。
代码如下:
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
if(start == OFF)
{
//Set Drawing Color - Will Remain this color until otherwise specified
glColor3f(0.2, 0.3, 0.5); //Some type of blue
//Draw Circle
glBegin(GL_POLYGON);
for(double i = 0; i < 2 * PI; i += PI / 24)
glVertex3f((cos(i) * radius) + gX,(sin(i) * radius) + gY, 0.0);
glEnd();
//Draw Circle
center_x = gX;
center_y = gY;
}
glutSwapBuffers();
}
和初始化函数:
void init (void)
{
/* selecionar cor de fundo (preto) */
glClearColor (0.0, 0.0, 0.0, 0.0);
/* inicializar sistema de viz. */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
我将窗口大小设置为 600,半径设置为 1,四分之一的圆带我们整个窗口。我猜我必须对半径进行某种转换,我只是不知道如何。
【问题讨论】:
-
是gluLookAt的z坐标吗?
-
您正在定义一个转换:从世界坐标到视图(或相机,或眼睛)坐标。你用
lookAt矩阵来做。您没有使用投影变换。你的最终坐标在 NDC 中,它是一个 2x2x2 大小的盒子。您应该了解这些和其他转换,例如旋转和缩放。 -
我改了一点代码删除了looAt,但是现在圆圈更大了,四分之一占据了整个窗口。 @里皮2
-
再一次,按照一本好的教程或书籍学习转换。顺便说一句,摆脱“固定管道”并使用“现代 Opengl”(版本 >= 3.2)
标签: c++ opengl geometry orthographic