OpenGL 入门教程(八)

2023-11-02

OpenGL 入门教程(八)


OpenGL中使用RGBA色彩体系,RGB为红绿蓝三原色,A为α值,该值代表色彩融合时所占的比例。颜色是顶点的重要属性之一,没有色彩的世界是毫无生气的。

使用glColor*(R,G,B,A);设定当前颜色,此后定义所有的顶点都将是这个颜色的,直到再次改变当前颜色。该命令有两种常用形式glColor*f和glColor*ub,后者可以直接使用GetRValue(pixel)取得的颜色分量作为参数。下面左边的代码就可以生成右边漂亮的三角形:


glBegin(GL_TRIANGLES);

             glColor3f(1.0,0.0,0.0);
             glVertex3f(-1.0,0.0,0.0);

             glColor3f(0.0,1.0,0.0);
             glVertex3f(0.0,1.0,0.0);

             glColor3f(0.0,0.0,1.0);
             glVertex3f(1.0,0.0,0.0);

             glEnd();
 

 可以看出,相邻顶点之间的部份也会有颜色,实际上OpenGL会在顶点之间进行插值分割,最终计算出对应光栅每一点的颜色,这个计算结果就是最终显示在屏幕上的图像。

也许上边的代码和文字暗示你给顶点指定的颜色就是屏幕图像上显示的颜色,其实最终的颜色取决于多个因素:顶点材质、法线方向、光照条件。不同颜色的光从不同角度照射在顶点上,顶点的颜色也会发生变化。上面的图是在白色光垂直照射条件下得到的(这也是默认设定)。

我们也可以不简单的指定顶点颜色,而是详细的说明该顶点产生的环境光、漫反射光、镜面反射光的颜色。OpenGL使用一种简易方法计算出面的图像:根据法向和光源位置的关系将以上几种光的颜色结合灯光对应成份颜色分别指定平面的各部份。从一个顶点产生的反射光不会再照射到其它顶点上,它对其它部份的影响直接在环境光中定义。要想取得更逼真的图像,可以使用光线追踪算法,该方法沿着每一条光线的轨迹,计算出它对所有顶点的影响,将所有光线的效果合并就是最终的图像,由于反射光的照明效果也是精确计算出来的,所以图像逼真。但是OpenGL并不直接支持该方法,需要自己编写计算例程,感兴趣的话去看看光线追踪的书好了。

用glMaterial*指定当前材质,第一个参数说明是给面的哪一侧指定材质(前或者后,详见法向部份说明),第二个参数指定要修改的分量,最后部份参数是相应的值。


GLfloat ambient[] ={0.8,0.8,0.8,1.0};//环境光
GLfloat diffuse[] ={0.8,0.0,0.8,1.0};//漫反射特性
GLfloat specular[] ={1.0,0.0,1.0,1.0};//镜面反射光色
GLfloat shininess[] ={50.0}; //镜面反射的光亮度
glMaterialfv(GL_FRONT,GL_AMBIENT,ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,specular);
glMaterialfv(GL_FRONT,GL_SHININESS,shininess);
gluSphere(obj,0.1,10,10);//用10X10个面绘制半径0.1的球面 


OpenGL还支持自动双面模式,这种模式下定义的每个面都将生成两个面,位置重合但法向相反,这可以简化对背面和物体内部的描述。该模式默认为关闭。
开/关命令是:
void glLightModel* GL_LIGHT_MODEL_TWO_SIDE,0/1);

