topology: Topology::Triangles,
polygon_mode: PolygonMode::Fill,
culling_mode: CullingMode::Back,
- front_face: FrontFace::Clockwise,
+ front_face: FrontFace::CounterClockwise,
depth_bias: None,
depth_compare_op: CompareOp::GreaterOrEqual,
depth_test_enable: true,
let mut depth_height = 0;
let mut depth_image = default();
- let shark_distance = 8.0;
+ let shark_distance = 4.0;
let mut rng = Pcg64::new();
for (i, transform) in shark_transforms.iter_mut().enumerate() {
let direction = if i & 1 == 0 { 1.0 } else { -1.0 };
let (s, _) = sin_cos_pi_f32(frame_start + (i as f32) * 0.125);
- transform.translate.y = 0.0 + s;
+ transform.translate.y = s;
transform.matrix *= Mat3::from_axis_rotation(Vec3::Y, HalfTurn::new(0.005 * direction))
}
transforms.write_slice(&shark_transforms);
- let (s, c) = sin_cos_pi_f32(frame_start);
- let camera_height = c * 5.0;
- let camera_radius = 50.0;
+ let (s, c) = sin_cos_pi_f32(frame_start * 0.2);
+ let camera_height = c * 8.0;
+ let camera_radius = 20.0;
let eye = Point3::new(s * camera_radius, camera_height, c * camera_radius);
let center = Point3::ZERO;
- let camera_from_model = Mat4::look_at(eye, center, -Vec3::Y);
+ let camera_from_model = Mat4::look_at(eye, center, Vec3::Y);
let clip_from_camera =
Mat4::perspective_rev_inf_zo(Deg::new(45.0).into(), width as f32 / height as f32, 0.01);
let clip_from_model = clip_from_camera * camera_from_model;
TransformData td = transforms[gl_InstanceIndex];
VertexData vd = vertices[gl_VertexIndex];
- vec4 posLocal = vec4(vd.position.xyz, 1.0);
- vec3 posWorld = mat4x3(td.transform[0], td.transform[1], td.transform[2]) * posLocal;
- vec4 posClip = vec4(posWorld, 1.0) * viewProj;
+ mat3 modelRot = mat3(
+ td.transform[0].x, td.transform[0].y, td.transform[0].z,
+ td.transform[0].w, td.transform[1].x, td.transform[1].y,
+ td.transform[1].z, td.transform[1].w, td.transform[2].x
+ );
+ vec3 modelOff = vec3(td.transform[2].y, td.transform[2].z, td.transform[2].w);
+ vec3 posWorld = transpose(modelRot) * vd.position.xyz + modelOff;
+ vec4 posClip = transpose(viewProj) * vec4(posWorld, 1.0);
gl_Position = posClip;
fragColor = vd.normal.xyz * 0.5 + 0.5;