gpt4 book ai didi

c++ - 使用 GL_POLYGON 绘制圆,半径超出比例

转载 作者:行者123 更新时间:2023-11-30 05:09:20 25 4
gpt4 key购买 nike

我正在尝试使用 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 点到视口(viewport)的 2D 点的映射。它从眼睛空间转换到剪辑空间,剪辑空间中的坐标通过除以剪辑坐标的 w 分量转换为归一化设备坐标 (NDC)。 NDC 的范围是 (-1,-1,-1) 到 (1,1,1)。

在正交投影中,眼睛空间中的坐标被线性映射到归一化的设备坐标。

Orthographic Projection

正射投影可以通过glOrtho设置.您正在设置一个视口(viewport),其左下角为 (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 );

进一步了解:

关于c++ - 使用 GL_POLYGON 绘制圆,半径超出比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46258919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com