64,648
社区成员
发帖
与我相关
我的任务
分享
/*
* 更新函数
*/
void CSphere::update()
{
// 更新旋转量
m_rotatedx += 0.05f;
if (m_rotatedx > 360.f)
m_rotatedx = 0.f;
// 降低绘制频率
static int fcount = 0;
if (fcount > 4)
{
fcount = 0;
} else{
++fcount;
return;
}
// 更新势能
for (size_t row = 0; row < m_potentials.size(); ++row)
{
for (size_t col = 0; col < m_potentials[row].size(); ++col)
{
if (m_potentials[row][col].potentiallevel < 0.f || m_potentials[row][col].potentiallevel > 1.f)
{
m_potentials[row][col].isIncrease = m_rmc->nextb();
if (m_potentials[row][col].potentiallevel <= 0.f)
m_potentials[row][col].potentiallevel = 0.f;
else
m_potentials[row][col].potentiallevel = 1.f;
} else{
if (m_potentials[row][col].isIncrease)
m_potentials[row][col].potentiallevel += m_potentials[row][col].increaseVar;
else
m_potentials[row][col].potentiallevel -= m_potentials[row][col].increaseVar;
}
m_potentials[row][col].BrownianPosition = m_potentials[row][col].potentiallevel * BrownianMotionMAX;
}
}
// 获得颜色数据
glBindBuffer(GL_ARRAY_BUFFER, m_colorBufferobj);
float* colordata = (float*)glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE);
// 将m_colors映射到colordata
if (colordata)
{
for (size_t row = 0; row < m_points.size(); ++row)
{
for (size_t col = 0; col < m_points[row].size(); ++col)
{
m_colors[row][col] = colordata + m_vertexoffset[row][col] * 3;
CR(m_colors[row][col]) = CR(COLOR_DARK) + m_potentials[row][col].potentiallevel * CR(COLOR_DELTA);
CG(m_colors[row][col]) = CG(COLOR_DARK) + m_potentials[row][col].potentiallevel * CG(COLOR_DELTA);
CB(m_colors[row][col]) = CB(COLOR_DARK) + m_potentials[row][col].potentiallevel * CB(COLOR_DELTA);
}
}
glUnmapBuffer(GL_ARRAY_BUFFER);
}
// 取得顶点数据
glBindBuffer(GL_ARRAY_BUFFER, m_vertexsBufferobj);
float* vertexdata = (float*)glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE);
// 将m_points映射到vertexdata
if (vertexdata)
{
for (size_t row = 0; row < m_points.size(); ++row)
{
for (size_t col = 0; col < m_points[row].size(); ++col)
{
m_points[row][col] = vertexdata + m_vertexoffset[row][col] * 3;
memcpy_s(m_points[row][col], F3SIZE, m_originalPoints[row][col], F3SIZE);
MAKEPOINT_GOOSEPIMPLES(m_points[row][col], m_potentials[row][col], m_vectors[row][col]);
}
}
glUnmapBuffer(GL_ARRAY_BUFFER);
}
}