2013-05-07 141 views
1

我使用Assimp到3D模型加載到我的計劃。到目前爲止,所有的東西都已經變得華麗,除非我遇到了一個看起來沒有意義的Lightwave物體。當然,它在Lightwave中很好地渲染,但是在Assimp中沒有紋理座標,沒有UV座標,但紋理最終被加載。但是這並沒有幫助 - 它們只是坐在記憶中,從來沒有使用過,因爲 - 你猜對了 - 沒有紋理座標。Assimp模型貼圖,但沒有紋理座標

我還沒有發現任何有用的Assimp頁到目前爲止這一點。其他模型加載正常並且紋理映射正確。這是Assimp的問題嗎?

回答

4

會出現這種情況與所有光波機型,或僅這一項?您的程序是否正確渲染其他模型?

我也遇到同樣的問題,使用assimp讀取OBJ文件(而不是Lightwave數據文件)並在OpenGL中渲染該東西。我的渲染器完全是從assimp網站上的示例複製的。我對我的渲染器做了一些調查,發現我沒有任何代碼來使用UV!所以,我說

if(mesh->mTextureCoords[0] != NULL) { 
    glTexCoord2fv(&mesh->mTextureCoords[0][index].x); 
} 

身在何方我畫一個頂點,其中

int index = face->mIndices[i]; 

之前,我是一個for循環的循環控制變量。

的問題:assimp網站上找到什麼都不做與UV座標有用的渲染代碼。你必須自己添加。

希望這不是晚來幫忙!

+0

我沒有噸模型,但是這個至少發生一次。 – GraphicsMuncher 2013-07-09 14:50:54

0

有8個紋理座標時隙...每一個可以與不同的紋理被填充或不...你僅僅需要檢查第一個

mesh-> mTextureCoords [0]

它轉換到一個數組這樣 「常量結構aiVector3D *」 和遍歷索引mTextureCoords [0] [t]的

通知我們循環T及其2D陣列

for (t = 0; t < mesh->mNumVertices; ++t) { 
     const struct aiVector3D* textureVec = &mesh->mTextureCoords[0][t]; 
     printf("tex (%f,%f,%f)", textureVec->x, textureVec->y, textureVec->z); 
    } 

希望它有幫助!我也被困在這裏了!我以爲這是不加載...

現在

: TEX(0.159871,0.410298,0.000000)TEX(0.034839,0.369741,0.000000)TEX(0.147435,0.506447,0.000000)TEX(0.018893,0.493014,0.000000)TEX( (0.159871,0.602596,0.000000)tex(0.034839,0.616288,0.000000)tex(0.196806,0.695823,0.000000)tex(0.082196,0.735817,0.000000)tex(0.257118,0.783297,0.000000)tex(0.159520,0.847968,0.000000)tex(0.314932, (0.554152,0.373114,0.000000)tex(0.557998,0.677465,0.000000)tex(0.442610,0.703479,0.000000)

+0

其實它可能是meth-> mNumUVComponents ...對不起! – Orbitus007 2016-09-18 17:34:08