OpenGL--光源

2023-11-14

OpenGL至少支持8个光源。要查询OpenGL实现支持的光源数,可调用glGetIntegerv()。

要启用或者禁用光源,分别使用glEnable(GL_LIGHTi)和glDisable(GL_LIGHTi),其中i的可能取值为0到GL_MAX_LIGHTS-1。

创建光源

光源具有颜色、位置和方向等属性。

定义光源的颜色和位置

	GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 }; // 环境光
	GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; //漫射光
    GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
	GLfloat position[] = { 3.0, 3.0, 2.0, 0.0 };

	glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
    glLightfv(GL_LIGHTO, GL_SPECULAR, specular);
	glLightfv(GL_LIGHT0, GL_POSITION, position);

用数组定义参数,并且反复通过 glLightfv()函数设置不同的参数。

GL_AMBIENT 光的环境强度 (0,0,0,1)

GL_DIFFUSE

光的散射强度 light0的默认值是白色,其他是黑色 (1,1,1,1)或(0,0,0,1)
GL_SPECULAR 光的镜面强度 light0的默认值是白色,其他是黑色 (1,1,1,1)或(0,0,0,1)
GL_POSITION 表示光源位置的坐标(x,y,z,w) (0,0,1,0)

GL_AMBIENT参数表示一个特定的光源在场景中所添加的环境光的RGBA强度。

GL_DIFFUSE参数可能最接近于我们想要光的颜色。它定义了特定光源在场景中所添加的散射光的RGBA强度。

GL_SPECULAR参数影响物体上镜面亮点的颜色。如果要创建逼真的效果GL_SPECULAR和GL_DIFFUSE参数设置的值应该相同。

位置和衰减


	GLfloat position[] = { 1.0, 1.0, 1.0, 0.0 };

	glLightfv(GL_LIGHT0, GL_POSITION, position);

GL_POSITION包含四个参数(x,y,z,w)。如果最后一个(w)为0,表示对应光源是方向光源,(x,y,z)描述了它的方向。在默认情况下(0,0,1,0)定义了一个指向z轴负方向的方向性光源。

使用glColor()修改材质参数

当光照被启用opengl使用glMaterialfv()设置当前材质的颜色;如果光照被禁用,则使用

glColor3f()设置当前主颜色。

glMaterialfv(face,pname,TYPE*param)

OpenGL分别为正面和背面图元存储一组材质参数,face指定函数调用将影响那组参数。除非使用双面光照,否则将face设置为GL_FRONT 。pname的合法取值包括GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR

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

