|
567 | 567 | <a href="#566" id="566">566</a> |
568 | 568 | <a href="#567" id="567">567</a> |
569 | 569 | <a href="#568" id="568">568</a> |
570 | | -<a href="#569" id="569">569</a></pre></div><pre class="rust"><code><span class="kw">use </span>bytemuck::{Pod, Zeroable}; |
| 570 | +<a href="#569" id="569">569</a> |
| 571 | +<a href="#570" id="570">570</a> |
| 572 | +<a href="#571" id="571">571</a></pre></div><pre class="rust"><code><span class="kw">use </span>bytemuck::{Pod, Zeroable}; |
571 | 573 | <span class="kw">use </span>glam::{Mat4, Quat, Vec3}; |
572 | 574 | <span class="kw">use </span>std::f32::consts::PI; |
573 | 575 | <span class="kw">use </span>std::ops::IndexMut; |
|
670 | 672 | <span class="kw">let </span>start_vertex_index = scene.vertices.len(); |
671 | 673 | <span class="kw">let </span>start_geometry_index = scene.geometries.len(); |
672 | 674 |
|
673 | | - <span class="kw">let </span><span class="kw-2">mut </span>mapping = std::collections::HashMap::<(usize, usize, usize), usize>::new(); |
| 675 | + <span class="kw">let </span><span class="kw-2">mut </span>mapping = std::collections::HashMap::<(usize, <span class="prelude-ty">Option</span><usize>, usize), usize>::new(); |
674 | 676 |
|
675 | 677 | <span class="kw">let </span><span class="kw-2">mut </span>next_index = <span class="number">0</span>; |
676 | 678 |
|
|
681 | 683 | <span class="kw">for </span>end_index <span class="kw">in </span><span class="number">2</span>..poly.<span class="number">0</span>.len() { |
682 | 684 | <span class="kw">for </span><span class="kw-2">&</span>index <span class="kw">in </span><span class="kw-2">&</span>[<span class="number">0</span>, end_index - <span class="number">1</span>, end_index] { |
683 | 685 | <span class="kw">let </span>obj::IndexTuple(position_id, texture_id, normal_id) = poly.<span class="number">0</span>[index]; |
684 | | - <span class="kw">let </span>texture_id = texture_id.expect(<span class="string">"uvs required"</span>); |
| 686 | + <span class="kw">let </span>uv = texture_id |
| 687 | + .map(|texture_id| data.texture[texture_id]) |
| 688 | + .unwrap_or_default(); |
685 | 689 | <span class="kw">let </span>normal_id = normal_id.expect(<span class="string">"normals required"</span>); |
686 | 690 |
|
687 | 691 | <span class="kw">let </span>index = <span class="kw-2">*</span>mapping |
|
692 | 696 |
|
693 | 697 | scene.vertices.push(Vertex { |
694 | 698 | pos: data.position[position_id], |
695 | | - uv: data.texture[texture_id], |
| 699 | + uv, |
696 | 700 | normal: data.normal[normal_id], |
697 | 701 | ..Default::default() |
698 | 702 | }) |
|
865 | 869 | <span class="kw">fn </span>load_scene(device: <span class="kw-2">&</span>wgpu::Device, queue: <span class="kw-2">&</span>wgpu::Queue) -> SceneComponents { |
866 | 870 | <span class="kw">let </span><span class="kw-2">mut </span>scene = RawSceneComponents::default(); |
867 | 871 |
|
868 | | - load_model(<span class="kw-2">&mut </span>scene, <span class="string">"/skybox/models/teslacyberv3.0.obj"</span>); |
| 872 | + load_model(<span class="kw-2">&mut </span>scene, <span class="string">"/skybox/models/rustacean-3d.obj"</span>); |
869 | 873 | load_model(<span class="kw-2">&mut </span>scene, <span class="string">"/ray_scene/cube.obj"</span>); |
870 | 874 |
|
871 | 875 | upload_scene_components(device, queue, <span class="kw-2">&</span>scene) |
|
0 commit comments