.[ ČeskéHry.cz ].
pomoc s programem na animaci tachometru a otackometru
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
upir



Založen: 30. 07. 2007
Příspěvky: 31

PříspěvekZaslal: 4. duben 2010, 21:50:58    Předmět: Odpovědět s citátem

Díky za odpověď, tu interpolaci celkem chápu, jde mi spíš o to uložení dat.

Jak už jsem psal, animace má ve výsledku třeba 3000 framů, a já mám třeba 100 hodnot v různých pozicích pro otáčkoměr (pro rychlost je to ještě méně a pro zařazený rychlostní stupeň třeba jen 10) - přijde mi tím pádem zbytečné mít pole o velikosti 3000 prvků, když tam mám uloženo jenom 100 hodnot.

Doteď mi to celkem vyhovovalo, protože jsem na začátku ty zbylé hodnoty dopočítal, dovyplnil všechny položky pole a pak za běhu už jenom četl ty hodnoty z paměti. Teď ale když budu chtít hodnotu v bodě 34.25, tak to stejně budu muset vypočítat, tak jako tak, protože v tomhle bodě ta hodnota stejně uložená v paměti nebude.

Jde jen o to, že mě opravdu nenapadá, jak to nějak úhledně a pěkně řešit - a na netu jsem taky zatím nic nenašel, přestože si myslím, že programovat takové ukládání animace v keyframes muselo už aspoň milion lidí...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 6. duben 2010, 09:02:20    Předmět: Odpovědět s citátem

Dobře, máš teda animaci délky "3000", ale keyframů máš 100, takže asi takhle:

kód:
// frame X z 3000
float t = ((float) X / 3000.0f); //na 0..1
int frameX = round(t * 99); // na 0..99


Tohle ale funguje jen když máš ty keyframy v čase vzdálený stejně daleko od sebe. Pokud ne, tak bys mohl třeba začít přehrávat animaci - tzn. k času přičítat deltu času a pokud by čas přelezl časovou pozici dalšího keyframu, tak počítat s tímto keyframem a s o jedno dalším (K a K+1).

Pak by ta interpolace byla asi takováhle:

kód:
// pseudo kod
t = (time - time_of(K)) / (time_of(K+1) - time_of(K))
value = value_of(K) + (value_of(K+1) - value_of(K)) * t

_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna