opengl


    2. 9cu sinifdə oxuyarkən (15 yaşım filan olardı) həndəsə kitabımızda proyeksiyalama deyə mövzu var idi, parallel, orthogonal, perspective kimi proyeksiyalama növlərindən bəhs edirdi. qəbul imtahanına o tipli suallar deyəsən düşmürdü deyə nə uşaqlar öyrənirdi nə də müəllim öyrədirdi. hamı bal xətrinə əzbərləyirdi düsturları. mən də həmin vaxtları təzə-təzə opengl, direct3d kimi api'lər və c ilə oyun yazmağa başlamışdım. və həndəsə kitabında gördüyüm həmin proyeksiyalama düsturlarını opengl və c 'da tətbiq edərək necə fantastik qrafiklərin render edilə biləcəyinə şahid olurdum. deməli söhbət nədən ibarətdir. bildiyiniz kimi monitor/telefon ekranları 2 ölçülü müstəvidir. pixellərin sadəcə x və y koordinatları olur. məsələn (0, 0) koordinatlı pixel ekranın sol üst küncündəki ilk pixeldir. 3 ölçülü həndəsi fiqurların koordinatlarının isə 3 komponenti olur (x, y, z). gördüyünüz kimi 3 ölçülü fiquru 2 ölçülü müstəvidə çəkmək mümkün deyildir. 3 komponentdən birini ixtisar etmək lazımdır. baz bu ixtisara proyeksiya deyilir. siz 3 ölçülü fiqurun koordinatlarını 2 ölçülü müstəviyə köçürürsünüz.

    proyeksiyalamanın 2 əsas növü mövcuddur: orthogonal və perspective.

    orthogonal proyeksiyada birbaşa 3 komponentdən biri atılır və geriyə qalan 2 komponenet istifadə olunur. məs:

    (x, y, z) => (x, y)

    bu tip proyeksiyalamada z komponenti bir əhəmiyyət kəsb etmir nəticəyə. fərqi yoxdu cisim uzaqdadır ya yox ekranda eyni ölçüdə görünəcək.

    bir digər proyeksiya növü isə perspective proyeksiyalamadır. insan gözünün kürə şəkildə olması insana təbii olaraq perspective proyeksiyalama xüsusiyyəti vermişdir. bu proyeksiyalama növündə uzaqdakı cisimlər yaxındakılara nəzərən daha kiçik görünür və bu cür hesablanır:

    (x, y, z) => (x/z, y/z)
    gördüyünüz kimi x və y komponentləri z'ə bölünür, əgər z böyükdürsə (yəni cisim uzaqdadırsa) ekranda daha kiçik görsənir.

    opengl və direct3d kimi qrafik kitabxanalarında bunun kimi faydalı alqoritmlər mövcuddur. proyeksiyalama opengl/direct3d pipeline'ın sadəcə ilk mərhələlərindən biridir. bundan əlavə rasterization kimi daha mürəkkəb mərhələlərdə mövcuddur






hamısını göstər