mirror of https://github.com/bjornbytes/lovr.git
Load tangents from models;
This commit is contained in:
parent
cb7b99f9a6
commit
4463bd00c8
|
@ -273,6 +273,7 @@ ModelData* lovrModelDataCreate(Blob* blob) {
|
|||
bool hasNormals = false;
|
||||
bool hasUVs = false;
|
||||
bool hasVertexColors = false;
|
||||
bool hasTangents = false;
|
||||
bool isSkinned = false;
|
||||
|
||||
for (unsigned int m = 0; m < scene->mNumMeshes; m++) {
|
||||
|
@ -282,6 +283,7 @@ ModelData* lovrModelDataCreate(Blob* blob) {
|
|||
hasNormals |= assimpMesh->mNormals != NULL;
|
||||
hasUVs |= assimpMesh->mTextureCoords[0] != NULL;
|
||||
hasVertexColors |= assimpMesh->mColors[0] != NULL;
|
||||
hasTangents |= assimpMesh->mTangents != NULL;
|
||||
isSkinned |= assimpMesh->mNumBones > 0;
|
||||
}
|
||||
|
||||
|
@ -292,6 +294,7 @@ ModelData* lovrModelDataCreate(Blob* blob) {
|
|||
if (hasNormals) vertexFormatAppend(&format, "lovrNormal", ATTR_FLOAT, 3);
|
||||
if (hasUVs) vertexFormatAppend(&format, "lovrTexCoord", ATTR_FLOAT, 2);
|
||||
if (hasVertexColors) vertexFormatAppend(&format, "lovrVertexColor", ATTR_BYTE, 4);
|
||||
if (hasTangents) vertexFormatAppend(&format, "lovrTangent", ATTR_FLOAT, 3);
|
||||
size_t boneByteOffset = format.stride;
|
||||
if (isSkinned) vertexFormatAppend(&format, "lovrBones", ATTR_INT, 4);
|
||||
if (isSkinned) vertexFormatAppend(&format, "lovrBoneWeights", ATTR_FLOAT, 4);
|
||||
|
@ -378,6 +381,18 @@ ModelData* lovrModelDataCreate(Blob* blob) {
|
|||
}
|
||||
}
|
||||
|
||||
if (hasTangents) {
|
||||
if (assimpMesh->mTangents) {
|
||||
*vertices.floats++ = assimpMesh->mTangents[v].x;
|
||||
*vertices.floats++ = assimpMesh->mTangents[v].y;
|
||||
*vertices.floats++ = assimpMesh->mTangents[v].z;
|
||||
} else {
|
||||
*vertices.floats++ = 0;
|
||||
*vertices.floats++ = 0;
|
||||
*vertices.floats++ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
vertex++;
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,7 @@ static GLuint linkShaders(GLuint vertexShader, GLuint fragmentShader) {
|
|||
glBindAttribLocation(program, LOVR_SHADER_NORMAL, "lovrNormal");
|
||||
glBindAttribLocation(program, LOVR_SHADER_TEX_COORD, "lovrTexCoord");
|
||||
glBindAttribLocation(program, LOVR_SHADER_VERTEX_COLOR, "lovrVertexColor");
|
||||
glBindAttribLocation(program, LOVR_SHADER_TANGENT, "lovrTangent");
|
||||
glBindAttribLocation(program, LOVR_SHADER_BONES, "lovrBones");
|
||||
glBindAttribLocation(program, LOVR_SHADER_BONE_WEIGHTS, "lovrBoneWeights");
|
||||
glLinkProgram(program);
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
#define LOVR_SHADER_NORMAL 1
|
||||
#define LOVR_SHADER_TEX_COORD 2
|
||||
#define LOVR_SHADER_VERTEX_COLOR 3
|
||||
#define LOVR_SHADER_BONES 4
|
||||
#define LOVR_SHADER_BONE_WEIGHTS 5
|
||||
#define LOVR_SHADER_TANGENT 4
|
||||
#define LOVR_SHADER_BONES 5
|
||||
#define LOVR_SHADER_BONE_WEIGHTS 6
|
||||
#define LOVR_MAX_UNIFORM_LENGTH 256
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -32,6 +32,7 @@ const char* lovrShaderVertexPrefix = ""
|
|||
"in vec3 lovrNormal; \n"
|
||||
"in vec2 lovrTexCoord; \n"
|
||||
"in vec4 lovrVertexColor; \n"
|
||||
"in vec3 lovrTangent; \n"
|
||||
"in ivec4 lovrBones; \n"
|
||||
"in vec4 lovrBoneWeights; \n"
|
||||
"out vec2 texCoord; \n"
|
||||
|
|
Loading…
Reference in New Issue