2013-04-16 81 views
1

我必須創建動畫,在那裏加特林槍將會被射擊(它不一定是複雜的,因爲它只是一種練習)。我拔出槍的基本版本,看起來像這樣:opengl - 如何將紋理放在3D不規則物體上

Gatling gun

不要打擾顏色 - 我讓他們一樣,要能看到有槍的特定部分的egdes。現在我想通過使用一些紋理 - 摩洛或類似金屬色 - example 1example2使其看起來更好。我知道如何加載紋理以及如何將其用於2d對象,但我不知道是否有可能爲我的整個繪圖使用此紋理,或者是否必須分別爲每個部分使用紋理?這是我的代碼對應於從BMP文件加載紋理,並使其能夠使用:

void initTexture(string fileName) 
{ 
    loadBmp(fileName.c_str()); 
    textureId = 13; 
    glBindTexture(GL_TEXTURE_2D, textureId); //Tell OpenGL which texture to edit 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    //Map the image to the texture 
    glTexImage2D(GL_TEXTURE_2D,    //Always GL_TEXTURE_2D 
       0,       //0 for now 
       GL_RGB,      //Format OpenGL uses for image 
       tex.info.biWidth, tex.info.biHeight, //Width and height 
       0,       //The border of the image 
       GL_RGB, //GL_RGB, because pixels are stored in RGB format 
       GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE, because pixels are stored 
            //as unsigned numbers 
       tex.px);    //The actual pixel data 

} 

loadBmp()是函數加載位圖文件。我試圖在互聯網和計算器中搜索某些東西,但所有關於立方體或球體的例子都不幫助我。我怎樣才能把紋理放在這張圖上?

回答

1

紋理映射需要(手動)將紋理座標分配給每個頂點。在自動紋理座標生成方面,或者在沒有紋理座標的情況下,通過爲每個面部分配一個像素(迪士尼動畫公司爲其計算機動畫電影的後期方法開創了先河),可以實現自動紋理座標生成。

既然你沒有指定你用來模擬我會向您推薦一些教程,紋理UV映射攪拌機

哪些程序

http://wiki.blender.org/index.php/Doc:2.6/Manual/Textures/Mapping/UV/Unwrapping

請不要告訴我你做「碼」你的槍,因爲這是錯的,錯的,錯的!

一旦你得到了紋理座標,你將它們作爲另一個頂點屬性傳遞給OpenGL。

+0

我知道這是錯誤的,但這是我的做法。我必須使用OpenGL繪製所有這些,而無需加載任何模型。我知道這是愚蠢的,但我能說什麼 - 我只需要做這個... :( – Blood

+0

@血液:家庭作業的任務?那麼告訴他們教你什麼在現實世界的預期 - 沒有人硬編碼模型。他們不能指望大學生解決問題,這些問題仍然是積極的學術研究,你當然可以使用一些技巧,比如給每個桶提供自己的紋理,並使用圓柱形紋理座標 – datenwolf

+0

你是不對的我已經發布回答這個問題。檢查出來 – Blood