我有浮體的載體,這種載體描述了一組每個三角形是使用18個浮子描述三角形的,前3是第一頂點,接下來的3 decribes正常的最後的頂點等3次直到描述每個三角形。在glVertexPointer的OpenGL函數使用C++的std ::矢量
我使用
std::vector<GLfloat>
來存儲所有號碼,這是我的代碼來呈現三角形
void Visualizer::draw3dModel()
{
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 6 * sizeof(GLfloat), this->vertexes->data() + 3);
glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), this->vertexes->data());
glPushMatrix();
glScalef(0.05f, 0.05f, 0.05f);
glColor3f(1,1,1);
glDrawArrays(GL_TRIANGLES, 0, this->vertexes->size());
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
}
此代碼實際工作,但在某些時刻,我重新花車的矢量與新的三角形,它可以是更多或更少的三角形
在創建新的三角形之前,我清除頂點的矢量,使用此功能
std::vector<GLfloat>* MarchingCubesThread::getTriangles(float minvalue_scale)
{
this->generateTriangles(minvalue_scale);
for(unsigned int i=0; i < this->num_triangles; i++)
{
for(int j=0; j < 3; j++)
{
this->vertexes.push_back(this->triangles[i].p[j].x);
this->vertexes.push_back(this->triangles[i].p[j].y);
this->vertexes.push_back(this->triangles[i].p[j].z);
this->vertexes.push_back(this->triangles[i].norm.x);
this->vertexes.push_back(this->triangles[i].norm.y);
this->vertexes.push_back(this->triangles[i].norm.z);
}
}
return &(this->vertexes);
}
void MarchingCubesThread::generateTriangles(float minvalue_scale)
{
this->vertexes.clear();
this->triangles.clear();
this->triangles = MarchingCubesDataset(this->dataset->getMaxVal() * minvalue_scale, *(this->dataset), LinearInterp, this->num_triangles);
}
在創建一組新的三角形後,OpenGL渲染器更新了網格,但在某些時候,我得到了一些垃圾三角形和/或來自上一次迭代的三角形,它們應該是
this->vertexes.clear();
this->triangles.clear();
在這裏連續三次採取了一些截圖:
致電該清除個
關於這裏發生了什麼任何線索?謝謝
PD:爲完整的源代碼,這是在GitHub上公開的Git倉庫: https://github.com/joecabezas/MemoriaJoeCabezasCode/tree/visualizer
編輯的代碼中使用您的建議,但在excecution的時候拋出這個錯誤: intel_do_flush_locked失敗:參數列表過長 –
也,我添加了鏈接到GitHub上託管的,如果你想偷偷的源代碼;) –
aaawwww,我想通了,我在開始製作這個 - > vertexes-> size()的空矢量,現在我強制創建三角形,然後渲染,現在它的工作原理!,謝謝 –