我正在尝试在 OpenGL 中绘制这种模式:
为此,我创建了如下模式:
vector< vector<DataPoint> > datas;
float Intensitytemp=0;
float xPos=0, yPos=0, angleInRadians=0;
for (float theta = 0.0f; theta < 4096; theta += 1.f)
{
vector<DataPoint> temp;
angleInRadians = 2 * M_PI*theta / 4096;
for (float r = 0; r < 4096; r += 1.f)
{
xPos = cos(angleInRadians)*r / 4096;
yPos = sin(angleInRadians)*r / 4096;
Intensitytemp = ((float)((int)r % 256)) / 255;
DataPoint dt;
dt.x = xPos;
dt.y = yPos;
dt.Int = Intensitytemp;
temp.push_back(dt);
}
datas.push_back(temp);
}
我将模式绘制为:
glBegin(GL_POINTS);
for (int x = 0; x < 4096; x++)
for (int y = 0; y < 4096; y++)
{
xPos = datas[x][y].x;
yPos = datas[x][y].y;
Intensitytemp = datas[x][y].Int;
glColor4f(0.0f, Intensitytemp, 0.0f, 1.0f);
glVertex3f(xPos, yPos, 0.0f);
}
glEnd();
如果我在glBegin()-glEnd()
块中创建数据,它的工作速度会更快。但在这两种情况下,我相信更好的方法是在 GLSL 中完成所有工作。我不太了解现代 OpenGL 背后的逻辑。
我试图创建顶点缓冲区数组和颜色数组,但无法正常工作。问题不在于将阵列转移到显卡。我在阵列中得到了堆栈溢出。这是另一个主题的问题,但在这里我想知道是否可以在完全 GLSL 代码(.vert 文件中的代码)中完成此任务,而无需将这些巨大的数组传输到显卡。