WoW骨骼動畫的GLSL實現

2021-04-19 22:19:47 字數 1329 閱讀 8381

使用指令將頂點的骨骼和權重資訊作為generic attribute屬性傳入給shader物件.

glint indexbone = glgetattriblocationarb(m_glprograme, "bone");

glint indexweight = glgetattriblocationarb(m_glprograme, "weight");

glvertexattribpointerarb(indexbone, 4, gl_unsigned_byte, gl_false, sizeof(mdl_vertex), m_arrmdlvertices[0].bones);

glvertexattribpointerarb(indexweight, 4, gl_unsigned_byte, gl_false, sizeof(mdl_vertex), m_arrmdlvertices[0].weights);

glenablevertexattribarrayarb(indexbone);

glenablevertexattribarrayarb(indexweight);

在每幀在cpu中計算骨骼矩陣,並將計算好的骨骼矩陣陣列傳入shader物件.

glint indexbonematrices = glgetuniformlocationarb(m_model.m_glprograme, "bonematrices");

for(unsigned int i = 0; i < m_animskeleton.m_vecbones.size(); i++)

搞定,執行,發現wow的獸人模型竟然有128個骨骼,而n6200的shader的uniform matrix引數最多隻給60個,還得考慮低端機器,玻璃渣是怎麼做的?發現dx的實現從來就是送入硬體處理的,節省了額外的頂點記憶體,加快了速度,確實是不二的選擇.

attribute vec4 bone;

attribute vec4 weight;

uniform mat4 bonematrices[

60 ];

const

float

fw =

1.0/

255.0

; void

main() 

else

break

;gl_position 

=gl_modelviewprojectionmatrix 

*blendvertex;

gl_texcoord[0] 

=gl_texturematrix[0] 

*gl_multitexcoord0;

gl_frontcolor 

=gl_color;

}

骨骼動畫換裝的例項

骨骼動畫換裝的例項轉乙個骨骼動畫換裝的例項你參考一下。一 我們直接在cocos2d x自帶的hellocpp的工程中新增 即可.我們在初始化中新增如下 cpp ccsize szwin ccdirector shareddirector getvisiblesize ccarmaturedatama...

基於canvas的骨骼動畫

最近學習到了一種關於canvas的骨骼動畫,聽這個名字就知道他和canvas之前的動畫不同,不知道你有沒有興趣了解一下呢?官方介紹說alloystick 是採用html5技術開發的乙個骨骼動畫引擎,可以用於html5動畫開發 html5遊戲開發 alloystick 主要由骨骼動畫引擎和骨骼動畫編輯...

骨骼動畫反向動力學 IK 的實現

反向動力學,inverse kinematics,簡稱ik。簡單地說,由父骨骼的方位和子骨骼的相對變換得到子骨骼的方位,稱為正向動力學 forward kinematics,fk 而ik則是先確定子骨骼的方位,反向推導出其繼承鏈上n級父骨骼方位的方法。ik在遊戲裡最常見的應用是foot placem...