打开颜色材质可以简化材质设定,在颜色材质打开时,可以用glColor直接给定顶点材质的颜色,设定材质的哪部分可用glColorMaterial(face,mode);命令设定。而不用象上面那样写一串罗嗦的代码。但是由于不能对材质属性做细节控制,只适用于一些特定的场合。命令是:glEnable(GL_COLOR_MATERIAL);默认值为Disabled。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 入门教程(八) 的相关文章

  • cocos2d-x-2.2.4 (四) 将MyGame在Android上跑起来

    继续上一篇 我接着在MyGame工程干活 这次要将MyGame运行在Android设备上 要将cocos2dx的项目在Android上跑起来需要NDK和eclipse NDK用来编译cocos2dx的cpp文件 将其打包成动态库文件 例如l
  • Cocos2dx隐藏iOS7状态栏】通过添加Plist Key隐藏iOS7状态栏

    本站文章均为李华明Himi原创 转载务必在明显处注明 作者新浪微博 李华明Himi 转载自 黑米GameDev街区 原文链接 http www himigame com e9 9a 8f e7 ac 94 1481 html 点击订阅 本博
  • OpenGL 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    OpenGL 理解GL TRIANGLE STRIP等绘制三角形序列的三种方式 2012 04 12 20 19 19389人阅读 评论 7 收藏 举报 GL TRIANGLE STRIP绘制三角形方式很多时候令人疑惑 在这里对其运作机理进
  • fvf采用另外一种方式渲染

    if FAILED hr getActiveD3D9Device gt SetVertexDeclaration d3ddecl gt getD3DVertexDeclaration getGlobalInstanceVertexBuffe
  • Android studio的cMake编译生成.so库并调用

    第一步 添加工具 在SDK Tools中勾选安装CMake LLDB NDK 其中的LLDB是调试本地代码的工具 可以调试C 代码 第二步 创建一个最简单的官方demo File gt New gt NewProject 选中最下方的Inc
  • pvr 与 png 的内存占用

    原文链接 http blog sina com cn s blog 6fbe210701015j7z html Zwoptex 生成的 spritesheet 除了可以导出 png 格式的图片外还有 pvr 格式 pvr 格式是 iOS 的
  • cocos2d-x学习笔记(持续更新)

    接受触屏事件的优先级是值越小 响应触屏事件的优先级越高 Z值越大 越外面 粒子系统设计工具 Particle Designer软件 目前只支持MAC平台 导出 plist文件 地图设计工具 Tiles 目前有两个版本 一个是Java版本 另
  • cocos2dx:瓦片地图加载失败及黑线问题

    问题 1 瓦片地图加载失败 运行时 获取瓦片地图的层失败 调试发现 获取的层是一个 NULL 遇到这个问题 我第一反应是图片路径有问题 但经过检查发现 路径没有问题 然我就怀疑 是我的代码有问题 然而并没有 调试无果 我就把目光转向瓦片地图
  • 在 cocos2d 里面如何使用 Texture Packer 和像素格式来优化 spritesheet

    原文链接 http www cnblogs com andyque archive 2011 03 18 1988097 html 免责申明 必读 本博客提供的所有教程的翻译原稿均来自于互联网 仅供学习交流之用 切勿进行商业传播 同时 转载
  • CocosCreator 游戏小地图/地图雷达

    更多笔记和源码请关注 微信公众号 CocosCreator笔记 演示 ps 请注意左上角 技术摘要 大地图与小地图坐标转换 更新小地图中元素及视口位置 拖动小地图中视口位置 更新Main Camera位置 实现 01 小地图 图片 的宽高比
  • Box2D C++ 教程-查询 World

    声明 本文翻译自Box2D C tutorial World querying 仅供学习参考 查询World 通常你可能想知道在给定的场景中都有哪些实体 例如有一个炸弹爆炸了 周围的所有实物都会受到不同程度的破坏 那么在RTS 译者注 Re
  • 序列化 CDT 项目设置时遇到了

    当我构建项目时 我收到此错误 Serializing CDT Project settings has encountered a problem Null Pointer Exception 我正在使用最新的 eclipse 并尝试为 A
  • COCOS2D-X:比例精灵

    我想按原始图像的高度设置精灵的比例 然后该精灵的宽度将遵循该图像的原始比例 我怎样才能做到这一点 感谢您的所有帮助 CCSprite有一个成员函数 virtual void setScale float scale 参考 setScale
  • Cocos 2d-x 中带有贝塞尔曲线的圆角矩形

    是否可以使用 DrawNode 对象绘制一个圆角矩形 我认为使用贝塞尔曲线是可能的 但我做了一些尝试 但我认为我无法处理它 查看 API 我只发现这两个函数 绘制四边形贝塞尔曲线 const Vec2 origin const Vec2 c
  • 检查动画是否在 cocos2d-x 中运行

    我目前正在学习cocos2D x并正在做一些精灵动画 我的目标是 当单击按钮时 对象会向左移动并带有一些动画 现在 如果您快速单击多次 动画就会立即发生 看起来熊正在希望而不是行走 解决方案看起来很简单 我应该检查动画是否已经在运行以及是否
  • 由于资源文件权限被拒绝,Cocos2D-x HelloCpp for Android 无法从 Windows 构建 apk

    我试图在 Android 上运行 cocos2dx HelloCpp 示例项目 从 Windows 7 64 位和 Cygwin 64 位构建 但是 每次我尝试构建和运行时 它都会抱怨资产中的 Marker Felt fnt 文件的权限被拒
  • cocos2dx 应用程序中出现“在导入路径中找不到带有标签‘CocosDenshion/android’的模块”错误

    我正在尝试编译在cocos2d x上开发的Android本机应用程序 当我尝试调试我的应用程序时 出现以下错误 Android NDK jni Android mk Cannot find module with tag CocosDens
  • Android 设备的后退和主页按钮按下事件 (cocos2d-x 3)

    我这样做是为了抓住Home and BackAndroid 设备上的按钮按下事件 被覆盖void Layer onKeyReleased EventKeyboard KeyCode keyCode Event event 像这样的函数 vo
  • cocos2d-x android 设置错误 - java.lang.NullPointerException

    我正在尝试设置适用于 Android 的 cocos2d x我跟着 我通过了终端的步骤 没有任何问题 setup py命令结果符合预期 我的问题是在我设置之后NDK ROOT in C C 构建 环境部分 我得到一些java lang Nu
  • Cocos2d-x:可以使用HTML(UIWebView)吗?

    我正在尝试cocos2d x现在我可以为 Android 构建 Javascript 示例并在浏览器中运行它们 现在我想创建自己的游戏 但由于有 HTML 背景 我宁愿使用 HTML 标签和 CSS 也不愿使用 Javascript 来设置

