计算机图形学 -- 基本图形函数练习

2024-06-10 13:18

本文主要是介绍计算机图形学 -- 基本图形函数练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



1. 基本




#include<glut.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")void mydisplay(void)
{//glClearColor : 通过glClear使用红,绿,蓝以及AFA值来清除颜色缓冲区,并且缺省值全是0. 即(0,0,0,0)glClearColor(1.0,1.0,0.0,0.0);	//设置背景为绿色		glClear(GL_COLOR_BUFFER_BIT);//在左上角画一个黄色的矩形glColor3f(0.0f,1.0f,1.0f);glRectf(-0.9f,0.0f,0.0f,0.9f);//分别是左下角和右上角两点坐标//在右上角画一个花花的三角形glBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f);	glVertex2f(0.9f,0.0f);glColor3f(0.0f,1.0f,0.0f);	glVertex2f(0.5f,0.6f);glColor3f(0.0f,0.0f,1.0f);	glVertex2f(0.1f,0.0f);glEnd();//画两个点glPointSize(5);//表示点的像素glBegin(GL_POINTS);glColor3f(0.0f,0.0f,0.0f);	glVertex2f(0.05f,0.0f);glColor3f(1.0f,0.0f,0.0f);	glVertex2f(0.05f,-0.5f);glEnd();glFlush();
}int main(int argc,char *argv[])
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(300,100);glutInitWindowSize(500,500);glutCreateWindow("Basic Shape");glutDisplayFunc(&mydisplay);glutMainLoop();return 0;
}



2. 升级1




#include<glut.h>
#include<math.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
const GLfloat R = 0.8f;
const GLfloat PI = 3.1415926536f;
const int n = 600;void basicshape2(void)
{int i;glClearColor(1.0,1.0,0.0,0.8);glClear(GL_COLOR_BUFFER_BIT);/* ---------------------- ----------------------*/glLineWidth(3);glBegin(GL_POLYGON);	//以闭合折线方式画圆glColor3f(1.0f,0.0f,0.0f);for(i=0; i<n; ++i)glVertex2f(R*cos(2*PI/n*i), R*sin(2*PI/n*i));glEnd();/* ---------------------- ----------------------*/glBegin(GL_LINE_LOOP);	//以闭合折线方式画五角星glColor3f(0.0f,1.0f,0.0f);GLfloat bx=R*cos(18*PI/180);GLfloat by=R*sin(18*PI/180);GLfloat cx=R*sin(36*PI/180);GLfloat cy=R*cos(36*PI/180);glVertex2f(-bx,by);glVertex2f(bx,by);glVertex2f(-cx,-cy);glVertex2f(0.0f,R);glVertex2f(cx,-cy);glEnd();/* ---------------------- ----------------------*/glBegin(GL_POLYGON);	//以填充方式画菱形,多边形,五角星也是可以的啦~glVertex2f(-0.8f,0.95f);glVertex2f(-0.7f,0.85f);glVertex2f(-0.8f,0.75f);glVertex2f(-0.9f,0.85f);glEnd();glBegin(GL_POLYGON);	//对称一下glVertex2f(0.8f,0.95f);glVertex2f(0.7f,0.85f);glVertex2f(0.8f,0.75f);glVertex2f(0.9f,0.85f);glEnd();//这里有两个菱形,可以用GL_QUADS一次搞定,独立的~/* ---------------------- ----------------------*/glColor3f(0.0f,0.0f,1.0f);glBegin(GL_TRIANGLES);	//两个三角形glVertex2f(-1.0f,-1.0f);glVertex2f(-0.95f,-0.7f);glVertex2f(-0.8f,-0.7f);glVertex2f(-1.0f,-1.0f);glVertex2f(-0.8f,-0.75f);glVertex2f(-0.8f,-0.95f);glEnd();glFlush();
}int main(int argc,char *argv[])
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(150,150);glutInitWindowSize(500,500);glutCreateWindow("Baisc Shape2");glutDisplayFunc(basicshape2);glutMainLoop();return 0;
}


3. 升级2








