16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 12:49:18 +02:00

use glm::length2 instead of glm::dot for squared length

This commit is contained in:
docentYT
2026-04-27 23:13:12 +02:00
parent d5d1825e38
commit 7d561f8443
4 changed files with 10 additions and 12 deletions

View File

@@ -583,7 +583,7 @@ void NvRenderer::RenderBatches(const RenderPass& pass) {
glm::clamp(pass.m_origin, batch.m_origin - batch.m_extent, glm::clamp(pass.m_origin, batch.m_origin - batch.m_extent,
batch.m_origin + batch.m_extent) - batch.m_origin + batch.m_extent) -
pass.m_origin; pass.m_origin;
if (glm::dot(closest_point, closest_point) >= batch.m_sqr_distance_max) if (glm::length2(closest_point) >= batch.m_sqr_distance_max)
return; return;
if (batch.m_transforms.size() > 0) { if (batch.m_transforms.size() > 0) {
double min_dist = std::numeric_limits<double>::max(); double min_dist = std::numeric_limits<double>::max();
@@ -594,9 +594,9 @@ void NvRenderer::RenderBatches(const RenderPass& pass) {
batch.m_instance_radius)) batch.m_instance_radius))
continue; continue;
glm::dvec3 offset = instance_transform[3].xyz - pass.m_origin; glm::dvec3 offset = instance_transform[3].xyz - pass.m_origin;
double dist = glm::dot(offset, offset); double dist2 = glm::length2(offset);
min_dist = glm::min(min_dist, dist); min_dist = glm::min(min_dist, dist2);
max_dist = glm::max(max_dist, dist); max_dist = glm::max(max_dist, dist2);
} }
if (min_dist > max_dist) return; if (min_dist > max_dist) return;
if (min_dist >= batch.m_sqr_distance_max || if (min_dist >= batch.m_sqr_distance_max ||

View File

@@ -96,14 +96,14 @@ void TAnimContainer::UpdateModel() {
if (fTranslateSpeed != 0.0) if (fTranslateSpeed != 0.0)
{ {
auto dif = vTranslateTo - vTranslation; // wektor w kierunku docelowym auto dif = vTranslateTo - vTranslation; // wektor w kierunku docelowym
double l2 = glm::dot(dif, dif); // długość wektora potrzebnego przemieszczenia double l2 = glm::length2(dif); // długość wektora potrzebnego przemieszczenia
if (l2 >= 0.0001) if (l2 >= 0.0001)
{ // jeśli do przemieszczenia jest ponad 1cm { // jeśli do przemieszczenia jest ponad 1cm
auto s = glm::normalize(dif); // jednostkowy wektor kierunku // Długość wektora nie jest równa 0, sprawdzane wcześniej więc wektor normalny będzie zawsze prawidłowy. auto s = glm::normalize(dif); // jednostkowy wektor kierunku // Długość wektora nie jest równa 0, sprawdzane wcześniej więc wektor normalny będzie zawsze prawidłowy.
s = s * s = s *
(fTranslateSpeed * (fTranslateSpeed *
Timer::GetDeltaTime()); // przemieszczenie w podanym czasie z daną prędkością Timer::GetDeltaTime()); // przemieszczenie w podanym czasie z daną prędkością
if (glm::dot(s, s) < l2) //żeby nie jechało na drugą stronę if (glm::length2(s) < l2) //żeby nie jechało na drugą stronę
vTranslation += s; vTranslation += s;
else else
vTranslation = vTranslateTo; // koniec animacji, "koniec animowania" uruchomi vTranslation = vTranslateTo; // koniec animacji, "koniec animowania" uruchomi
@@ -113,7 +113,7 @@ void TAnimContainer::UpdateModel() {
{ // koniec animowania { // koniec animowania
vTranslation = vTranslateTo; vTranslation = vTranslateTo;
fTranslateSpeed = 0.0; // wyłączenie przeliczania wektora fTranslateSpeed = 0.0; // wyłączenie przeliczania wektora
if (glm::dot(vTranslation, vTranslation) <= 0.0001) // jeśli jest w punkcie początkowym if (glm::length2(vTranslation) <= 0.0001) // jeśli jest w punkcie początkowym
iAnim &= ~2; // wyłączyć zmianę pozycji submodelu iAnim &= ~2; // wyłączyć zmianę pozycji submodelu
if( evDone ) { if( evDone ) {
// wykonanie eventu informującego o zakończeniu // wykonanie eventu informującego o zakończeniu

View File

@@ -59,14 +59,12 @@ double GetDistanceToEvent(TTrack const *track, basic_event const *event, double
double seg_len = scan_dir > 0 ? 0.0 : 1.0; double seg_len = scan_dir > 0 ? 0.0 : 1.0;
double const dzielnik = 1.0 / segment->GetLength();// rozdzielczosc mniej wiecej 1m double const dzielnik = 1.0 / segment->GetLength();// rozdzielczosc mniej wiecej 1m
int krok = 0; // krok obliczeniowy do sprawdzania czy odwracamy int krok = 0; // krok obliczeniowy do sprawdzania czy odwracamy
auto temp = pos_event - segment->FastGetPoint(seg_len); len2 = glm::length2(pos_event - segment->FastGetPoint(seg_len));
len2 = glm::dot(temp, temp);
do do
{ {
len1 = len2; len1 = len2;
seg_len += scan_dir > 0 ? dzielnik : -dzielnik; seg_len += scan_dir > 0 ? dzielnik : -dzielnik;
temp = pos_event - segment->FastGetPoint(seg_len); len2 = glm::length2(pos_event - segment->FastGetPoint(seg_len));
len2 = glm::dot(temp, temp);
++krok; ++krok;
} while ((len1 > len2) && (seg_len >= dzielnik && (seg_len <= (1.0 - dzielnik)))); } while ((len1 > len2) && (seg_len >= dzielnik && (seg_len <= (1.0 - dzielnik))));
//trzeba sprawdzić czy seg_len nie osiągnął skrajnych wartości, bo wtedy //trzeba sprawdzić czy seg_len nie osiągnął skrajnych wartości, bo wtedy

View File

@@ -770,7 +770,7 @@ void TTrack::Load(cParser *parser, glm::dvec3 const &pOrigin)
{ // Ra 2014-07: dla skrzyżowań będą dodatkowe segmenty { // Ra 2014-07: dla skrzyżowań będą dodatkowe segmenty
SwitchExtension->Segments[2]->Init(p2, cp2 + p2, cp4 + p4, p4, segsize, r2, r4); // z punktu 2 do 4 SwitchExtension->Segments[2]->Init(p2, cp2 + p2, cp4 + p4, p4, segsize, r2, r4); // z punktu 2 do 4
auto p1p3 = p3 - p1; auto p1p3 = p3 - p1;
if (glm::dot(p1p3, p1p3) < 0.01) // gdy mniej niż 10cm, to mamy skrzyżowanie trzech dróg if (glm::length2(p1p3) < 0.01) // gdy mniej niż 10cm, to mamy skrzyżowanie trzech dróg
SwitchExtension->iRoads = 3; SwitchExtension->iRoads = 3;
else // dla 4 dróg będą dodatkowe 3 segmenty else // dla 4 dróg będą dodatkowe 3 segmenty
{ {