eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › half sky dome + podstawa
Ilość wypowiedzi w tym wątku: 2

  • 1. Data: 2014-11-25 13:58:56
    Temat: half sky dome + podstawa
    Od: firr <p...@g...com>

    jezeli obracam kamere w pustej przestrzeni 3d to kazddemu pikselowi na ekranie
    odpowiada pewien unormalizowany wektor kierunku w 3D (dir.x, dir.y, dir.z)

    ten wektor mam w programie dostepny w petli dla kazdego piksela ekranu i moge np
    przeksztalcic go analitycznym wzorkiem na jakis kolor(dir) wtedy dostje w efekcie
    pomalowana kopule (sfere)

    zrobilem proste mapowanie dir na x,y z look upem w bitmapie (konkretnie

    if(dir.z>0)
    {
    x = dir.x
    y = dir.y
    color_piksela = bitmapa[x][y]
    }
    else
    color_piksela = szary



    i to przeksztalca bitmape na polkule, w zenicie (tj dla dir.x, i dir.y rownych zero a
    dla dir.z = +1) ta bitmapa jest nawet niezbyt nieksztalcona, silnie odksztalca sie w
    okolicach czterech biegunów,

    wschod (x=1.0, y=0.0)
    zachod (x=-1., y=0.)
    polnoc (x=0., y=1.)
    poludnie (x=0., y=-1.)

    przydaloby mi moze jakies mapowanie ktore mniej znieksztalca, ale na razie mam tez
    inny problem

    chcialbym dolna czesc polkuli (dj wszystkie piksele dla dir.z<0) zmapowac nie na
    polsfere
    ale na plaskie koło, tez moze byc z look upem
    w bitmapie, tak by miec na gorze oteksturpwaną
    kopule a na dole oteksturowany plaski teren

    jak powinno wygladac takie rzutowanie?

    (fir)


  • 2. Data: 2014-11-29 12:01:29
    Temat: Re: half sky dome + podstawa
    Od: firr <p...@g...com>

    zrobilem cos takiego

    inline unsigned CalcPixelForPlate_(float3 dir, float px, float py, float h)
    {
    unsigned color;


    float fhx, fhy;

    // if(dir.z==0)

    if(dir.z>-0.0001 && dir.z<0.0001)
    {

    fhx = 512.+ px;
    fhy = 512.+ py;
    }
    else
    {
    float inv_dir_z = 1./dir.z;
    fhx = 512. + px + (h*dir.x*inv_dir_z);
    fhy = 512. + py + (h*dir.y*inv_dir_z);

    }

    int xc = ((int)(fhx))&1023;
    int yc = ((int)(fhy))&1023;


    color= working_buffer[yc*working_buffer_size_x + xc];


    return color;


    }

    gdzie px,py,ph jest przeskalowana (na slepo) pozycja kamery

    ten poczatek chyba mozna by poprawic ale nie wiem jak

    w sumie moglbym zrobic na tym prosty symulator lotu ale jeszcze nie wiem jak

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: