CSGL

 

glShadeModel

void glShadeModel(GLenum mode)

 

GL_FLAT/【GL_SMOOTH】

着色技术选择

 glClearDepth

GL.glClearDepth(depth);

 

glClearDepth:设置深度缓存的清除值

参数

   depth 指定清除深度缓存时使用的深度值。

说明

本函数指定用glClear清除深度缓存时所使用的深度值,该值的范围在[0,1]之间。

glDepthFunc

参数func的值可以为GL_NEVER(没有处理)、GL_ALWAYS(处理所有)、GL_LESS(小于)、GL_LEQUAL(小于等于)、GL_EQUAL(等于)、GL_GEQUAL(大于等于)、GL_GREATER(大于)或GL_NOTEQUAL(不等于),其中默认值是GL_LESS

 glHint

void glHint(GLenum target,GLenum mod)

参数说明:

      target:指定所控制行为的符号常量,可以是以下值

  • GL_FOG_HINT:指定雾化计算的精度。如果OpenGL实现不能有效的支持每个像素的雾化计算,则GL_DONT_CARE和GL_FASTEST雾化效果中每个定点的计算。
  • GL_LINE_SMOOTH_HINT:指定反走样线段的采样质量。如果应用较大的滤波函数,GL_NICEST在光栅化期间可以生成更多的像素段。
  • GL_PERSPECTIVE_CORRECTION_HINT:指定颜色和纹理坐标的差值质量。如果OpenGL不能有效的支持透视修正参数差值,那么GL_DONT_CARE 和 GL_FASTEST可以执行颜色、纹理坐标的简单线性差值计算。
  • GL_POINT_SMOOTH_HINT:指定反走样点的采样质量,如果应用较大的滤波函数,GL_NICEST在光栅化期间可以生成更多的像素段。
  • GL_POLYGON_SMOOTH_HINT:指定反走样多边形的采样质量,如果应用较大的滤波函数,GL_NICEST在光栅化期间可以生成更多的像素段。

      mod:指定所采取行为的符号常量,可以是以下值

  • GL_FASTEST:选择速度最快选项。
  • GL_NICEST:选择最高质量选项。
  • GL_DONT_CARE:对选项不做考虑。

函数说明:

      该函数控制OpenGL在某一方面有解释的余地时,所采取的操作行为。

glLoadIdentity

函数原型:

     void glLoadIdentity(void)

函数说明:

      OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令。该命令是一个无参的无值函数,其功能是用一个4×4的单位矩阵来替换当前矩阵,实际上就是对当前矩阵进行初始化。也就是说,无论以前进行了多少次矩阵变换,在该命令执行后,当前矩阵均恢复成一个单位矩阵,即相当于没有进行任何矩阵变换状态。

      单位矩阵就是对角线上都是1,其余元素皆为0的矩阵。

      当您调用glLoadIdentity()之后,您实际上将当前点移到了屏幕中心:类似于一个复位操作
      1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
      2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
      3.中心左面的坐标值是负值,右面是正值。
         移向屏幕顶端是正值,移向屏幕底端是负值。
         移入屏幕深处是负值,移出屏幕则是正值。

      glLoadIdentity()该函数的功能是重置当前指定的矩阵为单位矩阵.在语义上,其等同于用单位矩阵调用glLoadMatrix()。但是,在一些情况下,glLoadIdentity()更加效率。

      由于某些原因可能使得当前矩阵中的元素有一些不确定的值,这将导致程序对图形对象进行几何变形时得到一个非预期的结果。因此有必要将当前矩阵初始成 一个单位矩阵,即对图形对象不做任何变换。这就是为什么在调用过glMatrixMode()命令后,总是要调用该命令的原因。由于glMatrixMode()命令本身也是一种矩阵变换,它将当前矩阵变成命令参数所规定的形式,若不用单位矩阵来替换它,在此矩阵下绘制出的图形将是难以预计的。

     需要注意的是,用单位矩阵替换当前矩阵并不改变当前矩阵模式。

     应当说明的是,用一个单位矩阵来替换当前矩阵的做法并非在任何场合下都可以使用。例如,已经进行了3次矩阵变换,而现在打算将当前矩阵恢复到第二次变换后的状态时,该方法将失效。此时可用glPushMatrix()命令将每次变换前的矩阵压入矩阵堆栈,在进行完新矩阵中的各种操作后,再利用glPopMatrix()命令将栈顶的矩阵弹出矩阵堆栈,成为当前矩阵。

glMatrixMode

glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.

如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。这样,接下来的语句可以是跟透视相关的函数,比如glFrustum()或gluPerspective();

在操作投影矩阵以前,需要调用函数:

glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵

然后把矩阵设为单位矩阵:
glLoadIdentity();
然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;


如果参数是GL_MODELVIEW,这个是对模型视景的操作,接下来的语句描绘一个以模型为基础的适应,这样来设置参数,接下来用到的就是像gluLookAt()这样的函数;
若是GL_TEXTURE,就是对纹理相关进行操作
顺便说下,OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。

切换当前矩阵.
如.要使用透视(3D).那么先要设置透视投影
glMatrixMode(GL_PROJECTION); //切换到投影矩阵.
//...设置透视投影
设置完成后开始画图,需要切换到 模型视图矩阵 才能正确画图.
glMatrixMode(GL_MODELVIEW);
// 画一个物体A (看起来是3D的),
// 如这时候需画一个 2D效果 的 物体A,那么又需要透视投影

glMatrixMode(GL_PROJECTION); //切换到投影矩阵..
// ..设置正交投影
//..设置完成,切换回模型视图矩阵.....
glMatrixMode(GL_MODELVIEW);
// 再画一个物体A (看起来是2D的)


// 如从头到尾都是画3D/2D, 只需初始化时设置一次.
// 如果有交替,那么就需要glMatrixMode() 切换
// 因这样设置很烦人,所以又有glPushMatrix() 保存当前矩阵

gluPerspective

gluPerspective这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小,一般而言,其中的参数aspect应该与窗口的宽高比大小相同。比如说,aspect=2.0表示在观察者的角度中物体的宽度是高度的两倍,在视口中宽度也是高度的两倍,这样显示出的物体才不会被扭曲。

glViewport

glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

转载于:https://www.cnblogs.com/because/p/7757903.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强大的Canvas开源库Fabric.js简介与开发指南

什么是Fabric.js?Fabric.js 是一个强大且简单的Javascript HTML5 Canvas库。官网地址:http://fabricjs.com/为什么要使用Fabric.js?Canvas提供一个好的画布能力, 但是Api不够友好。绘制简单图形其实还可以, 不过做一些复杂的图形绘制, 编写一…

模拟qq斗地主-准备发牌抢地主都是农民下一轮准备

为什么要搞这样一个项目?? 1,满足自己的java网络多线程编程的欲望!因为之前一直都是搞web开发,服务器和客户端数据交流人家web服务器早就给你搞好了,比如tomcat,jetty...等等,其实之前脑子里就有…

rube3xxx_Rube GoldbergSpring整合

rube3xxxSpring Integration为集成系统所涉及的一些复杂性提供了非常好的抽象-Spring Integration从Integration的角度完美地满足了Facade的定义-简化了对复杂基础系统的访问。 为了说明这一点,请考虑一个简单的系统,该系统仅接收一条消息,然…

纯CSS实现React Logo图形,内含详细解析

以上是将要实现的效果&#xff0c;Javascript框架React的Logo图形&#xff0c;首先我们来拆解下&#xff0c;它包括三个交叉的椭圆和中间一个圆点&#xff0c;所以我们Html元素可以用以下代码实现&#xff1a;<div class"main"><div class"ellipse ell…

二次优化大招(由泰勒公式推出最值条件)

经过前两篇的铺垫&#xff0c;这一篇迎来了高潮。先说一句&#xff1a;特征值大法好&#xff01; 在开始正文之前&#xff0c;先看以下简单的推导 有了这些&#xff0c;理解下面的泰勒公式推出最值条件就容易了 转载于:https://www.cnblogs.com/Mr-ZeroW/p/7764916.html

前端自动化测试浅析

前言&#xff1a;测试简介前端常见的问题&#xff1a;修改某个模块功能时&#xff0c;其它模块也受影响&#xff0c;很难快速定位bug多人开发代码越来越难以维护不方便迭代&#xff0c;代码无法重构代码质量差增加自动化测试后&#xff1a;我们为核心功能编写测试后可以保障项目…

使用SpringData出现java.lang.AbstractMethodError

最近学习一下SpringData&#xff0c;在添加SpringData支持的时候&#xff0c;出现了这样的问题&#xff1a; SpringData需要的jar有:spring-data-jpa.jar spring-data-commons.jar slf4j-api.jar 没有添加slf4j也会出现一个异常&#xff0c;不过那个异常说的非常明确&#xf…

2021这份电子书单请收好(品类齐全)!

2021年已经快过去一个月了&#xff0c;今年的读书计划有没有安排上&#xff0c;这里有份长长的书单&#xff0c;多年的积累&#xff0c;品类齐全&#xff0c;赶快从中挑几本加入今年的读书计划里。•《货币战争2&#xff1a;金权天下》 - 宋鸿兵.mobi•《圣经》中英对照豪华版 …

在Kotlin中使用libGDX

最近&#xff0c;我一直在阅读有关不同语言的信息&#xff0c;以及它们可以为已经拥挤的软件开发人员带来什么&#xff0c;而一种语言对我来说很突出&#xff1a;Kotlin。 &#xff08; https://kotlinlang.org/ &#xff09; 这是一种相对较新的语言&#xff08;成立于2011年…

【重学JS系列】slice用法大合集

让我们回顾下slice的日常用法slice 工作原理在深入研究一些更高级的用法之前&#xff0c;让我们看一下slice方法的基础知识。如MDN文档&#xff0c;slice 是数组上的一个方法&#xff0c;它最多有两个参数:arr.slice([begin[, end]])begin从该索引处开始提取原数组中的元素,如果…

【Github开源】一站搞定各种开发文档

开发者的苦恼&#xff1a;经常要在多个API文档中切换&#xff0c;浏览器书签栏收藏各种语言相关的接口说明文档。无意中在Github上发现DevDocs[1]这个开源项目&#xff0c;它是一个把所有开发相关的文档以web的形式做了一个综合的网站&#xff0c;并提供搜索&#xff0c;离线访…

javafx 表单_JavaFX 2:创建登录表单

javafx 表单在本教程中&#xff0c;我将使用JavaFX 2和CSS设计一个外观漂亮的Login Form 。 它是经典的登录表单&#xff0c;带有用户名和密码以及登录按钮。 为了遵循本教程&#xff0c;我强烈建议您查看以下这些教程&#xff1a; Eclipse IDE中的JavaFX 2入门 JavaFX 2&…

【详细教程】教你如何使用Node + Express + Typescript开发一个应用

Express是nodejs开发中普遍使用的一个框架&#xff0c;下面要谈的是如何结合Typescript去使用。 目标 我们的目标是能够使用Typescript快速开发我们的应用程序&#xff0c;而最终我们的应用程序却是编译为原始的JavaScript代码&#xff0c;以由nodejs运行时来执行。 初始化设置…

结构型模式 适配器模式

结构型模式 适配器模式 适用于&#xff1a; 是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 /*** 结构型模式 适配器模式* Adapter模式也叫适配器模式&#xff0c;是构造型模式之一&#xff0c;通过Adapter模式可…

乐哥学AI_Python(二):Numpy索引,切片,常用函数

Numpy的索引和切片 ndarray对象的内容可以通过索引和切片查看和修改。 索引&#xff1a;ndarray对象中的元素索引基于0开始 切片&#xff1a;对数组里某个片段区域的描述 数组的切片也可以理解为原始数组的局部视图&#xff0c;都是指向内存中的原始数组&#xff0c;所以不同于…

仅使用HTML和CSS实现的标签云效果

标签云的效果在博客和网站上不难见到&#xff0c;它其实就是带有超链接的某些关键字&#xff0c;为了达到强调主题的作用。通常出现概率比较大或者受欢迎的标签文字显示比较大&#xff0c;相反的就显示的小。来源于TagCrowd.com我们就不去深入研究标签云带来的效率上的提升和可…

捍卫Java

因此&#xff0c;我们不时发布了一本电子书&#xff0c;名为“十大Java性能问题” 。 毫无例外&#xff0c;一些人回答说“问题是您正在使用Java”。 显然&#xff0c;Java一直在受到批评&#xff0c;人们已经预测了它的消亡已有一段时间了。 当然&#xff0c;它不像Python&am…

vuex的使用二

1.先看项目的目录结构 2.在main.js里需要引入store这个文件并挂在实例上 import store from ./store/store ............new Vue({el: #app,router,store,template: <App/>,components: { App } }) 3.store.js里引入action.js和mutation.js文件 // 状态管理器 import Vue…

收到短信验证码自动填充到表单,竟然是这么玩的

苹果系统上的App和网站可以实现来自短信的验证码自动填充表单的功能&#xff0c;通常你是怎么实现这个功能的&#xff1f;有一种实现方式可能你不知道&#xff0c;单纯的HTML标签就能实现&#xff0c;不需要任何的Javascript代码该特性第一次发布是在 WWDC 2018[1]&#xff1a;…

web实现数据交互的几种常见方式

前言在当今社会&#xff0c;作为一名前端程序猿&#xff0c;并不是一昧的去制作静态页面就可以满足滴&#xff1b;你说你会制作网页&#xff0c;好吧&#xff0c;只能说你算是一个前端程序猿。但这是你作为一个程序猿最基本的能力&#xff0c;并不会为你进行加分&#xff1b; 我…