您的位置:首页 > 其它

NEHE阅读笔记-2D多边形

2016-01-09 17:06 232 查看
1.绘制过程

int DrawGLScene(GLvoid)									// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	                        // Clear Screen And Depth Buffer
glLoadIdentity();								// Reset The Current Modelview Matrix
//开始GL绘画部分

glTranslatef(-1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glBegin(GL_TRIANGLES);						// 绘制三角形	        (x,y,z)均相对于光标
glVertex3f( 0.0f, 1.0f, 0.0f);					// 上顶点		(x,y,z)均相对于光标
glVertex3f(-1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glVertex3f( 1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glEnd();

glTranslatef(3.0f,0.0f,0.0f);					// 相对当前的位子移动光标
glBegin(GL_QUADS);						// 绘制四角形	        (x,y,z)均相对于光标
glVertex3f( -1.0f, 1.0f, 0.0f);					// 左上			(x,y,z)均相对于光标
glVertex3f(  1.0f, 1.0f, 0.0f);					// 右上			(x,y,z)均相对于光标
glVertex3f(  1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glVertex3f( -1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glEnd();

//结束GL绘画部分
return TRUE;										// Everything Went OK
}

值得注意的是整个绘画过程的参考点是通过glTranslatef来修改达到的



2.染色过程

int DrawGLScene(GLvoid)						// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
glLoadIdentity();					// Reset The Current Modelview Matrix
//开始GL绘画部分

glTranslatef(-1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glBegin(GL_TRIANGLES);						// 绘制三角形	(x,y,z)均相对于光标
glColor3f(1.0f,0.0f,0.0f);					// 设置着色
glVertex3f( 0.0f, 1.0f, 0.0f);					// 上顶点		(x,y,z)均相对于光标
glColor3f(0.0f,1.0f,0.0f);					// 设置着色
glVertex3f(-1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glColor3f(0.0f,0.0f,1.0f);					// 设置着色
glVertex3f( 1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glEnd();

glTranslatef(3.0f,0.0f,0.0f);					// 相对当前的位子移动光标
glBegin(GL_QUADS);						// 绘制四角形	(x,y,z)均相对于光标
glColor3f(0.5f,0.5f,1.0f);
glVertex3f( -1.0f, 1.0f, 0.0f);					// 左上			(x,y,z)均相对于光标
glVertex3f(  1.0f, 1.0f, 0.0f);					// 右上			(x,y,z)均相对于光标
glVertex3f(  1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glVertex3f( -1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glEnd();

//结束GL绘画部分
return TRUE;							// Everything Went OK
}


通过分析着色代码我们知道,GL是逐行渲染图形的



3.旋转图形坐标

int DrawGLScene(GLvoid)						// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
glLoadIdentity();					// Reset The Current Modelview Matrix
//开始GL绘画部分

glTranslatef(-1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glRotatef(55.0f,0.0f,1.0f,0.0f);
glBegin(GL_TRIANGLES);					        // 绘制三角形	        (x,y,z)均相对于光标
glColor3f(1.0f,0.0f,0.0f);					// 设置着色
glVertex3f( 0.0f, 1.0f, 0.0f);					// 上顶点		(x,y,z)均相对于光标
glColor3f(0.0f,1.0f,0.0f);					// 设置着色
glVertex3f(-1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glColor3f(0.0f,0.0f,1.0f);					// 设置着色
glVertex3f( 1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glEnd();

glLoadIdentity();						// 重置当前的模型视图矩阵,"光标"回到中间
glTranslatef(1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glRotatef(55.0f,0.0f,0.0f,1.0f);
glBegin(GL_QUADS);						// 绘制四角形	        (x,y,z)均相对于光标
glColor3f(0.5f,0.5f,1.0f);
glVertex3f( -1.0f, 1.0f, 0.0f);					// 左上			(x,y,z)均相对于光标
glVertex3f(  1.0f, 1.0f, 0.0f);					// 右上			(x,y,z)均相对于光标
glVertex3f(  1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glVertex3f( -1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glEnd();

//结束GL绘画部分
return TRUE;							// Everything Went OK
}


旋转坐标时,我们记得要重置坐标模型!



int DrawGLScene(GLvoid)						// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
glLoadIdentity();					// Reset The Current Modelview Matrix
//开始GL绘画部分

glTranslatef(-1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glRotatef(55.0f,0.0f,1.0f,0.0f);
glBegin(GL_TRIANGLES);						// 绘制三角形	        (x,y,z)均相对于光标
glColor3f(1.0f,0.0f,0.0f);					// 设置着色
glVertex3f( 0.0f, 1.0f, 0.0f);					// 上顶点		(x,y,z)均相对于光标
glColor3f(0.0f,1.0f,0.0f);					// 设置着色
glVertex3f(-1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glColor3f(0.0f,0.0f,1.0f);					// 设置着色
glVertex3f( 1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glEnd();

glLoadIdentity();						// 重置当前的模型视图矩阵,"光标"回到中间
glTranslatef(1.5f,0.0f,-6.0f);					// 相对当前的位子移动光标
glRotatef(55.0f,0.0f,0.0f,1.0f);
glBegin(GL_QUADS);						// 绘制四角形	        (x,y,z)均相对于光标
glColor3f(0.5f,0.5f,1.0f);
glVertex3f( -1.0f, 1.0f, 0.0f);					// 左上			(x,y,z)均相对于光标
glVertex3f(  1.0f, 1.0f, 0.0f);					// 右上			(x,y,z)均相对于光标
glVertex3f(  1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glVertex3f( -1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glEnd();
//重置坐标模型
glLoadIdentity();
glTranslatef(0.0f,0.0f,-12.0f);
glBegin(GL_TRIANGLES);						// 绘制三角形	        (x,y,z)均相对于光标
glColor3f(1.0f,0.0f,0.0f);					// 设置着色
glVertex3f( 0.0f, 1.0f, 0.0f);					// 上顶点		(x,y,z)均相对于光标
glColor3f(0.0f,1.0f,0.0f);					// 设置着色
glVertex3f(-1.0f,-1.0f, 0.0f);					// 左下			(x,y,z)均相对于光标
glColor3f(0.0f,0.0f,1.0f);					// 设置着色
glVertex3f( 1.0f,-1.0f, 0.0f);					// 右下			(x,y,z)均相对于光标
glEnd();

//结束GL绘画部分
return TRUE;							// Everything Went OK
}




忘记重置坐标模型时,就会以之前的模型绘制




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: