1️⃣ GL_TRIANGLES
Each 3 vertices form an independent triangle.
glBegin(GL_TRIANGLES);
Every 3 points → one separate triangle.
No shared edges between triangles.
Example: 6 points → forms 2 separate triangles: (1,2,3) and (4,5,6).
2️⃣ GL_TRIANGLE_STRIP
Triangles share vertices to form a connected strip.
glBegin(GL_TRIANGLE_STRIP);
First 3 points → first triangle.
Every new vertex after that → new triangle using the last 2 vertices + the new one.
Creates a "strip" of connected triangles.
Example:
Points: 1, 2, 3, 4, 5 → triangles: (1,2,3), (2,3,4), (3,4,5)
3️⃣ GL_TRIANGLE_FAN
Triangles share one central vertex, forming a fan-like shape.
glBegin(GL_TRIANGLE_FAN);
The first vertex → center.
Each next vertex creates a new triangle using the center + previous vertex.
Perfect for circular shapes or radial patterns.
Example:
Points: C(center), A, B, D, E → triangles: (C,A,B), (C,B,D), (C,D,E)
This is exactly what we used in the circle example earlier — ideal for drawing disks or circular fans.
Code
#include <GL/glut.h>
void SetupRC() {
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glLineWidth(20);
glPointSize(20);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-500.0, 500.0, -500.0, 500.0);
}
void RenderScene() {
glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_TRIANGLES);
/*glVertex2f(-300, 0);
glVertex2f(0, 300);
glVertex2f(300, 0);
glVertex2f(0, -400);
glVertex2f(300, -100);
glVertex2f(-300, -100);*/
//glBegin(GL_TRIANGLE_STRIP);
//glVertex2f(-300, 0);
//glVertex2f(0, 300);
//glVertex2f(300, 0);
//glVertex2f(-200, -200);
//glVertex2f(500, -500);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0, 0);
glVertex2f(300, 0);
glVertex2f(0, 300);
glVertex2f(-300, 300);
glVertex2f(-400, -400);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("GL");
SetupRC();
glutDisplayFunc(RenderScene);
glutMainLoop();
return 0;
}