计算机图形学OpenGL
函数调用笔记
1. 直线光栅化
1.1 背景颜色
glClear(GLbitfield mask)
glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
glClear(GLbitfield mask);
/*官网解释:clear buffers to preset values,用预制的值来清空缓冲区
参数:GL_COLOR_BUFFER_BIT,颜色缓冲
GL_DEPTH_BUFFER_BIT,深度缓冲
GL_STENCIL_BUFFER_BIT,模板缓冲*/
glClearColor(0.0, 0.0, 0.0, 0.0);
1.2 点的绘制
glPointSize(3);
glBegin (GL_POINTS);
glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (-0.4f, -0.4f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.0f, 0.0f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (0.4f, 0.4f);
glEnd ();
1.3 指定绘制图形的类型
glBegin(GLenum mode)
与glEnd()结合起来使用
GLenum mode 参数:----------------------------------
GL_POINTS:把每个顶点作为一个点进行处理,顶点n定义了点n,绘制N个点。
GL_LINES: 把每个顶点作为一个独立的线段,顶点2n-1和2n之间定义了n条线段,绘制N/2条线段
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,绘制n-1条线段。
GL_LINE_LOOP: 绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,绘制n条线段。
GL_TRIANGLES: 把每个顶点作为一个独立的三角形,顶点3n-2,3n-1和3n定义了第n个三角形,绘制了N/3个三角形。
GL_TRIANGLE_STPIP:绘制一组相连的三角形,对于奇数n,顶点n,n+1,和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,绘制N-2个三角 形。
GL_QUADS: 绘制由四个顶点组成的一组单独的四边形。顶点4n-3,4n-2,4n-1和4n定义了第n个四边形。绘制了N/4个四边形。
GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1,2n,2n+2和2n+1定义了第n个四边形,绘制了N/2-1个 四边形。
GL_POLYGON: 绘制了一个凸多边形。顶点1到n定义了这个多边形。
1.4 三角形的绘制
glBegin (GL_TRIANGLES);
glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (0.0f, 1.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.8f, -0.5f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (-0.8f, -0.5f);
glEnd ();
1.5 矩形的绘制
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
/*坐标用的是相对于窗口位置的坐标*/
1.6 直线绘制
glBegin (GL_LINES);
glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (100.0f, 0.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (180.0f, 240.0f);
glEnd ();
2. 二维几何变换
绘制凸多边形 参考1.3
glBegin(GL_POLYGON);
glVertex2f(-1.0f, -1.0f);
glVertex2f(1.0f, -1.0f);
glVertex2f(1.0f, 1.0f);
glVertex2f(-1.0f, 1.0f);
glEnd();
2.1 对多边形进行几何变换
平移变换glTranslatef(x, y, z);
旋转变换glRotatef(angle, x, y, z);
图像缩放 glScalef(GLfloat x, GLfloat y , GLfloat z);
void drawSquare(void) //绘制中心在原点,边长为2的正方形
{
glBegin(GL_POLYGON);
glVertex2f(-1.0f, -1.0f);
glVertex2f(1.0f, -1.0f);
glVertex2f(1.0f, 1.0f);
glVertex2f(-1.0f, 1.0f);
glEnd();
}
void myDraw(void) //二维几何变换
{
// 请在此添加你的代码
/********** Begin ********/
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
drawSquare();
glPushMatrix();
glTranslatef(0.0f, 2.0f, 0.0f);
glScalef(3.0, 0.5, 1.0);
glColor3f(1.0, 1.0, 1.0);
drawSquare();
glPopMatrix();
glPushMatrix();
glTranslatef(-3.0, 0.0, 0.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
glColor3f(0.0, 1.0, 0.0);
drawSquare();
glPopMatrix();
glPushMatrix();
glTranslatef(3.0, 0.0, 0.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
glColor3f(0.0, 0.7, 0.0);
drawSquare();
glPopMatrix();
glPushMatrix();
glTranslatef(0.0, -3.0, 0.0);
glScalef(4.0, 1.5, 1.0);
glColor3f(0.0, 0.0, 1.0);
drawSquare();
glPopMatrix();
/********** End **********/
glFlush();
}
3. 立方体三维观察
3.1 视点转换
gluLookAt()
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,
GLdouble centerx,GLdouble centery,
GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
第一组eyex, eyey,eyez 相机在世界坐标的位置
第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
第三组upx,upy,upz 相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)。
3.2 绘制立方体
glutWireCube(x); 其中参数为立方体的边长
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
/*观察变换*/
gluLookAt(x0, yy, z0, xref, yref, zref, Vx, Vy, Vz); //指定三维观察参数
// 请在此添加你的代码
/********** Begin ********/
glClearColor(0.0, 0.0, 0.0,0.0);
glColor3f(1.0, 0.0, 0.0);
glutWireCube(1.0);
glPushMatrix();
glColor3f(0.0, 1.0, 0.0);
glLineWidth(2.0);
glTranslatef(2.0, 0.0, 0.0);
glutWireCube(1.0);
glPopMatrix();
glPushMatrix();
glColor3f(0.0, 0.0, 1.0);
glTranslatef(-2.0, 0.0, 0.0);
glutSolidCube(1.0);
/********** End **********/
glFlush();
}
旋转变换
glPushMatrix();
glColor3f(0.0, 1.0, 0.0);
glLineWidth(2.0);
glTranslatef(2.0, 0.0, 0.0);
glRotatef(30, 1, 0.0, 0.0);
glutWireCube(1.0);
glPopMatrix();
3.3 reshpe变换
视口变换
glViewport()定义视口大小
投影变换
透视投影
3.3 reshpe变换
视口变换
glViewport()定义视口大小
投影变换
透视投影
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
以上部分内容来源于网络, 侵权联系删除