mikumikudance

windows 查看工具下载

http://www.geocities.jp/higuchuu4/index_e.htm

http://kkhk22.seesaa.net/category/14045227-1.html

官网(介绍了mmd文件格式,以及mmd模型)

http://mikumikudance.wikia.com/wiki/Category:MMD_Models

http://mikumikudance.wikia.com/wiki/MMD:Polygon_Model_Data

http://mikumikudance.wikia.com/wiki/VMD_file_format

https://learnmmd.com/

(MMD相关开源代码) https://learnopengl.com/

https://www6.atwiki.jp/vpvpwiki/pages/288.html

https://bitbucket.org/nyan_developer/nya-engine/overview

opengl学习相关博客

http://moddb.wikia.com/wiki/OpenGL:Tutorials:Basic_Bones_System

http://www.wazim.com/Collada_Tutorial_2.htm

https://blog.jayway.com/2013/05/09/opengl-es-2-0-tutorial-for-android-part-i-getting-started/ http://www.learnopengles.com/android-lesson-seven-an-introduction-to-vertex-buffer-objects-vbos/

toon 渲染法(卡通渲染法)

        int[] buf = new int[1];
        GLES20.glGenBuffers(1, buf, 0);

        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buf[0]);
        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, bufMikuPos.capacity() * 4, bufMikuPos, GLES20.GL_STATIC_DRAW);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        bufPos = buf[0];

        buf = new int[1];
        GLES20.glGenBuffers(1, buf, 0);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buf[0]);
        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, bufMikuNormal.capacity() * 4, bufMikuNormal, GLES20.GL_STATIC_DRAW);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        bufNormal = buf[0];

        buf = new int[1];
        GLES20.glGenBuffers(1, buf, 0);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buf[0]);
        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, bufMikuColor.capacity() * 4, bufMikuColor, GLES20.GL_STATIC_DRAW);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
        bufColor = buf[0];

        indexBuf = new int[1];
        GLES20.glGenBuffers(1, indexBuf, 0);

        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexBuf[0]);
        GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexMikuBuf.capacity() * 4, indexMikuBuf, GLES20.GL_STATIC_DRAW);
        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);

        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufPos);
        GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 3 * 4, 0);
        GLES20.glEnableVertexAttribArray(a_Position);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufNormal);
        GLES20.glVertexAttribPointer(a_Normal, 3, GLES20.GL_FLOAT, false, 3 * 4, 0);
        GLES20.glEnableVertexAttribArray(a_Normal);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufColor);
        GLES20.glVertexAttribPointer(a_Color, 4, GLES20.GL_FLOAT, false, 4 * 4, 0);
        GLES20.glEnableVertexAttribArray(a_Color);

        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexBuf[0]);
        GLES20.glDrawElements(GLES20.GL_TRIANGLES, indexMikuBuf.capacity(), GLES20.GL_UNSIGNED_INT, 0);

如果使用了pointer 就不需要bind 了ElementArrayBuffer
gles2.DrawElements

vmd相关

1.  将骨头的位置移动到原点(position)
2.  使用动作的旋转数据(rotation)进行旋转
3.  在将骨头位置加回来(position)
4.  加上动作的位移数据(location)

经过旋转移动后,骨头的位置也有了变化。需要重新计算骨头的位置。

# x = kf + b
def calcuMidFrame(x1, x2, f1, f2, f):
    k = (x2 - x1) / (f2 - f1)
    b = x1 - (f1*x2 - f1*x1) / (f2 - f1)
    return k*f+b

转载于:https://my.oschina.net/zdglf/blog/807544

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值