我正在使用OpenTK在C#中編寫一個簡單的raycaster。 我希望我的視圖每秒刷新60次,所以我有一個計時器調用我的Render()函數,該函數在屏幕上顯示紋理。背景線程渲染紋理
我想使用遞歸函數通過將其分割成更小的矩形並渲染每個直到矩形大小爲1px來渲染我的場景。我的遞歸將像素的顏色寫入字節數組,我需要將其轉換爲紋理。遞歸很慢,所以我想在場景更改時在後臺線程中運行它。
什麼是同步線程的正確方法,以便寫入紋理數組(大約需要一秒),但另一個線程每1/60秒讀取一次並在屏幕上打印?
byte[, ,] texture;
遞歸:
public void RenderAdaptively(int top, int left, int width, int height)
{
Color color = getColor(top, left);
for (int i = top; i < top + width + 1; i++)
{
for (int j = left; j < left + height; j++)
{
texture[i, j, 0] = color.R;
texture[i, j, 1] = color.G;
texture[i, j, 2] = color.B;
}
}
int halfw = width/2;
int halfh = height/2;
int newwidth = width - halfw;
int newheight = height - halfh;
if (width > 1 && height > 1)
{
RenderAdaptively(top, left, halfw, halfh, false);
RenderAdaptively(top + halfw, left + halfh, newwidth, newheight, false);
RenderAdaptively(top, left + halfh, halfw, newheight, false);
RenderAdaptively(top + halfw, left, newwidth, halfh, false);
}
}
在另一個線程
:
raycasting_texture = TexUtil.CreateRGBTexture(width, height, texture);
在這裏顯示你的工作.. – 2013-03-10 08:58:28