Bagikan melalui


fungsi glBlendFunc

Fungsi glBlendFunc menentukan aritmatika piksel.

Sintaks

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

Parameter

sfactor

Menentukan bagaimana faktor merah, hijau, biru, dan penpaduan sumber alfa dihitung. Sembilan konstanta simbolis diterima: GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, dan GL_SRC_ALPHA_SATURATE.

dfactor

Menentukan bagaimana faktor merah, hijau, biru, dan penpaduan tujuan alfa dihitung. Delapan konstanta simbolis diterima: GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, dan GL_ONE_MINUS_DST_ALPHA.

Nilai kembali

Fungsi ini tidak mengembalikan nilai.

Kode kesalahan

Kode kesalahan berikut dapat diambil oleh fungsi glGetError .

Nama Makna
GL_INVALID_ENUM
Baik sfactor atau dfactor bukan nilai yang diterima.
GL_INVALID_OPERATION
Fungsi ini dipanggil antara panggilan ke glBegin dan panggilan yang sesuai ke glEnd.

Keterangan

Dalam mode RGB, piksel dapat digambar menggunakan fungsi yang memadukan nilai RGBA masuk (sumber) dengan nilai RGBA yang sudah ada di framebuffer (nilai tujuan). Secara default, penpaduan dinonaktifkan. Gunakan glEnable dan glDisable dengan argumen GL_BLEND untuk mengaktifkan dan menonaktifkan blending.

Saat diaktifkan, glBlendFunc mendefinisikan operasi penpaduan. Parameter sfactor menentukan mana dari sembilan metode yang digunakan untuk menskalakan komponen warna sumber. Parameter dfaktor menentukan metode mana dari delapan metode yang digunakan untuk menskalakan komponen warna tujuan. Sebelas metode yang mungkin dijelaskan dalam tabel berikut. Setiap metode mendefinisikan empat faktor skala masing-masing untuk merah, hijau, biru, dan alfa.

Dalam tabel dan dalam persamaan berikutnya, komponen warna sumber dan tujuan disebut sebagai (R? , G? , B? , A? ) dan (Rd , Gd , Bd , Ad ). Mereka dipahami memiliki nilai bilangan bulat antara nol dan (kR , kG , kR , k kA ), di mana

kR = 2mR - 1

kG = 2mG - 1

kB = 2mB - 1

kA = 2mA - 1

dan (mR , mG , mB , mA ) adalah jumlah bitplanes merah, hijau, biru, dan alfa.

Faktor skala sumber dan tujuan disebut sebagai (sR , sG , sB , sA ) dan (dR , dG , dB , dA ). Faktor skala yang dijelaskan dalam tabel, ditandai (fR , fG , fB , fA ), mewakili faktor sumber atau tujuan. Semua faktor skala memiliki rentang [0,1].

Parameter (fR , fG , fB , fA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R? / kR , G? / kG , B? / kB , A? / kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R? / kR , G? / kG , B? / kB , A? / kA )
GL_DST_COLOR (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (Rd / kR , Gd / kG , Bd / kB , Ad / kA )
GL_SRC_ALPHA (A? / kA , A? / kA , A? / kA , A? / kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A? / kA , A? / kA , A? / kA , A? / kA )
GL_DST_ALPHA (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_ONE_MINUS_DST_ALPHA (1,1,1,1) - (Ad / kA , Ad / kA , Ad / kA , Ad / kA )
GL_SRC_ALPHA_SATURATE (i,i,i, 1)

Dalam tabel,

i = min (A? , kA - d ) / kA

Untuk menentukan nilai RGBA campuran piksel saat menggambar dalam mode RGBA, sistem menggunakan persamaan berikut:

R (d) = min( kR , R? sR + RddR )

G (d) = min( kG, G? sG G + ddG )

B (d) = min( kB, B? sB B + ddB )

A (d) = min( kA , A? sA + AddA )

Terlepas dari presisi yang jelas dari persamaan di atas, memadukan aritmatika tidak tepat ditentukan, karena pencamburan beroperasi dengan nilai warna bilangan bulat yang tidak tepat. Namun, faktor campuran yang harus sama dengan satu dijamin tidak memodifikasi multiplicand, dan faktor campuran yang sama dengan nol mengurangi multiplikasinya menjadi nol. Jadi, misalnya, ketika sfactor GL_SRC_ALPHA, dfactor GL_ONE_MINUS_SRC_ALPHA, dan A? sama dengan kA, persamaan berkurang menjadi penggantian sederhana:

Rd = R?

Gd = G?

Bd = B?

Ad = A?

Contoh

Transparansi paling baik diimplementasikan menggunakan glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) dengan primitif yang diurutkan dari terjauh ke terdekat. Perhatikan bahwa perhitungan transparansi ini tidak memerlukan keberadaan bitplanes alfa dalam framebuffer.

Anda juga dapat menggunakan glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) untuk merender titik dan garis antialias dalam urutan arbitrer.

Untuk mengoptimalkan antialias poligon, gunakan glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE) dengan poligon yang diurutkan dari terdekat ke terjauh. (Lihat argumen GL_POLYGON_SMOOTH di glEnable untuk informasi tentang antialias poligon.) Bitplane alfa tujuan, yang harus ada agar fungsi campuran ini beroperasi dengan benar, menyimpan cakupan akumulasi.

Alfa masuk (sumber) adalah opasitas material, mulai dari 1,0 (KA ), mewakili opasitas lengkap, hingga 0,0 (0), mewakili transparansi lengkap.

Saat Anda mengaktifkan lebih dari satu buffer warna untuk menggambar, setiap buffer yang diaktifkan dipadukan secara terpisah, dan konten buffer digunakan untuk warna tujuan. (Lihat glDrawBuffer.)

Pencambahan hanya memengaruhi penyajian RGBA. Ini diabaikan oleh perender indeks warna.

Fungsi berikut mengambil informasi yang terkait dengan glBlendFunc:

glGet dengan argumen GL_BLEND_SRC

glGet dengan argumen GL_BLEND_DST

glIsEnabled dengan argumen GL_BLEND

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Gl.h
Pustaka
Opengl32.lib
DLL
Opengl32.dll

Lihat juga

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc