九、字体渲染

void glutBitmapCharacter(void* font, int character);

绘制一个图像字符

Font表示要使用的图像字体,如下表所示:

GLUT_BITMAP_8_BY_13 一种固定宽度字体,每个字符都放在一个8x13像素的矩形框内
GLUT_BITMAP_9_BY_15 一种固定宽度字体,每个字符都放在一个9x15像素的矩形框内
GLUT_BITMAP_TIMES_ROMAN_10 一种10点均匀间距的Times Roman字体
GLUT_BITMAP_TIMES_ROMAN_24 一种24点均匀间距的Times Roman字体
GLUT_BITMAP_HELVETICA_10 一种10点均匀间距的Helvetica字体
GLUT_BITMAP_HELVETICA_12 一种12点均匀间距的Helvetica字体
GLUT_BITMAP_HELVETICA_18 一种18点均匀间距的Helvetica字体

Character表示要绘制的字符

int glutBitmapWidth(GLUTbitmapFont font, int character);

返回一个图像字符的宽度

font是指定的图像字体,如下表所示:

GLUT_BITMAP_8_BY_13 一种固定宽度字体,每个字符都放在一个8x13像素的矩形框内
GLUT_BITMAP_9_BY_15 一种固定宽度字体,每个字符都放在一个9x15像素的矩形框内
GLUT_BITMAP_TIMES_ROMAN_10 一种10点均匀间距的Times Roman字体
GLUT_BITMAP_TIMES_ROMAN_24 一种24点均匀间距的Times Roman字体
GLUT_BITMAP_HELVETICA_10 一种10点均匀间距的Helvetica字体
GLUT_BITMAP_HELVETICA_12 一种12点均匀间距的Helvetica字体
GLUT_BITMAP_HELVETICA_18 一种18点均匀间距的Helvetica字体

character为指定的字符

返回指定字符的宽度,以像素为单位

void glutStrokeCharacter(void* font, int character);

绘制一个图形字符

Font表示要使用的图形字体,如下表所示:

GLUT_STROKE_ROMAN 一种等间距的Roman Simplex字体,仅包括32到127的ASCII字符
GLUT_STROKE_MONO_ROMAN 一种单一间距的Roman Simplex字体,仅包括32到127的ASCII字符

Character为要绘制的字符

int glutStrokeWidth(GLUTstrokeFont font, int character);

返回一个图形字体的宽度

Font是指定的图形字体,如下表所示:

GLUT_STROKE_ROMAN 一种等间距的Roman Simplex字体,仅包括32到127的ASCII字符
GLUT_STROKE_MONO_ROMAN 一种单一间距的Roman Simplex字体,仅包括32到127的ASCII字符

Character为绘制的字符

十、实体绘制

以下所有函数中,radius表示球体的半径,slices表示球体围绕z轴分割的数目,stacks表示球体沿着z轴分割的数目。

绘制中心在模型坐标原点,半径为radius的球体,球体围绕z轴分割slices次,球体沿着z轴分割stacks次

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 线框球
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 实心球

void glutWireCube(GLdouble size); 线框立方体
void glutSolidCube(GLdouble size); 实心立方体

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 线框圆环
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 实心圆环

void glutWireIcosahedron(void); 线框20面体
void glutSolidIcosahedron(void); 实心20面体

void glutWireOctahedron(void); 线框8面体
void glutSolidOctahedron(void); 实心8面体

void glutWireTetrahedron(void); 线框4面体
void glutSolidTetrahedron(void); 实心4面体

void glutWireDodecahedron(GLdouble radius); 线框12面体
void glutSolidDodecahedron(GLdouble radius); 实心12面体

void glutWireCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); 线框圆锥体
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); 实心圆锥体

void glutWireTeapot(GLdouble size); 线框茶壶
void glutSolidTeapot(GLdouble size); 实心茶壶

十一、实例

初始化及简单平面图形

#include <GL/glut.h>
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glFlush();
}

int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}