随机推荐

  • VS Code断点调式Cesium

    1 在VS Code中安装Debugger for Firefox插件 2 下载安Firefox Developer Edition 3 创建launch json 编辑并保存launch json Use IntelliSense to
  • Java学习笔记 01

    相关文章 Java学习笔记 02 快速之旅 Java环境配置及HelloWorld程序 Java学习笔记 03 基础语法总结 目录 一 解释型语言和编译型语言 编译型语言 解释型语言 Java是解释型语言 or 编译型语言 二 Java语言
  • 【Transformer架构】Transformers are RNNs (linear transformer)

    原始题目 Transformers are RNNs Fast Autoregressive Transformers with Linear Attention 中文翻译 Transformers 是RNNs 带线性Attention的快
  • C++ error: non-const lvalue reference to type

    今晚看交流群的消息 看到大家在讨论一个有意思的问题 int array 5 0 int const p array 编译通过 const int p array 编译失败 报错 error non const lvalue referenc
  • SpringBoot整合quartz(支持多个任务和job支持spring管理的对象)

    工作中经常遇到quartz的job注入的spring对象为null 原因是这样的 quartz每次执行一次job会将执行完成后的job销毁 下次执行的时候 重新new 这就导致job中的 Autowired注入的Spring对象为null
  • 前端如何获取文件后缀名

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前端如何获取文件后缀名 二 使用代码如下 1 引入库 总结 前端如何获取文件后缀名 二 使用代码如下 1 引入库 代码如下 示例 选择文件后返回 resultDat
  • 实现求欧拉回路算法(C++)

    一 算法介绍及实现过程 程序的输入为对应图的结点数和图中与各结点相连的点的编号 注 无向图中的多重边和自环需多次输入 有向图中的多重边需多次输入 程序的第一步是求出图的邻接矩阵 邻接矩阵反映了点与点之间的关系 通过输入各结点相连的点的编号
  • go的make用法

    make用法和参数用法 golang分配内存有一个make函数 该函数第一个数类型 第二个参数的分配的空间 第三个 参数时预留分配空间 前两个参数很好理解 但对第三个参数不是很理解 例如a make int 5 10 len a 输出结果为
  • Golang-语言源码级调试器 Delve

    前言 Go 目前的调试器有如下几种 GDB 最早期的调试工具 现在用的很少 LLDB macOS 系统推荐的标准调试工具 单 Go 的一些专有特性支持的比较少 Delve 专门为 Go 语言打造的调试工具 使用最为广泛 本篇简单说明如何使用
  • OC使用cocoapods导入swift库注意

    首先就是在 targets gt Build Setting gt Packaging 中设置 Defines Module为YES 然后创建swift文件时会生成 文件名 Bridging Header h 这样一个桥接文件 怎样使用co
  • 针对低分辨率或小目标的卷积-SPDConv

    针对低分辨率或小目标的卷积 SPDConv 摘要 引言 A New Building Block SPD Conv 附录 代码 摘要 卷积神经网络在许多计算机视觉任务中取得了巨大成功 然而 在图像低分辨率或目标较小任务上 他们的性能迅速下降
  • 数据分析统计题目

    提示 本文章数据和题目来源于互联网 如有雷同 请联系作者删除 文章目录 前言 二 题集 第一题 第二题 第三题 第四题 前言 公司内部招募数据分析团队 特出此题集 检测各位参与同学的学习态度和能力 二 题集 第一题 某地101例健康男子血清
  • 已解决 I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with on

    已解决WARNING tensorflow From
  • 规则引擎Drools使用 第一篇 规则引擎认知

    规则引擎有什么用呢 可以在那些实际场景使用呢 思考这样一个问题 申请信用卡 每个人去申请信用卡的时候 都会经过一遍核查 这个核查过程其实就可以当做是根据规则 去校验你的信息是否符合规则 只有符合规则的才可以申请信用卡 还记得以前自己写的那些
  • Elasticsearch的算法介绍

    1 算法介绍 relevance score算法 简单来说 就是计算出 一个索引中的文本 与搜索文本 他们之间的关联匹配程度 Elasticsearch使用的是 term frequency inverse document frequen
  • 深入了解JVM的底层原理

    引言 什么是JVM JVM在整个jdk java 运行环境 中处于最底层 负责与操作系统的交互 用来屏蔽操作系统环境 提供一个完整的Java运行环境 因此也就虚拟计算机 操作系统装入JVM是通过jdk中Java exe来完成 通过下面4步来
  • 蒙特卡洛模拟计算风险价值VAR之R语言实现

    一 解析VAR 当在分析方法中计算风险价值 VAR 时 我们需要假设金融工具的返回遵循一定的概率分布 最常用的是正态分布 这也是为什么我们通常称它为delta normal方法 要计算VAR 我们需要找到一个阈值 T 来确定显著性 如95
  • ApiSix 配置 jwt-auth认证

    有问题要学会阅读apisix官方文档 养成好习惯 点我开始学习 1 为签发 token 的 API 配置一个 Route 该路由将使用 public api 插件 在对应的服务器执行以下命令 我尝试通过面板来创建这个Route 发现创建的时
  • Fedora21 入门体验笔记

    以前都是由于对linux的好奇 所以把各种版本都装了个遍 但每次都会因为某些原因 eq 不能玩游戏 用 很麻烦而且不爽 没用几天然后又回到windows 而且最后什么都没有留下 这一次是想真正学习linux 顺便记下使用过程中遇到的一些问题
  • OpenGL 入门教程(八)

    OpenGL 入门教程 八 OpenGL中使用RGBA色彩体系 RGB为红绿蓝三原色 A为 值 该值代表色彩融合时所占的比例 颜色是顶点的重要属性之一 没有色彩的世界是毫无生气的 使用glColor R G B A 设定当前颜色 此后定义所