Bagikan melalui


Fungsi gluTessCallback

Fungsi gluTessCallback mendefinisikan panggilan balik untuk objek tessellation.

Sintaks

void WINAPI gluTessCallback(
   GLUtesselator *tess,
   GLenum        which,
   void (CALLBACK *fn)()
);

Parameter

Tess

Objek tessellation (dibuat dengan gluNewTess).

Yang

Panggilan balik sedang didefinisikan. Nilai berikut ini valid: GLU_TESS_BEGIN, GLU_TESS_BEGIN_DATA, GLU_TESS_EDGE_FLAG, GLU_TESS_EDGE_FLAG_DATA, GLU_TESS_VERTEX, GLU_TESS_VERTEX_DATA, GLU_TESS_END, GLU_TESS_END_DATA, GLU_TESS_COMBINE, GLU_TESS_COMBINE_DATA, GLU_TESS_ERROR, dan GLU_TESS_ERROR_DATA.

Untuk informasi selengkapnya tentang panggilan balik ini, lihat bagian Keterangan berikut ini.

Fn

Fungsi yang akan dipanggil.

Nilai kembali

Fungsi ini tidak mengembalikan nilai.

Keterangan

Gunakan gluTessCallback untuk menentukan panggilan balik yang akan digunakan oleh objek tessellation. Jika panggilan balik yang ditentukan sudah ditentukan, maka akan diganti. Jika fn adalah NULL, maka panggilan balik yang ada menjadi tidak terdefinisi.

Objek tessellation menggunakan panggilan balik ini untuk menjelaskan bagaimana poligon yang Anda tentukan dipecah menjadi segitiga.

Ada dua versi setiap panggilan balik, satu dengan data poligon yang dapat Anda tentukan dan satu tanpanya. Jika kedua versi panggilan balik tertentu ditentukan, panggilan balik dengan data poligon yang Anda tentukan akan digunakan. Parameter polygon_datagluTessBeginPolygon adalah salinan pointer yang ditentukan ketika gluTessBeginPolygon dipanggil.

Berikut ini adalah panggilan balik yang valid:

