|
|
@@ -864,14 +864,14 @@ void EasyMesh::ComputeNormals(int start, int vcount) |
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
{ |
|
|
|
#if 1 |
|
|
|
#if 0 |
|
|
|
VertexDictionnary vert_dict; |
|
|
|
Array<int> tri_list; |
|
|
|
|
|
|
|
tri_list.Reserve(m_indices.Count() - m_cursors.Last().m2); |
|
|
|
for (int i = m_cursors.Last().m2; i < m_indices.Count(); i++) |
|
|
|
{ |
|
|
|
vert_dict.AddVertex(m_indices[i], m_vert[m_indices[i]].m1); |
|
|
|
vert_dict.AddVertex(m_indices[i], m_vert[m_indices[i]].m_coord); |
|
|
|
tri_list << m_indices[i]; |
|
|
|
} |
|
|
|
|
|
|
@@ -886,7 +886,7 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
{ |
|
|
|
int cur_tri = tri_check[0]; |
|
|
|
int v[3] = { tri_list[cur_tri + uv_offset % 3], tri_list[cur_tri + (1 + uv_offset) % 3], tri_list[cur_tri + (2 + uv_offset) % 3] }; |
|
|
|
vec2 uv[3] = { m_vert[tri_list[cur_tri]].m4, m_vert[tri_list[cur_tri + 1]].m4, m_vert[tri_list[cur_tri + 2]].m4 }; |
|
|
|
vec2 uv[3] = { m_vert[tri_list[cur_tri]].m_texcoord.xy, m_vert[tri_list[cur_tri + 1]].m_texcoord.xy, m_vert[tri_list[cur_tri + 2]].m_texcoord.xy }; |
|
|
|
for (int j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
if (uv[j] != vec2(-1.0f) && uv[j] == uv[(j + 1) % 3]) |
|
|
@@ -923,8 +923,8 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
int base_i = 0; |
|
|
|
for (int j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
float tmp_dot = abs(dot(normalize(m_vert[v[(j + 1) % 3]].m1 - m_vert[v[j]].m1), |
|
|
|
normalize(m_vert[v[(j + 2) % 3]].m1 - m_vert[v[j]].m1))); |
|
|
|
float tmp_dot = abs(dot(normalize(m_vert[v[(j + 1) % 3]].m_coord - m_vert[v[j]].m_coord), |
|
|
|
normalize(m_vert[v[(j + 2) % 3]].m_coord - m_vert[v[j]].m_coord))); |
|
|
|
if (tmp_dot < new_dot) |
|
|
|
{ |
|
|
|
base_i = j; |
|
|
@@ -932,7 +932,7 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
} |
|
|
|
} |
|
|
|
uv[base_i] = vec2(.0f); |
|
|
|
uv[(base_i + 1) % 3] = vec2(.0f, uv_scale * length(m_vert[v[base_i]].m1 - m_vert[v[(base_i + 1) % 3]].m1)); |
|
|
|
uv[(base_i + 1) % 3] = vec2(.0f, uv_scale * length(m_vert[v[base_i]].m_coord - m_vert[v[(base_i + 1) % 3]].m_coord)); |
|
|
|
uv_set = 2; |
|
|
|
} |
|
|
|
//2 points have been set, let's figure the third |
|
|
@@ -964,9 +964,9 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
|
|
|
|
//Do this to be sure the normal is OK. |
|
|
|
ComputeNormals(cur_tri, 3); |
|
|
|
vec3 v01 = normalize(m_vert[v[1]].m1 - m_vert[v[0]].m1); |
|
|
|
vec3 v02 = m_vert[v[2]].m1 - m_vert[v[0]].m1; |
|
|
|
vec3 v_dir = normalize(cross(m_vert[m_indices[cur_tri]].m2, v01)); |
|
|
|
vec3 v01 = normalize(m_vert[v[1]].m_coord - m_vert[v[0]].m_coord); |
|
|
|
vec3 v02 = m_vert[v[2]].m_coord - m_vert[v[0]].m_coord; |
|
|
|
vec3 v_dir = normalize(cross(m_vert[m_indices[cur_tri]].m_normal, v01)); |
|
|
|
vec2 texu_dir = uv[1] - uv[0]; |
|
|
|
vec2 texv_dir = vec2(texu_dir.y, texu_dir.x); |
|
|
|
//Final calculations |
|
|
@@ -982,10 +982,10 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
matching_vert << v[i]; |
|
|
|
vert_dict.FindMatchingVertices(v[i], matching_vert); |
|
|
|
for (int j = 0; j < matching_vert.Count(); j++) |
|
|
|
if (m_vert[matching_vert[j]].m4 == vec2(-1.0f)) |
|
|
|
m_vert[matching_vert[j]].m4 = abs(uv[i]); |
|
|
|
if (m_vert[matching_vert[j]].m_texcoord.xy == vec2(-1.0f)) |
|
|
|
m_vert[matching_vert[j]].m_texcoord = vec4(abs(uv[i]), m_vert[matching_vert[j]].m_texcoord.zw); |
|
|
|
#else |
|
|
|
m_vert[v[i]].m4 = abs(uv[i]); |
|
|
|
m_vert[v[i]].m_texcoord = abs(uv[i]); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
@@ -1008,9 +1008,9 @@ void EasyMesh::ComputeTexCoord(float uv_scale, int uv_offset) |
|
|
|
{ |
|
|
|
for (int j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
m_vert[tri_list[cur_tri]].m4 = vec2(-1.0f); |
|
|
|
m_vert[tri_list[cur_tri + 1]].m4 = vec2(-1.0f); |
|
|
|
m_vert[tri_list[cur_tri + 2]].m4 = vec2(-1.0f); |
|
|
|
m_vert[tri_list[cur_tri]].m_texcoord = vec4(vec2(-1.0f), m_vert[tri_list[cur_tri]].m_texcoord.zw); |
|
|
|
m_vert[tri_list[cur_tri + 1]].m_texcoord = vec4(vec2(-1.0f), m_vert[tri_list[cur_tri + 1]].m_texcoord.zw); |
|
|
|
m_vert[tri_list[cur_tri + 2]].m_texcoord = vec4(vec2(-1.0f), m_vert[tri_list[cur_tri + 2]].m_texcoord.zw); |
|
|
|
} |
|
|
|
|
|
|
|
//uv[0] = vec2(-1.0f); |
|
|
|