javascript - Pretvori vrijednost polja pogleda u CSS3D vrijednost perspektive
Ako bih želio imati kameru s poljem vidnog kuta od 60°, kako tada izračunati CSS3D vrijednost perspektive?
perspective: ?;
perspective-origin: center center;
Pronašao sam opis o tome kako izračunati projekcijsku matricu na temelju vrijednosti perspektive, ali još je uvijek zapravo ne razumijem: http://www.w3.org/TR/css-transforms-1/#perspective-matrix-computation
Dakle, ako imam zadani vidni kut i znam offsetWidth/offsetHeight elementa, kako bih trebao izračunati potrebnu vrijednost perspektive?
A gdje su bliža ravnina i dalja ravnina?
Odgovor #1
Prije nekoliko godina postavio sam slično pitanje i dobio odgovor u nastavku. Povezani članak se od tada promijenio, pa navodim tekst jer više ne postoji u članku (ali možda i dalje postoji druga korisna informacija).
Ako čitam ispravno, imate piramidu s bazom udaljenom [perspective px] od promatrača. Dakle, ako želite 60° polje gledanja, imate trokut od 30° od središta do kutova i trebate pronaći duljinu susjedne stranice:
Math.pow( w/2*w/2 + h/2*h/2, 0.5 ) / Math.tan( 30 * Math.PI / 180 )
Mislim ;) Daje perspektivu od 968 za 1000x500 pogled, što se čini otprilike točno nakon što sam nasumično eksperimentirao s -webkit-perspective prilično dosta
Radna verzija modula CSS 3D Transformacije daje sljedeće objašnjenje:
perspektiva(<broj>)
specificira matricu projekcije perspektive. Ova matrica preslikava kocku gledanja na piramidu čija je baza beskonačno daleko od promatrača, a vrh predstavlja položaj promatrača. Pogledno područje je regija ograničena s četiri ruba prikaznog prozora (dio prozora preglednika korišten za rendanje web stranice između položaja promatrača i točke na udaljenosti beskonačnosti od promatrača). Dubina, dana kao parametar funkciji, predstavlja udaljenost ravnine z=0 od promatrača. Niže vrijednosti daju ravniju piramidu i stoga izraženiji efekt perspektive. Vrijednost se daje u pikselima, pa vrijednost od 1000 daje umjerenu količinu skraćenja, a vrijednost od 200 daje ekstremnu količinu. Matrica se računa tako da se počne s identitetnom matricom i zamijeni vrijednost u 3. retku, 4. stupcu s vrijednošću -1/dubina. Vrijednost za dubinu mora biti veća od nule, inače funkcija nije valjana.
