Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
struct bone{ bone* parent; mat4 modelview; vec3 root, offset; }; struct bonePose{ bone* bone; vec3 offset; vec3 rotation; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
for(unsigned int i = 0; i < m_skeleton.size(); i++){ if(m_skeleton[i].parent){ m_skeleton[i].root = m_skeleton[i].parent->root+m_skeleton[i].parent->offset; m_skeleton[i].modelview = m_skeleton[i].parent->modelview; } else{ m_skeleton[i].modelview.setIdentity(); } m_skeleton[i].offset = m_frames[i].offset; //m_skeleton[i].modelview.setIdentity(); m_skeleton[i].modelview.translate(m_skeleton[i].root); m_skeleton[i].modelview.rotate(m_frames[i].rotation.x, 1, 0, 0); m_skeleton[i].modelview.rotate(m_frames[i].rotation.y, 0, 1, 0); m_skeleton[i].modelview.rotate(m_frames[i].rotation.z, 0, 0, 1); m_skeleton[i].modelview.translate(m_skeleton[i].root*-1); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#version 150 uniform mat4 pm; uniform mat4 bm[2]; in vec3 vertex; in ivec3 boneIndex; in vec3 boneWeight; void main(){ vec4 pos = vec4(vertex, 1.0); if(boneIndex.x > -1){ pos = (bm[boneIndex.x]*pos)*boneWeight.x; } if(boneIndex.y > -1){ pos = (bm[boneIndex.y]*pos)*boneWeight.y+pos; } if(boneIndex.z > -1){ pos = (bm[boneIndex.z]*pos)*boneWeight.z+pos; } gl_Position = m*vec4(vertex, 1.0); } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »DeKugelschieber« (04.08.2012, 13:09)
Community-Fossil
HLSL-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#version 130 attribute vec3 PositionAtt; varying vec4 varyFragmentPosition; attribute vec3 NormalAtt; attribute vec3 TangentAtt; attribute vec3 BitangentAtt; varying vec3 varyNormal; varying vec3 varyTangent; varying vec3 varyBitangent; attribute uvec4 WeightIdAtt; attribute vec4 WeightValueAtt; uniform mat4 varyBoneTransforms[50]; void main() { varyNormal=normalize(NormalAtt); varyTangent=normalize(TangentAtt); varyBitangent=normalize(BitangentAtt); vec4 Pos=vec4(PositionAtt, 1); Pos=(varyBoneTransforms[WeightIdAtt[0]]*vec4(PositionAtt, 1))*WeightValueAtt[0] + (varyBoneTransforms[WeightIdAtt[1]]*vec4(PositionAtt, 1))*WeightValueAtt[1] + (varyBoneTransforms[WeightIdAtt[2]]*vec4(PositionAtt, 1))*WeightValueAtt[2] + (varyBoneTransforms[WeightIdAtt[3]]*vec4(PositionAtt, 1))*WeightValueAtt[3]; varyFragmentPosition=gl_ModelViewMatrix*Pos; gl_Position=gl_ProjectionMatrix*gl_ModelViewMatrix*Pos; } |
Community-Fossil
Quellcode |
|
1 |
uniform mat4 varyBoneTransforms[50]; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (04.08.2012, 15:52)
Community-Fossil
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (29.10.2012, 23:02)
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
void Bone::updateMatrices(){ // wird einmal für root bone aufgerufen calculateModelMatrix(); for(unsigned int i = 0; i < m_children.size(); i++){ m_children[i]->calculateModelMatrix(); } } void Bone::calculateModelMatrix(){ // local space m_local.setIdentity(); if(m_start != 0 && m_end != 0){ m_local.rotate(m_start->m_rotate.x, 1, 0, 0); // skalierung, verschiebung noch außer acht! m_local.rotate(m_start->m_rotate.y, 0, 1, 0); m_local.rotate(m_start->m_rotate.z, 0, 0, 1); } m_local.translate(m_offset); // world space m_world = m_local; if(m_parent){ m_world *= m_parent->m_world; } } |
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void Bone::calculateModelMatrix(){ // local space m_local.setIdentity(); if(m_start != 0 && m_end != 0){ m_local.rotate(m_start->m_rotate.x, 1, 0, 0); m_local.rotate(m_start->m_rotate.y, 0, 1, 0); m_local.rotate(m_start->m_rotate.z, 0, 0, 1); } // world space m_world = m_local*m_offset; if(m_parent){ m_world *= m_parent->m_world; } } |
Werbeanzeige