OpenGL--光源 的相关文章

  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 使用默认行为将模型绑定到接口

    我正在尝试将控制器操作绑定到接口 但仍保持默认的绑定行为 public class CoolClass ISomeInterface public DoSomething get set ISomeInterface public clas
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 如果我重新分配并且新大小为 0,会发生什么情况。这与释放等效吗?

    给出以下代码 int a NULL a calloc 1 sizeof a printf d n a a realloc a 0 printf d n a return 0 它返回 4078904 0 这个 realloc 相当于 free
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • 云或烟雾的粒子系统

    我正在尝试使用 OpenGL 和 CUDA 制作一个简单的用于云和烟雾模拟的粒子系统 如何使粒子系统中的粒子表现得像真正的云或烟雾在低湍流风中的表现 我现在遇到的一些问题是 颗粒聚集成一个大球 粒子扩散到无限远 粒子突然弹射离开 我已经完成
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • window10 几款好用的屏幕录制制作动图工具

    有时候静态图片不能够展示交互效果 需要录制一下视频 所以就去网上找了几个好用的屏幕录制软件 一 GifCam GifCam录制视频很方便 打开软件 将窗口拖动到需要录制的地方 点击 Rec 就可以开始录制 在录制的过程中 可以随意的改变窗口
  • SpringBoot之RESTful 接口的实现以及Postman的使用

    SpringBoot实现Restful以及Postman的使用 1 HTTP相关知识 1 1 HTTP 工作原理 1 2 HTTP请求过程 1 3 HTTP请求的方法 2 Restful接口的使用 2 1 Restful风格API 2 2
  • c++随笔-删除文件

    c 删除文件非常简单 只需remove 文件名 即可 需要包含 include
  • java servlet json_Java HttpServlet Json 数据交互

    Android 对其访问进行封装 服务端 packagecom server importjava io PrintWriter importjavax servlet annotation WebServlet importjavax s
  • Rabbit的工作(2)【牛客练习赛36_C + dp背包】

    题目链接 那么的巧合 竟是这题的原题 就是 我们既然一定要选取K个任务 就先去取K个任务 然后逐一加上需要的额外天数即可 include
  • 上采样和下采样层 nn.pixelshuffle and nn.pixelunshuffle

    前言 理论部分后面有空的时候补一下 这里先放代码和简要说明 Downsample 这里先对channel维度降低为原来 1 2 1 2 1 2 然后再对channel维度提升 r
  • 高级JAVA开发 MQ部分

    高级JAVA开发 MQ部分 MQ MQ的作用 为什么要用MQ 常见的MQ的优缺点 使用MQ带来的问题以及处理办法 MQ带来的问题列举 消息重复消费 幂等 问题 消息丢失问题 消息顺序性问题 消息过期丢失 大量积压等问题 如何保证MQ高可用性
  • 斯坦福小镇升级版——AI-Town搭建指南

    导语 8月份斯坦福AI小镇开源之后 引起了 AIGC 领域的强烈反响 但8月份还有另一个同样非常有意义的 AI Agent 的项目开源 a16z主导的 AI Town 本篇文章主要讲解如何搭建该项目 如有英文基础或者对这套技术栈熟悉 可直接
  • 用list列表以行方式创建DataFrame

    DataFrame默认会将一维list作为列处理 需要将一维list转为二维才能实现想要的效果 A 1 2 3 4 5 直接pd DataFrame a 得到的是一个1列5行的df 正确方式是 pd DataFrame A 原文链接 htt
  • 个人博客系统(附源码)

    前面学习了那么多的理论知识 一直比较枯燥 今天就做个小项目 来检验一下前面的学习成果吧 有需要源代码的小伙伴可以来看看 个人博客系统 这个小项目主要是模仿CSDN做的 但是功能还是比较少的 只是写出了一些主要的功能 下面就一起来看看吧 目录
  • Merge AVHD with VHD

    AVHD is a file created when you perform snapshot Once you delete the snapshot and shutdown the Virtual Machine automatic
  • Protobuf类型

    1 基本类型 这些是原始的基本数据类型 用于存储数值和字符串 包括 double 双精度浮点数 float 单精度浮点数 int32 32 位有符号整数 int64 64 位有符号整数 uint32 32 位无符号整数 uint64 64
  • centos7升级gcc10.1.0,gdb9.2

    https www gnu org prep ftp html 先找一个亚洲的镜像站点 选一个站点 打开gcc或者gdb目录 选择自己想要安装的版本 我这里选择的gcc 10 1 0和gdb 9 2 http mirrors nju edu
  • smart bi 学习

    Smartbi 安装 部署 测试 官方文档 数据连接 关系数据库 选择数据连接选关系数据库 配置 连电脑本地的数据库 用户名 密码 root root 端口 3306 ip localhost mysql 数据库选的lyj 1 数据库管理
  • [React]为什么写React组件的时候,需要先引入React?

    React相信各位伙伴都不陌生 那么你的React技术还好吗 来跟我一起重学一遍React 看看有什么知识是你没有记住的呢 一起来查漏补缺下 目录 为什么有的React页面及组件在写的时候需要引入 React 为什么会出现这个问题 Reac
  • Android多屏幕适配-平板

    http blog csdn net qq 27570955 article details 53207600 1 常用单位及其关系 px 像素 inch 英寸 pt 1 72 英寸 dpi 一英寸长的直线上的像素点的数量 即像素密度 不同
  • 软件测试人员分工详情

    最近看了点敏捷测试的东西 看得比较模糊 一方面是因为没有见真实的环境与流程 也许它跟本就没有固定的模式与流程 它就像告诉人们要 勇敢 努力 有的人在勇敢的面对生活 有些人在勇敢的挑战自我 有些人在勇敢的面对失败与挫折 好吧 他们都实现了 勇
  • Vue报错之$nextTick

    今天在生产上面出现了一个问题 我们作为一个整个的项目 我们制作的报账系统是其中一个的子系统 但是现在出现了一个问题 因为我们是共同使用一个前段 而且我们是最先上线的 就导致其他的系统在模仿我们的代码情况 然后他们修改了我们的代码中的公共部分
  • ESP32-土壤湿度传感器

    ESP32 土壤湿度传感器使用 土壤湿度传感器介绍 一 连接传感器引脚 二 使用步骤 1 创建代码 2 保存运行 总结 土壤湿度传感器介绍 提示 土壤湿度传感器 有很多种 我这里用的是电阻式土壤湿度传感器 其原理是 把传感器插入土壤中 不同
  • OpenGL--光源

    OpenGL至少支持8个光源 要查询OpenGL实现支持的光源数 可调用glGetIntegerv 要启用或者禁用光源 分别使用glEnable GL LIGHTi 和glDisable GL LIGHTi 其中i的可能取值为0到GL MA