瀏覽代碼

Fixed shit

undefined
Benjamin ‘Touky’ Huet Sam Hocevar <sam@hocevar.net> 10 年之前
父節點
當前提交
21d90c7c22
共有 1 個檔案被更改,包括 73 行新增8 行删除
  1. +73
    -8
      test/meshviewer.cpp

+ 73
- 8
test/meshviewer.cpp 查看文件

@@ -209,7 +209,7 @@ public:
m_zoom = 0.f;
m_zoom_mesh = 0.f;
m_zoom_speed = 0.f;
m_rot = vec2(45.f, -45.f);
m_rot = vec2(/*45.f*/0.f, -45.f);
m_rot_mesh = vec2::zero;
m_rot_speed = vec2::zero;
m_pos = vec2::zero;
@@ -501,7 +501,7 @@ public:
vec3 light_pos = m_ssetup->m_lights[k]->GetPosition();
mat4 world_cam = m_camera->GetView();
light_pos = (inverse(world_cam) * vec4((world_cam * vec4(light_pos, 1.0f)).xyz * vec3::axis_z, 1.0f)).xyz;
tc.AddTarget(box3(vec3::mone, vec3::one) + light_pos *
tc.AddTarget(box3(vec3::onen, vec3::one) + light_pos *
((m_ssetup->m_lights[k]->GetType() == LightType::Directional)?(-1.f):(1.f)));
}

@@ -543,19 +543,22 @@ public:
}
float screen_ratio = max(max(lol::abs(screen_min_max[0].x), lol::abs(screen_min_max[0].y)),
max(lol::abs(screen_min_max[1].x), lol::abs(screen_min_max[1].y)));
float z_dist = length(m_camera->m_position) + max(local_min_max[0].z, local_min_max[1].z);
float z_dist = m_camera->m_target_distance /*length(m_camera->m_position)*/ + max(local_min_max[0].z, local_min_max[1].z);

vec2 screen_offset = vec2(0.f, -(screen_min_max[1].y + screen_min_max[0].y) * .5f);
m_screen_offset = damp(m_screen_offset, screen_offset, .9f, seconds);

float forced_zoom = m_zoom_mesh;

if (cam_factor > 0.f)
{
vec2 new_screen_scale = m_camera->GetScreenScale();
float zoom_in = 1.f + lol::max(0.f, m_zoom_mesh);
float zoom_out = 1.f + lol::max(0.f, -m_zoom_mesh);
m_camera->SetScreenScale(max(vec2(0.001f), ((new_screen_scale * zoom_in) / (screen_ratio * zoom_out * SCREEN_LIMIT))));
vec2 old_sscale = m_camera->GetScreenScale();
float old_ssize = m_camera->GetScreenSize();
float zoom_in = 1.f + lol::max(0.f, forced_zoom);
float zoom_out = 1.f + lol::max(0.f, -forced_zoom);
m_camera->SetScreenScale(max(vec2(0.001f), ((old_sscale * zoom_in) / (screen_ratio * zoom_out * SCREEN_LIMIT))));
m_camera->SetFov(m_fov_mesh);
m_camera->SetScreenInfos(damp(m_camera->GetScreenSize(), max(1.f, screen_ratio * zoom_out), 1.2f, seconds));
m_camera->SetScreenInfos(damp(old_ssize, max(1.f, screen_ratio * zoom_out), 1.2f, seconds));

vec3 posz = ((mat4::rotate(m_rot_mesh.y, vec3::axis_y) * mat4::rotate(-m_rot_mesh.x, vec3::axis_x) * vec4::axis_z)).xyz;
vec3 newpos = posz * damp(length(m_camera->m_position), z_dist * 1.2f, .1f, seconds);
@@ -776,6 +779,67 @@ public:
m_build_time -= seconds;
}

#define NORMAL_USAGE 1
#if 0
PrimitiveFace NewFace;
NewFace.SetNormal(vec3::axis_z);
NewFace.SetCenter(vec3::zero);
int imax = 4, jmax = 4;
int sz = 2;
for (int i = 0; i < imax; ++i)
{
for (int j = 0; j < jmax; ++j)
{
NewFace.AddPolygon(vec3(ivec3(i, j, 0) * sz),
vec3(ivec3(i, j, 0) * sz + ivec3(sz, 0, 0)),
vec3(ivec3(i, j, 0) * sz + ivec3(sz, sz, 0)));
NewFace.AddPolygon(vec3(ivec3(i, j, 0) * sz),
vec3(ivec3(i, j, 0) * sz + ivec3(sz, sz, 0)),
vec3(ivec3(i, j, 0) * sz + ivec3( 0, sz, 0)));
}
}
for (int i = 0; i < NewFace.m_edges.Count(); ++i)
{
Debug::DrawLine(NewFace.EV0(i) + vec3(.0f, .0f, 2.f), NewFace.EV1(i) + vec3(.0f, .0f, 2.f),
NewFace.m_edges[i].m3 ? vec4(.0f, .7f, .0f, 1.f) : vec4(.7f, .0f, .0f, 1.f));
Debug::DrawBox(NewFace.EV0(i) + vec3(.0f, .0f, 2.f) + vec3(-.1f),
NewFace.EV0(i) + vec3(.0f, .0f, 2.f) + vec3(+.1f),
NewFace.m_edges[i].m3 ? vec4(.0f, .7f, .0f, 1.f) : vec4(.7f, .0f, .0f, 1.f));
}
NewFace.CleanEdges();
for (int i = 0; i < NewFace.m_edges.Count(); ++i)
{
Debug::DrawLine(NewFace.EV0(i), NewFace.EV1(i), vec4(vec3::zero, 1.f));
Debug::DrawBox(NewFace.EV0(i) + vec3(-.1f),
NewFace.EV0(i) + vec3(+.1f),
vec4(vec3::zero, 1.f));
}
//Try with mesh
PrimitiveMesh NewMesh;
for (int i = m_meshes.Count() - 1; 0 <= i && i < m_meshes.Count(); i++)
{
for (int j = 0; j < m_meshes[i].m1->m_indices.Count(); j += 3)
{
VertexData v[3] = { m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j ]],
m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j+1]],
m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j+2]] };
NewMesh.AddPolygon(v[0].m_coord, v[1].m_coord, v[2].m_coord, v[0].m_normal);
}
NewMesh.CleanFaces();
break;
}
for (int j = 0; j < NewMesh.m_faces.Count(); ++j)
{
for (int i = 0; i < NewMesh.m_faces[j].m_edges.Count(); ++i)
{
vec3 v0 = NewMesh.m_faces[j].EV0(i) + NewMesh.m_faces[j].GetNormal() * .4f;
vec3 v1 = NewMesh.m_faces[j].EV1(i) + NewMesh.m_faces[j].GetNormal() * .4f;
Debug::DrawLine(v0, v1, vec4(vec3::zero, 1.f));
Debug::DrawBox(v0 + vec3(-.1f), v0 + vec3(+.1f), vec4(vec3::zero, 1.f));
}
}

#elif NORMAL_USAGE
vec3 x = vec3(1.f,0.f,0.f);
vec3 y = vec3(0.f,1.f,0.f);
mat4 save_proj = m_camera->GetProjection();
@@ -855,6 +919,7 @@ public:
}
m_camera->SetProjection(save_proj);
}
#endif //NORMAL_USAGE

#if 0 //Debug normal draw
for (int i = m_meshes.Count() - 1; 0 <= i && i < m_meshes.Count(); i++)


Loading…
取消
儲存