绘图与GL_POLYGON圆圈,半径出规模
问题描述:
我想提请使用GL_POLYGON
和我试过代码圆的是工作,但该圆的半径好像出与窗口大小规模的,我不明白为什么。绘图与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的圆的四分之一把我们的整个窗口。我猜测我必须做一些半径变换,我只是不知道如何。
答
投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼空间变换到夹子的空间,并在裁剪空间坐标由与夹子坐标的w
分量除以变换到归一化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。
在正交投影中,眼图空间中的坐标线性映射到标准化的设备坐标。
正投影可以通过glOrtho
设置。你在(0,0),一个右上角的设置了一个左下角视口(1,1)和深度范围从-1到1:
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
如果你想建立投影,使您可以在窗口的大小尺度绘制,那么你必须做这样的:
int wndWidth = 800; // for example a window with the size 800*600
int wndHeight = 600;
glOrtho(0.0, (float)wndWidth, 0.0, (float)wndHeight, -1.0, 1.0);
如果你想拥有的原点(0,0)在窗口的中心,那么你必须这样做:
float w = (float)wndWidth/2.0f;
float h = (float)wndHeight/2.0f;
glOrtho(-w, w, -h, h, -1.0, 1.0);
请参阅furthe R:
+1
这帮助了很多!谢谢! @ Rabbid76 – emic
是它的Z在gluLookAt协调? – emic
您正在定义一个转换:从世界坐标到视图(或相机,或眼睛)坐标。你用'lookAt'矩阵来做。您没有使用投影转换。您的最终坐标是NDC,这是一个2x2x2大小的框。您应该了解这些和其他转换,例如旋转和缩放。 – Ripi2
我稍微改了一下代码来删除looAt,但是现在这个圆圈更大了,其中四分之一是整个窗口。 @ Ripi2 – emic