#include<GL/glut.h>
#include<math.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
const float R1 = 0.8f;
const float R2 = 0.4f;
const float PI = 3.1415926;
void myDisplay_1()
{glClearColor(1.0f,1.0f,1.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);//*****下面开始画矩形和三角形glColor3f(1.0f,0.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(0.4f,0);glVertex2f(0,0.4f);glVertex2f(-0.4f,0);glVertex2f(0,-0.4f);glEnd();glBegin(GL_TRIANGLES);	//四个三角形glColor3f(1.0f,1.0f,0.0f);glVertex2f(0.4f,-0.4f);glVertex2f(0.8f,0);glVertex2f(0.4f,0.4f);glColor3f(0.0f,0.0f,1.0f);glVertex2f(0.4f,0.4f);glVertex2f(-0.4f,0.4f);glVertex2f(0,0.8f);glColor3f(1.0f,0.0f,1.0f);glVertex2f(-0.4f,0.4f);glVertex2f(-0.4f,-0.4f);glVertex2f(-0.8f,0);glColor3f(0.0f,1.0f,0.0f);glVertex2f(-0.4f,-0.4f);glVertex2f(0.4f,-0.4f);glVertex2f(0,-0.8f);glEnd();//******描边glColor3f(0.0f,0.0f,0.0f);glBegin(GL_LINE_LOOP);glVertex2f(0.4f,0);//矩形的边glVertex2f(0,0.4f);glVertex2f(-0.4f,0);glVertex2f(0,-0.4f);glEnd();glBegin(GL_LINE_LOOP);//三角形的边,可当作两个矩形glVertex2f(0.8f,0);glVertex2f(0.4f,-0.4f);glVertex2f(0,-0.8f);glVertex2f(-0.4f,-0.4f);glVertex2f(-0.8f,0);glVertex2f(-0.4f,0.4f);glVertex2f(0,0.8f);glVertex2f(0.4f,0.4f);glVertex2f(0.4f,-0.4f);glVertex2f(-0.4f,-0.4f);glVertex2f(-0.4f,0.4f);glVertex2f(0.4f,0.4f);glEnd();glFlush();
}void myDisplay_2()
{glClearColor(1.0f,1.0f,1.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);for(int i=0;i<=270;i+=90){glColor3f(1.0f,0.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(R1*cos(i*PI/180),R1*sin(i*PI/180));glVertex2f(R2*cos((i+25)*PI/180),R2*sin((i+25)*PI/180));glVertex2f(0,0);glVertex2f(R2*cos((i-25)*PI/180),R2*sin((i-25)*PI/180));glEnd();glColor3f(0.0f,0.0f,0.0f);glBegin(GL_LINE_LOOP);glVertex2f(R1*cos(i*PI/180),R1*sin(i*PI/180));glVertex2f(R2*cos((i+25)*PI/180),R2*sin((i+25)*PI/180));glVertex2f(0,0);glVertex2f(R2*cos((i-25)*PI/180),R2*sin((i-25)*PI/180));glEnd();	}for(i=45;i<=315;i+=90){glColor3f(0.0f,1.0f,0.0f);glBegin(GL_POLYGON);glVertex2f(R1*cos(i*PI/180),R1*sin(i*PI/180));glVertex2f(R2*cos((i+20)*PI/180),R2*sin((i+20)*PI/180));glVertex2f(0,0);glVertex2f(R2*cos((i-20)*PI/180),R2*sin((i-20)*PI/180));glEnd();glColor3f(0.0f,0.0f,0.0f);glBegin(GL_LINE_LOOP);glVertex2f(R1*cos(i*PI/180),R1*sin(i*PI/180));glVertex2f(R2*cos((i+20)*PI/180),R2*sin((i+20)*PI/180));glVertex2f(0,0);glVertex2f(R2*cos((i-20)*PI/180),R2*sin((i-20)*PI/180));glEnd();}glFlush();
}int main(int argc,char * argv[])
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow("sheng2_1");glutDisplayFunc(myDisplay_1);glutInitWindowPosition(700,100);glutInitWindowSize(500,500);glutCreateWindow("sheng2_2");glutDisplayFunc(myDisplay_2);glutMainLoop();return 0;
}



这篇关于计算机图形学 -- 基本图形函数练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048268

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Python中Namespace()函数详解

《Python中Namespace()函数详解》Namespace是argparse模块提供的一个类,用于创建命名空间对象,它允许通过点操作符访问数据,比字典更易读,在深度学习项目中常用于加载配置、命... 目录1. 为什么使用 Namespace?2. Namespace 的本质是什么?3. Namesp

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数