Skip to content

Commit

Permalink
Update Hexasphere & Usage. (#965)
Browse files Browse the repository at this point in the history
  • Loading branch information
OptimisticPeach authored Dec 1, 2020
1 parent 6b004f7 commit 3da653e
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 9 deletions.
2 changes: 1 addition & 1 deletion crates/bevy_render/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ downcast-rs = "1.2.0"
thiserror = "1.0"
anyhow = "1.0"
hex = "0.4.2"
hexasphere = "2.0.0"
hexasphere = "2.1.0"
parking_lot = "0.11.0"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
Expand Down
18 changes: 10 additions & 8 deletions crates/bevy_render/src/mesh/shape.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::{Indices, Mesh};
use crate::pipeline::PrimitiveTopology;
use bevy_math::*;
use hexasphere::Hexasphere;
use hexasphere::shapes::IcoSphere;

pub struct Cube {
pub size: f32,
Expand Down Expand Up @@ -273,15 +273,17 @@ impl Default for Icosphere {
impl From<Icosphere> for Mesh {
fn from(sphere: Icosphere) -> Self {
if sphere.subdivisions >= 80 {
let temp_sphere = Hexasphere::new(sphere.subdivisions, |_| ());
// https://oeis.org/A005901
let subdivisions = sphere.subdivisions + 1;
let number_of_resulting_points = (subdivisions * subdivisions * 10) + 2;

panic!(
"Cannot create an icosphere of {} subdivisions due to there being too many vertices being generated: {} (Limited to 65535 vertices or 79 subdivisions)",
sphere.subdivisions,
temp_sphere.raw_points().len()
number_of_resulting_points
);
}
let hexasphere = Hexasphere::new(sphere.subdivisions, |point| {
let generated = IcoSphere::new(sphere.subdivisions, |point| {
let inclination = point.z.acos();
let azumith = point.y.atan2(point.x);

Expand All @@ -291,7 +293,7 @@ impl From<Icosphere> for Mesh {
[norm_inclination, norm_azumith]
});

let raw_points = hexasphere.raw_points();
let raw_points = generated.raw_points();

let points = raw_points
.iter()
Expand All @@ -304,12 +306,12 @@ impl From<Icosphere> for Mesh {
.map(Into::into)
.collect::<Vec<[f32; 3]>>();

let uvs = hexasphere.raw_data().to_owned();
let uvs = generated.raw_data().to_owned();

let mut indices = Vec::with_capacity(hexasphere.indices_per_main_triangle() * 20);
let mut indices = Vec::with_capacity(generated.indices_per_main_triangle() * 20);

for i in 0..20 {
hexasphere.get_indices(i, &mut indices);
generated.get_indices(i, &mut indices);
}

let indices = Indices::U32(indices);
Expand Down

0 comments on commit 3da653e

Please sign in to comment.