mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
FInd a solution for lightmap without 2nd uvset
This commit is contained in:
parent
4787818960
commit
d8d0a28d0f
3 changed files with 12 additions and 3 deletions
|
@ -1179,7 +1179,7 @@ FBXTexture getTexture(const QString& textureID,
|
||||||
texture.transform.setTranslation(p.translation);
|
texture.transform.setTranslation(p.translation);
|
||||||
texture.transform.setRotation(glm::quat(glm::radians(p.rotation)));
|
texture.transform.setRotation(glm::quat(glm::radians(p.rotation)));
|
||||||
texture.transform.setScale(p.scaling);
|
texture.transform.setScale(p.scaling);
|
||||||
if ((p.UVSet != "map1") || (p.UVSet != "UVSet0")) {
|
if ((p.UVSet != "map1") && (p.UVSet != "UVSet0")) {
|
||||||
texture.texcoordSet = 1;
|
texture.texcoordSet = 1;
|
||||||
}
|
}
|
||||||
texture.texcoordSetName = p.UVSet;
|
texture.texcoordSetName = p.UVSet;
|
||||||
|
@ -1605,6 +1605,7 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping,
|
||||||
if (property.name == propertyName) {
|
if (property.name == propertyName) {
|
||||||
QString v = property.properties.at(0).toString();
|
QString v = property.properties.at(0).toString();
|
||||||
if (property.properties.at(0) == "UVSet") {
|
if (property.properties.at(0) == "UVSet") {
|
||||||
|
std::string uvName = property.properties.at(index).toString().toStdString();
|
||||||
tex.assign(tex.UVSet, property.properties.at(index).toString());
|
tex.assign(tex.UVSet, property.properties.at(index).toString());
|
||||||
} else if (property.properties.at(0) == "CurrentTextureBlendMode") {
|
} else if (property.properties.at(0) == "CurrentTextureBlendMode") {
|
||||||
tex.assign<uint8_t>(tex.currentTextureBlendMode, property.properties.at(index).value<int>());
|
tex.assign<uint8_t>(tex.currentTextureBlendMode, property.properties.at(index).value<int>());
|
||||||
|
|
|
@ -2120,6 +2120,7 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) {
|
||||||
NetworkMesh networkMesh;
|
NetworkMesh networkMesh;
|
||||||
|
|
||||||
int totalIndices = 0;
|
int totalIndices = 0;
|
||||||
|
bool checkForTexcoordLightmap = false;
|
||||||
foreach (const FBXMeshPart& part, mesh.parts) {
|
foreach (const FBXMeshPart& part, mesh.parts) {
|
||||||
NetworkMeshPart networkPart;
|
NetworkMeshPart networkPart;
|
||||||
if (!part.diffuseTexture.filename.isEmpty()) {
|
if (!part.diffuseTexture.filename.isEmpty()) {
|
||||||
|
@ -2149,6 +2150,7 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) {
|
||||||
false, part.emissiveTexture.content);
|
false, part.emissiveTexture.content);
|
||||||
networkPart.emissiveTextureName = part.emissiveTexture.name;
|
networkPart.emissiveTextureName = part.emissiveTexture.name;
|
||||||
networkPart.emissiveTexture->setLoadPriorities(_loadPriorities);
|
networkPart.emissiveTexture->setLoadPriorities(_loadPriorities);
|
||||||
|
checkForTexcoordLightmap = true;
|
||||||
}
|
}
|
||||||
networkMesh.parts.append(networkPart);
|
networkMesh.parts.append(networkPart);
|
||||||
|
|
||||||
|
@ -2215,7 +2217,12 @@ void NetworkGeometry::setGeometry(const FBXGeometry& geometry) {
|
||||||
if (mesh.tangents.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::TANGENT, channelNum++, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ));
|
if (mesh.tangents.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::TANGENT, channelNum++, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ));
|
||||||
if (mesh.colors.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::COLOR, channelNum++, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB));
|
if (mesh.colors.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::COLOR, channelNum++, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB));
|
||||||
if (mesh.texCoords.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::TEXCOORD, channelNum++, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
if (mesh.texCoords.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::TEXCOORD, channelNum++, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
||||||
if (mesh.texCoords1.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::TEXCOORD1, channelNum++, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
if (mesh.texCoords1.size()) {
|
||||||
|
networkMesh._vertexFormat->setAttribute(gpu::Stream::TEXCOORD1, channelNum++, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
||||||
|
} else if (checkForTexcoordLightmap && mesh.texCoords.size()) {
|
||||||
|
// need lightmap texcoord UV but doesn't have uv#1 so just reuse the same channel
|
||||||
|
networkMesh._vertexFormat->setAttribute(gpu::Stream::TEXCOORD1, channelNum - 1, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
||||||
|
}
|
||||||
if (mesh.clusterIndices.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::VEC4, gpu::NFLOAT, gpu::XYZW));
|
if (mesh.clusterIndices.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::SKIN_CLUSTER_INDEX, channelNum++, gpu::Element(gpu::VEC4, gpu::NFLOAT, gpu::XYZW));
|
||||||
if (mesh.clusterWeights.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::VEC4, gpu::NFLOAT, gpu::XYZW));
|
if (mesh.clusterWeights.size()) networkMesh._vertexFormat->setAttribute(gpu::Stream::SKIN_CLUSTER_WEIGHT, channelNum++, gpu::Element(gpu::VEC4, gpu::NFLOAT, gpu::XYZW));
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,9 @@ void main(void) {
|
||||||
|
|
||||||
// and the texture coordinates
|
// and the texture coordinates
|
||||||
gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0);
|
gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0);
|
||||||
|
// interpolatedTexcoord1 = vec2(texcoordMatrices[1] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0)).xy;
|
||||||
interpolatedTexcoord1 = vec2(texcoordMatrices[1] * vec4(texcoord1.xy, 0.0, 1.0)).xy;
|
interpolatedTexcoord1 = vec2(texcoordMatrices[1] * vec4(texcoord1.xy, 0.0, 1.0)).xy;
|
||||||
|
|
||||||
// use standard pipeline transform
|
// use standard pipeline transform
|
||||||
gl_Position = ftransform();
|
gl_Position = ftransform();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue