opengl配置环境(模拟器用opengl还是directx)

最近在课程上在学习计算机图像,对于突然冒出来的好多glut库里的函数感觉很难招架。把示例代码一行行百度下来,总算是差不多理解了大概的意思,在这里分享一下绘制图像需要的基础的函数。 1.配置环境对于openGL的环境配置可以看我之前写的环境配置的文章,点击文章底部左下角“阅读原文”就可以访问原文章。 2.main函数设置 基本设置在绘制图像前还需要对程序进行初始化在main函数里需要添加初始化语句 …

最近在课程上在学习计算机图像,对于突然冒出来的好多glut库里的函数感觉很难招架。把示例代码一行行百度下来,总算是差不多理解了大概的意思,在这里分享一下绘制图像需要的基础的函数。

1. 配置环境
对于openGL的环境配置可以看我之前写的环境配置的文章,点击文章底部左下角“阅读原文”就可以访问原文章。

2. main函数设置

基本设置
在绘制图像前还需要对程序进行初始化
在main函数里需要添加初始化语句

//这个函数用来初始化 GLUT 库
glutInit(&argc, argv);
//设置颜色模式和缓冲区格式
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

颜色模式:
参数有,GLUT_RGBA模式;GLUT_RGB模式 ;GLUT_INDEX模式
缓冲区类型 :GLUT_SINGLE——单缓冲窗口;GLUT_DOUBLE——双缓冲窗口

GLUT_SINGLE 实际上就是将所有的绘图指令在窗口上执行,一般只用于显示单独的一副非动态的图
GLUT_DOUBLE 实际上绘图指令是在一个缓冲区完成,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,一般用于生成动画效果

窗体设置
对绘制的窗体的设置,同样可以写入main函数中

    //设置初始窗口的位置
glutInitWindowPosition(100, 100);
    //设置初始窗口的大小
glutInitWindowSize(400, 400);
    //根据前面设置建立窗口,参数设置为变体
glutCreateWindow(\"实验\");
    //颜色函数设置
Init();
    //绘图时被调用的函数
glutDisplayFunc(myDisplay);
    //改变窗体大小时进行图像重绘
glutReshapeFunc(Reshape);
    //进行消息循环,用于显示窗体,窗体关闭后自动退出循环
glutMainLoop();

glutInitWindowPosition(int x, int y)窗口左上角相对于计算机坐标(x,y)
glutDisplayFunc(myDisplay)其中的 myDisplay 参数为自己设置的成像函数
glutReshapeFunc(Reshape)其中的 Reshape 参数为自己设置的重新成像函数

Reshape函数设置

void Reshape(int w, int h) {
  //glViewport负责把视景体截取的图像按照怎样的高和宽显示到屏幕上
  gViewport(0, 0, (GLsizei)w, (GLsizei)h);
         
  //将当前矩阵指定为投影矩阵
  glMatrixMode(GL_PROJECTION);
         
  //把矩阵设为单位矩阵
  lLoadIdentity();
         
  //让中心坐标(0,0)变成窗口的左下角
  gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
}

颜色函数设置

void Init(){ 
  //设置颜色 
  glClearColor(0.0, 0.0, 0.0, 0.0); 
  //颜色过渡形式
  glShadeModel(GL_FLAT); 
}

glShadeModel 函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式
参数一般为 GL_SMOOTH(默认)自然过渡;GL_FLAT 不过渡,颜色有层次

函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式 参数一般为 GL_SMOOTH(默认)自然过渡 GL_FLAT 不过渡,颜色有层次

3.绘图函数 myDisplay 函数设置

void myDraw(int a, int b) {
  /*other code*/
  //指定栅格化点的直径
  glPointSize(1);
  //绘图准备
  glBegin(GL_POINTS);
  glVertex2i(/*other code*/);
  lEnd();
  }
}
void myDisplay(void) {
  myDraw(a,b)
  glFlush();//强制刷新缓冲,保证绘图命令将被执行
}

/* other code */ 为绘图必要的条件设置
glPointSize(1) 表示图像直径为一个像素点,其中的参数可以决定整体图像的粗细程度
glBegin() 是和 glEnd() 结合起来使用

函数原型 void glBegin(GLenum mode)
mode:创建元素的类型,比如:点,线等。可以是以下数值:

函数 说明
GL_POINTS 把每个顶点作为一个点进行处理
GL_LINES 把每个顶点作为一个独立的线段
GL_LINE_STRIP 绘制从第一个顶点到最后一个顶点依次相连的一组线段
GL_LINE_LOOP 绘制从第一个顶点到最后一个顶点首尾相连的一组线段
GL_TRIANGLES 把每个顶点作为一个独立的三角形
GL_TRIANGLE_STPIP 绘制一组相连的三角形
GL_QUADS 绘制由四个顶点组成的一组单独的四边形
GL_QUAD_STRIP 绘制一组相连的四边形

在 glBegin() 和 glEnd() 之间需要调用函数绘图,glVertex() 设置顶点坐标
glVertex2i 输入整型的点
glVertex2f 输入单精度的点
glVertex2d 输入双精度的点
除此之外还有其他可以在 glBegin() 和 glEnd() 之间调用的函数

函数 说明
glVertex() 设置顶点坐标
glColor() 设置当前颜色
glIndex() 设置当前颜色表
glNormal() 设置法向坐标
glCoord() 产生坐标
glCallList(),glCallLists() 执行显示列表
glTexCoord() 设置纹理坐标
glEdgeFlag() 控制边界绘制
glMaterial() 设置材质

4.示例代码:直线的绘制

#include <GL/glut.h>
#include <math.h>
void myDraw(int x0, int y0, int x1, int y1) {
  int m = 0;
  if (abs(x1 - x0) >= abs(y1 - y0))
    m = abs(x1 - x0);
  else
    m = abs(y1 - y0);
  float dx = (float)(x1 - x0) / m;
  float dy = (float)(y1 - y0) / m;
  float x = x0;
  float y = y0;
  glPointSize(1);
  for (int i = 0;i < m;i++) {
    glBegin(GL_POINTS);
    glVertex2i((int)(x + 0.5), (int)(y + 0.5));
    glEnd();
    x += dx;
    y += dy;
  }
}
 void myDisplay(void) {
  myDraw(0, 0, 200, 300);
  glFlush();
}
void Init() {
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glShadeModel(GL_FLAT);
}
void Reshape(int w, int h) {
  glViewport(0, 0, (GLsizei)w, (GLsizei)h);
  lMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
}
int main(int argc, char *argv[]) {
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  glutInitWindowPosition(100, 100);
  glutInitWindowSize(400, 400);
  glutCreateWindow(\"实验1 直线绘制\");
  Init();
  glutDisplayFunc(myDisplay);
  glutReshapeFunc(Reshape);
  lutMainLoop();
  return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月11日 下午5:05
下一篇 2022年5月11日 下午5:06

相关推荐

  • 推广app的妙招有哪些,比较好的app推广平台介绍

    随着智能手机更新换代和移动互联网发展,APP已经成为公司宣传品牌及提供服务的标配。APP上线后如何推广出去让更多潜在用户知道,是每个APP运营小伙伴关心的问题。下面就分享3种目前比较火爆的APP推广方法和实用小技巧。 一、应用商店推广 大多数用户寻找某些应用的时候,习惯去应用商店搜索,所以首先要让自己的APP在主流的应用商店中展示,如苹果App Store、小米应用商店、华为应用市场、Google…

    2022年6月3日
    690
  • 泰国跟团多少钱, 这些内幕你一定要了解

    经常看到新闻,中国游客跟团到泰国来玩。结果各种被坑,如带进指定的购物店,强迫购物!严重一点的不消费满一定额度,就被赶下车。有的导游甚至还破口大骂游客。下面我给大家好好的说一下泰国跟团游的各种问题!希望对大家有所帮助! 首先大家经常可以从各种方面看到,泰国跟团游价格低廉,大多数就2.3千块钱,玩好几天,全程住五星级酒店!大多数的人看到了,还觉得便宜,然后就交钱过来了。然而,这才是你噩梦的开始!试想你…

    2022年10月8日
    320
  • 电话营销开场白怎么练习,分析电话营销六种经典开场白

    电话销售开场白指的是在电话沟通开始的30秒到一分钟左右的时间内,电话销售人员和潜在目标客户所要讲的话,也差不多是前五句话。 衡量一套开场白是否有效的标准就是看其组合起来之后,能否激起客户的兴趣,让客户在繁杂的事务中抽出一部分时间给电话销售人员,同时又可以避开客户的条件反射心理。 一、陈述产品的最终价 客户之所以选择某种商品或者服务,是因为这种商品或者服务能够帮他解决现实存在的问题,能够带给他相应的…

    2022年5月21日
    820
  • win10桌面文件突然消失怎么找回,教你一个方法立马解决

    我们在使用Windows操作系统的时候,经常会在控制面板更改用户、卸载程序、音频调试等,不过在Windows10系统中,我们已经无法在开始菜单中找到控制面板了。那么Win10如何把控制面板放到桌面上?下面装机之家分享一下Win10控制面板不见了解决方法,来看看吧。 Win10如何把控制面板放到桌面上? 首先我们在桌面空白处鼠标右键点击,弹出菜单栏之后,我们点击“个性化”,如下图所示。 我们先点击“…

    2022年6月10日
    980
  • 华为手机照片怎么恢复,恢复手机照片最简单的方法

    华为发布了他们的年度高端旗舰机,价格首次超越5000元,而且华为这次还和保时捷合作了,设计了保时捷6GB+256GB版,价格甚至达到了8999元,看来这次华为是搞大事情了,之前三星因为Note7爆炸的失势,Mate9更是获得了填补市场空白的特别机会。余承东对这款旗舰机也是寄托了厚望,Mate系列手机搭载华为研发的最新麒麟960芯片,也是第一款搭载ARMCortex-A73CPU和Mali-G71八…

    2022年7月10日
    840
  • pdf文件怎么加密保护,批量给pdf文件打印加密教程

    职场办公,保护好的自己的文件不让别人动是有必要的。怎么保护好自己的文件不让别人动呢?很简单,我们可以给文件加密,这样就不怕别人动你的文件啦。 今天小编也给大家带来一个好用的PDF文件加密方法,这个方法超级简单,保证各位小伙伴看完就会,下面就来详细看看吧~ 首先我们需要准备一个支持PDF文件加密的工具——迅捷PDF转换器,大家可以直接在网页上搜索然后进行下载安装。 安装成功后,直接打开就行,从中我们…

    2022年6月23日
    570
  • seo快速排名技巧有哪些,网站快速排名的方法

    我相信许多朋友都知道SEO快速排名,现在盛行的快速排名都是众人皆知的黑帽SEO技能,可是却唯一不知道纯白帽也可以快速排名。可是我估计咱们都看到过许多新站在短短数月内就上了主页,网站权重从0升到3,这难道是黑帽吗,不是的,下面我给咱们说明一下什么是白帽快速排名。 正常来讲白帽快速排名简直是不可能的,由于很难完结,并不像黑帽那样需求高档的技能,以及做弊的代码。而白帽快排也是最近一段时间内出来的,现在还…

    2022年7月29日
    1330
  • 现在做哪行最赚钱,未来10大赚钱最快前景极佳行业

    摘要:随着社会发展速度快,生活压力大,不少人都选择创业。对于创业者来说,看准行业投资,创业成功率会明显提高。那么,最赚钱的生意有哪些呢?本文将盘点目前十大最赚钱的生意,有餐饮生意、服装生意、化妆品生意、婴幼儿用品生意、开炸鸡店、殡葬服务、医药保健品生意、开个性车贴店、相机租凭、开咖啡店。以下是详细内容,一起来看看吧。 工商界报 餐饮生意 民以食为天,14亿中国人“一天不吃就饿得慌”,因此餐饮业仍是…

    2022年6月12日
    850
  • 营销工具有哪些,8种高效营销工具推荐

    大家好,我是利器大师团队的大师哥。这几年中,因为我本身从事互联网运营方向的职业,所以对于营销运营的研究也算是较为深入的,从营销到营销知识、营销技术(包括广告技术)、营销性功能、营销产品工具、营销策略、营销模式、营销服务等等,从国内到国外的深入研究与总结。 下面这套专栏是专为网络营销引流而设计的营销知识与方法论的总结,如果你恰好需要,那么可以加入到你的书架中,可以帮助到你。购买的用户还会赠送电子版资…

    2022年5月19日
    1250
  • 小生意利润怎么计算(成本低利润高的小生意)

    营业利润永远是商业经济活动中的行为目标,没有足够的利润企业就无法继续生存,没有足够的利润,企业就无法继续扩大发展。我在多年从事产品策划的工作中,经常接触到不少企业老板面对市场激烈的竞争,面对超低利润的产品销售局面,一筹莫展。可是不降价产品就卖不出去,企业更没法生存,价格降下来了,产品销量越来越大,可是利润越来越小,甚至亏本。   与利润相关的计算公式主要如下 (一)营业利润  营业利润=营业收入-…

    2022年10月24日
    490

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信