计算机图形学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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值