在SDL 2中画一个圆,但是每个圆使用CPU很多
Drawing a circle in SDL 2, but each circle uses CPU a lot
我写了一个绘制实心圆的代码,但它经常使用 CPU。
问题是我逐像素绘制,第一个半径为 n 的外圆,第二个半径为 n-1 的圆,依此类推,而 n 不等于 0。
我在 e 循环中为每个圆部分绘制 4 个像素。正如我所想,每个部分都有 ~ Pi/(2*R) 像素,但它不够,圆填充错误,所以我使用 Pi/(4*R),现在圆填充正常。
Deg0 = 0;
Deg90 = M_PI / 2;
DegStep = Deg90 / (R * 4);
CurrDeg = Deg0;
OffsetX = R;
OffsetY = 0;
TmpR = R;
while(TmpR>0 )
{
while(CurrDeg < Deg90)
{
OffsetX = cos(CurrDeg) * TmpR;
OffsetY = sin(CurrDeg) * TmpR;
SDL_RenderDrawPoint(Renderer, CX+(int)OffsetX, CY+(int)OffsetY);
SDL_RenderDrawPoint(Renderer, CX-(int)OffsetY, CY+(int)OffsetX);
SDL_RenderDrawPoint(Renderer, CX-(int)OffsetX, CY-(int)OffsetY);
SDL_RenderDrawPoint(Renderer, CX+(int)OffsetY, CY-(int)OffsetX);
CurrDeg+=DegStep;
}
CurrDeg = Deg0;
TmpR-=1;
}
那么,有什么方法可以提高我的悟性吗?
您可以使用 SDL 的圆形绘制功能,或者您可以通过不实际使用 cos 和 sin 来优化您自己的代码。请改用查找表。
我写了一个绘制实心圆的代码,但它经常使用 CPU。 问题是我逐像素绘制,第一个半径为 n 的外圆,第二个半径为 n-1 的圆,依此类推,而 n 不等于 0。 我在 e 循环中为每个圆部分绘制 4 个像素。正如我所想,每个部分都有 ~ Pi/(2*R) 像素,但它不够,圆填充错误,所以我使用 Pi/(4*R),现在圆填充正常。
Deg0 = 0;
Deg90 = M_PI / 2;
DegStep = Deg90 / (R * 4);
CurrDeg = Deg0;
OffsetX = R;
OffsetY = 0;
TmpR = R;
while(TmpR>0 )
{
while(CurrDeg < Deg90)
{
OffsetX = cos(CurrDeg) * TmpR;
OffsetY = sin(CurrDeg) * TmpR;
SDL_RenderDrawPoint(Renderer, CX+(int)OffsetX, CY+(int)OffsetY);
SDL_RenderDrawPoint(Renderer, CX-(int)OffsetY, CY+(int)OffsetX);
SDL_RenderDrawPoint(Renderer, CX-(int)OffsetX, CY-(int)OffsetY);
SDL_RenderDrawPoint(Renderer, CX+(int)OffsetY, CY-(int)OffsetX);
CurrDeg+=DegStep;
}
CurrDeg = Deg0;
TmpR-=1;
}
那么,有什么方法可以提高我的悟性吗?
您可以使用 SDL 的圆形绘制功能,或者您可以通过不实际使用 cos 和 sin 来优化您自己的代码。请改用查找表。