计算机图形学OpenGL

计算机图形学OpenGL

函数调用笔记

glFlush与glFinis

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()

glBegin(GLenum mode)

与glEnd()结合起来使用


GLenum mode 参数:----------------------------------
GL_POINTS:把每个顶点作为一个点进行处理,顶点n定义了点n,绘制N个点。

GL_LINES:   把每个顶点作为一个独立的线段,顶点2n-12n之间定义了n条线段,绘制N/2条线段

GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,绘制n-1条线段。

GL_LINE_LOOP: 绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,绘制n条线段。

GL_TRIANGLES: 把每个顶点作为一个独立的三角形,顶点3n-23n-13n定义了第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-34n-24n-14n定义了第n个四边形。绘制了N/4个四边形。

GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-12n,2n+22n+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);
/*坐标用的是相对于窗口位置的坐标*/

glRectf参数值大于一的时候解释

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()定义视口大小

投影变换

glMatrixMode()

透视投影
3.3 reshpe变换
视口变换

glViewport()定义视口大小

投影变换

glMatrixMode()

透视投影

void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)

以上部分内容来源于网络, 侵权联系删除

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值