我有一個二進制文件,其中包含頂點和法線,以在opengl中製作人體圖形。圖形由小三角形組成。二進制文件中的數字(浮點數)按照三角形第一個頂點的X,Y,Z順序,然後是法線(x,y,z),類似地,兩個這樣的集合完成一個三角形(因此二進制文件中的每一組浮點數都是三角形),二進制文件包含數千個這樣的三角形。我用C++編寫了一個窗口形式的opengl代碼來顯示圖形,下面是渲染函數。我忽略了法線,並且僅使用頂點opengl代碼顯示人體圖形,從二進制文件中讀取頂點
void OpenGL::RenderScene()
{
size_t file_size;
ifstream file;
file.open("male_16_do`enter code here`wn.bin",ios::binary|ios::in);
if(!file){
cout<<"Couldnt find the file"<<endl;
}
file.seekg(0,ios::end);
file_size=file.tellg();
file_size/=(sizeof(float));
file.seekg(0,ios::beg);
std::vector<float> data(file_size);
file.read(reinterpret_cast<char*>(&data[0]),file_size*sizeof(float));
for(size_t i=0;i<file_size;i++){
//cout<<fixed<<setprecision(3)<<data[i]<<endl;
}
vector<float>::iterator iter;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(1.5f,1.0f,0.0f);
for(iter=data.begin();iter!=data.end();iter++){
glBegin(GL_TRIANGLE_STRIP);
int i=0;
glColor3f(1,0.0f,0.0f);
glVertex3f(data[i], data[i+1], data[i+2]);
glColor3f(1,0.0f,0.0f);
glVertex3f(data[i+6],data[i+7], data[i+8]);
glColor3f(1,0.0f,0.0f);
glVertex3f(data[i+12],data[i+13], data[i+14]);
glEnd();
i=i+18;
}
SwapBuffers(m_hDC);
}
該代碼看起來是正確的,但在渲染窗口中沒有顯示任何內容,任何人都可以提示我這裏可能有什麼錯誤?視口設置爲匹配窗口的寬度和高度。
首先,試圖讓屏幕上的基本三角形,瞭解問題的所在。 您的代碼似乎在使用Open GL2。*語法。你可能想轉向使用着色器處理事物的方式。 – Raja
當我嘗試顯示帶有不同頂點的三角形時,它運行良好,但在從數據緩衝區讀取三角形版本時不起作用,翻譯或視口中是否有任何錯誤? – sarath
我試着翻譯出來,它沒有顯示任何東西 – sarath