2013-10-28 42 views
-1

我有一個二進制文件,其中包含頂點和法線,以在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); 

}

該代碼看起來是正確的,但在渲染窗口中沒有顯示任何內容,任何人都可以提示我這裏可能有什麼錯誤?視口設置爲匹配窗口的寬度和高度。

+0

首先,試圖讓屏幕上的基本三角形,瞭解問題的所在。 您的代碼似乎在使用Open GL2。*語法。你可能想轉向使用着色器處理事物的方式。 – Raja

+0

當我嘗試顯示帶有不同頂點的三角形時,它運行良好,但在從數據緩衝區讀取三角形版本時不起作用,翻譯或視口中是否有任何錯誤? – sarath

+0

我試着翻譯出來,它沒有顯示任何東西 – sarath

回答

1

您的for循環與iterator看起來很腥。您使用的iteratordata以及i

讓它:

size_t dataLen = data.size(); 
for(size_t i = 0; i < dataLen; i+= 18) { 
    glBegin(GL_TRIANGLE_LIST); // your original code mentioned TRI_STRIP. 
    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(); 
} 
+0

它仍然不起作用,並且沒有定義GL_TRIANGLE_LIST。無論如何感謝您的建議 – sarath

+0

@sarath:這是一個D3D術語,適當的OpenGL枚舉將只是'GL_TRIANGLES' –

+0

我解決了它,問題與gluperspective,謝謝你的sugessions。 – sarath