|
| Bump map Fra : Christian R. Larsen |
Dato : 03-12-01 13:14 |
|
For et par år siden forsøgte jeg at programmere en såkaldt bump-map rutine,
men den kom aldrig til at virke ordentligt. Her er en beskrivelse af det,
jeg gjorde, så måske nogen har andre og bedre bud.
Jeg starter med at generere et tilfældigt højdekort, hvor hver pixel har en
værdi mellem 0 og 255. Kortet opfylder en række regler. Eksempelvis kan
højdeforskellen mellem to nabopixels ikke overskride 8.
Højdekortets størrelse er præcis 64 kb, dvs. 256*256 pixels. Fordelen ved
det er, at når man vil referere til en given pixel, har man Y-koordinatet
som hi-byte og X-koordinatet som lo-byte i et Word. Det gør adresseringen
hurtig og nem.
Hvis man tager fire nabopixels, har man et plan:
(Y0,X0,H1)----- (Y0,X1,H2)
| |
| |
| |
| |
(Y1,X0,H3)----- (Y1,X1,H4)
(Jeg bruger H for Højde som Z-koordinat)
For dette plan gælder som bekendt, at det har en normalvektor.
Jeg placerer nu en lyskilde i en vilkårlig højde og på en vilkårlig
position over mit kort. Lyskilden har endvidere en styrke, S.
Jeg danner nu endnu en vektor mellem min lyskilde (YL,XL,ZL) og det første
koordinat i planet, (Y0,X0,H1).
Vinklen mellem denne vektor og planets normalvektor må nu udgøre _den ene
faktor_ i planets evne til at reflektere lys. Hvis vinklen er tæt på 90
gr., reflekteres intet lys. Er den 0 gr., reflekteres alt lys. _Den anden
faktor_ er lysstyrken.
Jeg kan nu tegne et kort, hvor jeg for hvert koordinatsæt i mit bumpmap
tegner en pixel, hcis farve (lysstyrke om man vil) er ligmed
[Vinklen mellem planets normalvektor og vektoren mellem lyskilden og
planets første punkt] * S.
Kan nogen forklare mig, hvorfor dette ikke virkede, og er der nogen, der
har en bedre idé til et bump map?
| |
Henning Makholm (03-12-2001)
| Kommentar Fra : Henning Makholm |
Dato : 03-12-01 13:26 |
|
Scripsit "Christian R. Larsen" <crlarsen@hotmail.com>
> Hvis man tager fire nabopixels, har man et plan:
> (Y0,X0,H1)----- (Y0,X1,H2)
> | |
> | |
> | |
> | |
> (Y1,X0,H3)----- (Y1,X1,H4)
Kun hvis man er heldig. Tre vilkårlige af punkterne vil tilsammen
definere en plan entydigt, og du kan i almindelighed ikke gå ud fra at
den plan går gennem det fjerde punkt.
--
Henning Makholm "First chapter, the plot advances,
second chapter, Ayla makes a discovery that
significantly enhances Palaeolithic technology, third
chapter, Ayla has sex with someone, and repeat ad infinitum."
| |
Christian R. Larsen (03-12-2001)
| Kommentar Fra : Christian R. Larsen |
Dato : 03-12-01 15:12 |
|
Henning Makholm <henning@makholm.net> skrev i artiklen
<yahwv04jxqz.fsf@var.diku.dk>...
> Kun hvis man er heldig. Tre vilkårlige af punkterne vil tilsammen
> definere en plan entydigt, og du kan i almindelighed ikke gå ud fra at
> den plan går gennem det fjerde punkt.
Det er naturligvis en væsentlig pointe. Så faktisk bør man lave to planer
for hver gang, man har 4 punkter.
| |
Bertel Lund Hansen (03-12-2001)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 03-12-01 16:56 |
|
Christian R. Larsen skrev:
>Det er naturligvis en væsentlig pointe. Så faktisk bør man lave to planer
>for hver gang, man har 4 punkter.
(Jeg har ikke nærlæst dine indlæg)
Kan du ikke opere med trekanter som grundelementer så du aldrig
får problemer med 4 punkter?
--
Bertel
http://lundhansen.dk/bertel/ FIDUSO: http://fiduso.dk/
| |
Christian R. Larsen (03-12-2001)
| Kommentar Fra : Christian R. Larsen |
Dato : 03-12-01 17:14 |
|
"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
news:u28n0u027ajpi42834i8kfcl4hnq7spcoi@sunsite.auc.dk...
> Christian R. Larsen skrev:
>
> >Det er naturligvis en væsentlig pointe. Så faktisk bør man lave to planer
> >for hver gang, man har 4 punkter.
>
> (Jeg har ikke nærlæst dine indlæg)
>
> Kan du ikke opere med trekanter som grundelementer så du aldrig
> får problemer med 4 punkter?
Jo, i princippet vil der ikke være noget problem ved det, ud over at jeg så
får to pixels at tegne for hver fire punkter. Men det kan jeg jo evt.
udligne med et gennemsnit af de to.
| |
Mathness (03-12-2001)
| Kommentar Fra : Mathness |
Dato : 03-12-01 18:37 |
|
In article <kxNO7.1431$z4.215145@news000.worldonline.dk>, "Christian R.
Larsen" <crlarsen@hotmail.com> wrote:
> "Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
> news:u28n0u027ajpi42834i8kfcl4hnq7spcoi@sunsite.auc.dk...
>> Christian R. Larsen skrev:
>>
>> >Det er naturligvis en væsentlig pointe. Så faktisk bør man lave to
>> >planer for hver gang, man har 4 punkter.
>>
>> (Jeg har ikke nærlæst dine indlæg)
>>
>> Kan du ikke opere med trekanter som grundelementer så du aldrig får
>> problemer med 4 punkter?
>
> Jo, i princippet vil der ikke være noget problem ved det, ud over at jeg
> så får to pixels at tegne for hver fire punkter. Men det kan jeg jo evt.
> udligne med et gennemsnit af de to.
Mja, bliver hellere ikke helt godt, efter min min mening...
Lav istedet en ekstra række data i x og y retning. Og kun beregn et punkt
udfra tre datapunkter. Du for så stadig et bump map der er lige så stort
som det, uden ekstra data'erne.
For et mere kontiunert billede kan du benytte dig af 5 data punkter. Et
center punkt i forhold til "før" data (x0-1,y0-1) og "efter" data
(x0+1,y0+1), og dermed bruge normalen fra disse to trekanter's normal.
Alt dette kræver self. et ekstra sæt x og y data igen, Så du ender med
64K+1K.
--
.~. Thomas Klietsch m a t h n e s s @ z 4 2 . d k
/V\
// \\ To bend the spoon, you have to first realize there is no spoon.
/( )\ It's a butterknife you idiot!
^`~'^
| |
|
|