【发布时间】:2013-03-10 08:57:39
【问题描述】:
我正在使用 OpenTK 在 C# 中编写一个简单的光线投射器。 我希望我的视图每秒刷新 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);
【问题讨论】:
-
在这里展示你的作品..
标签: c# multithreading opentk raycasting