Panggilan Balik Deskripsi
GLU_TESS_BEGIN Panggilan balik GLU_TESS_BEGIN dipanggil seperti glBegin untuk menunjukkan awal primitif (segitiga). Fungsi ini mengambil argumen tunggal dari jenis GLenum. Jika Anda mengatur properti GLU_TESS_BOUNDARY_ONLY ke GL_FALSE, argumen diatur ke GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, atau GL_TRIANGLES. Jika Anda mengatur properti GLU_TESS_BOUNDARY_ONLY ke GL_TRUE, argumen diatur ke GL_LINE_LOOP. Prototipe fungsi untuk panggilan balik ini adalah sebagai berikut: bataldimulai (jenisGLenum);
GLU_TESS_BEGIN_DATA GLU_TESS_BEGIN_DATA sama dengan panggilan balik GLU_TESS_BEGIN kecuali dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: voidbeginData (jenisGLenum, polygon_data kekosongan * );
GLU_TESS_EDGE_FLAG Panggilan balik GLU_TESS_EDGE_FLAG mirip dengan glEdgeFlag. Fungsi ini mengambil bendera Boolean tunggal yang menunjukkan tepi mana yang terletak pada batas poligon. Jika bendera GL_TRUE, maka setiap puncak yang mengikuti memulai tepi yang terletak di batas poligon; yaitu, tepi yang memisahkan wilayah interior dari bagian luar. Jika bendera GL_FALSE, maka setiap puncak yang mengikuti memulai tepi yang terletak di interior poligon. Panggilan balik GLU_TESS_EDGE_FLAG (jika ditentukan) dipanggil sebelum panggilan balik puncak pertama dibuat. Karena kipas segitiga dan strip segitiga tidak mendukung bendera tepi, panggilan balik awal tidak dipanggil dengan GL_TRIANGLE_FAN atau GL_TRIANGLE_STRIP jika panggilan balik bendera tepi disediakan. Sebaliknya, kipas dan strip dikonversi menjadi segitiga independen. Prototipe fungsi untuk panggilan balik ini adalah:
voidedgeFlag (benderaGLboolean);
GLU_TESS_EDGE_FLAG_DATA Panggilan balik GLU_TESS_EDGE_FLAG_DATA sama dengan panggilan balik GLU_TESS_EDGE_FLAG kecuali dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: void edgeFlagData (benderaGLboolean,polygon_data kekosongan * );
GLU_TESS_VERTEX Panggilan balik GLU_TESS_VERTEX dipanggil antara panggilan balik awal dan akhir. Ini mirip dengan glVertex , dan mendefinisikan puncak segitiga yang dibuat oleh proses tessellation. Fungsi mengambil pointer sebagai satu-satunya argumen. Penunjuk ini identik dengan penunjuk buram yang Anda berikan saat Anda menentukan vertex (lihat gluTessVertex). Prototipe fungsi untuk panggilan balik ini adalah: void vertex (void * vertex_data);
GLU_TESS_VERTEX_DATA GLU_TESS_VERTEX_DATA sama dengan panggilan balik GLU_TESS_VERTEX kecuali dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: voidvertexData (void * vertex_data, void * polygon_data);
GLU_TESS_END Panggilan balik GLU_TESS_END melayani tujuan yang sama dengan glEnd. Ini menunjukkan akhir dari primitif, dan tidak membutuhkan argumen. Prototipe fungsi untuk panggilan balik ini adalah: batalberakhir (batal);
GLU_TESS_END_DATA Panggilan balik GLU_TESS_END_DATA sama dengan panggilan balik GLU_TESS_END kecuali dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: voidendData (polygon_data kekosongan * );
GLU_TESS_COMBINE Panggil panggilan balik GLU_TESS_COMBINE untuk membuat verteks baru saat tessellation mendeteksi persimpangan, atau untuk menggabungkan fitur. Fungsi ini mengambil empat argumen: Array tiga elemen, masing-masing dari jenis Gldouble.
Array empat pointer.
Array dari empat elemen, masing-masing jenis GLfloat.
Penunjuk ke penunjuk.
Prototipe fungsi untuk panggilan balik ini adalah:
voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData);
Puncak didefinisikan sebagai kombinasi linier hingga empat puncak yang ada, disimpan dalam vertex_data. Koefisien kombinasi linier diberikan berdasarkan berat; bobot ini selalu berjumlah 1,0. Semua penunjuk puncak valid bahkan ketika beberapa bobotnya nol. Parameter coords memberikan lokasi vertex baru.
Alokasikan vertex lain, interpolasi parameter menggunakan vertex_data dan berat, dan kembalikan penunjuk vertex baru di outData. Handel ini disediakan selama panggilan balik penyajian. Bebaskan memori kapan-kapan setelah memanggil gluTessEndPolygon.
Misalnya, jika poligon terletak di bidang arbitrer di ruang tiga dimensi, dan Anda mengaitkan warna dengan setiap puncak, panggilan balik GLU_TESS_COMBINE mungkin terlihat seperti berikut:
void myCombine( GLdouble coords[3], VERTEX *d[4],                 GLfloat w[4], VERTEX **dataOut ) {     VERTEX *newVertex = new_vertex();     newVertex->x = coords[0];     newVertex->y = coords[1];     newVertex->z = coords[2];     newVertex->r = w[0]*d[0]->r + w[1]*d[1]->r + w[2]*d[2]->r +                    w[3]*d[3]->r;     newVertex->g = w[0]*d[0]->g + w[1]*d[1]->g + w[2]*d[2]->g +                    w[3]*d[3]->g;     newVertex->b = w[0]*d[0]->b + w[1]*d[1]->b + w[2]*d[2]->b +                    w[3]*d[3]->b;     newVertex->a = w[0]*d[0]->a + w[1]*d[1]->a + w[2]*d[2]->a +                    w[3]*d[3]->a;     *dataOut = newVertex; }
Ketika tesselulasi mendeteksi persimpangan, panggilan balik GLU_TESS_COMBINE atau GLU_TESS_COMBINE_DATA (lihat di bawah) harus ditentukan, dan harus menulis penunjuk non-NULL ke dalam dataOut. Jika tidak, kesalahan GLU_TESS_NEED_COMBINE_CALLBACK terjadi, dan tidak ada output yang dihasilkan. (Ini adalah satu-satunya kesalahan yang dapat terjadi selama tesselulasi dan penyajian.)
GLU_TESS_COMBINE_DATA Panggilan balik GLU_TESS_COMBINE_DATA sama dengan panggilan balik GLU_TESS_COMBINE kecuali dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: combineDatayang batal (GLdoublecoords[3], void *vertex_data[4], GLfloatweight[4], void **outData, void * polygon_data);
GLU_TESS_ERROR Panggilan balik GLU_TESS_ERROR dipanggil ketika terjadi kesalahan. Satu argumen berjenis GLenum; ini menunjukkan kesalahan spesifik yang terjadi dan diatur ke salah satu hal berikut: GLU_TESS_MISSING_BEGIN_POLYGON
GLU_TESS_MISSING_END_POLYGON
GLU_TESS_MISSING_BEGIN_CONTOUR
GLU_TESS_MISSING_END_CONTOUR
GLU_TESS_COORD_TOO_LARGE
GLU_TESS_NEED_COMBINE_CALLBACK
Panggil gluErrorString untuk mengambil string karakter yang menjelaskan kesalahan ini. Prototipe fungsi untuk panggilan balik ini adalah sebagai berikut:
kesalahanbatal (GLenumerrno);
Pustaka GLU pulih dari empat kesalahan pertama dengan menyisipkan panggilan atau panggilan yang hilang. GLU_TESS_COORD_TOO_LARGE menunjukkan bahwa beberapa koordinat puncak melebihi GLU_TESS_MAX_COORD konstanta yang telah ditentukan sebelumnya dalam nilai absolut, dan bahwa nilai telah dijepit. (Nilai koordinat harus cukup kecil sehingga dua dapat dikalikan bersama-sama tanpa luapan.) GLU_TESS_NEED_COMBINE_CALLBACK menunjukkan bahwa tesselulasi mendeteksi persimpangan antara dua tepi dalam data input, dan panggilan balik GLU_TESS_COMBINE atau GLU_TESS_COMBINE_DATA tidak disediakan. Tidak ada output yang akan dihasilkan.
GLU_TESS_ERROR_DATA Panggilan balik GLU_TESS_ERROR_DATA sama dengan panggilan balik GLU_TESS_ERROR, kecuali bahwa dibutuhkan argumen pointer tambahan. Pointer ini identik dengan pointer buram yang disediakan saat Anda memanggil gluTessBeginPolygon. Prototipe fungsi untuk panggilan balik ini adalah: void errorData (GLenumerrno, void * polygon_data);

Persyaratan

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

Lihat juga

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex