OpenGL3.3_C++_Windows(34)

news2024/9/25 1:24:21

demo

1
Fresnel-Schlick

PBR直接光源

  • 顾名思义:直接光源指有光源直接照射到点p 的辐射强度,由于一个光源只会有一个光线wi影响点p,所以和之前的计算没什么差异
  • 对于影响p的光源,并不需要积分计算半球形辐照度,遍历每个影响点p的光源计算辐射率(单一方向的影响),再将所有光源求和计算,
  • 最后考虑BRDF来缩放辐射率
  • 但这次需要按照PBR的方程,计算出基于物理模型的渲染图元
  • F0,被称为0°入射角的基础反射率,会随着与平面法线的夹角增加而增大

球体(顶点数据):

        //4096个顶点,绘制整个球体,按照经度半圈半圈,自上到下绘制,最后所有经度线都离散的绘制了
        for (unsigned int x = 0; x <= X_SEGMENTS; ++x)//纬度有64个顶点
        {
            for (unsigned int y = 0; y <= Y_SEGMENTS; ++y)//每个经度半圈有64个顶点
            {
                float xSegment = (float)x / (float)X_SEGMENTS;//分隔绕y轴的角度
                float ySegment = (float)y / (float)Y_SEGMENTS;//分隔绕x或z的角度,

                float xPos = std::cos(xSegment * 2.0f * PI) * std::sin(ySegment * PI);//弧度制
                float yPos = std::cos(ySegment * PI);//
                float zPos = std::sin(xSegment * 2.0f * PI) * std::sin(ySegment * PI);//

                s_SphereData.positions.push_back(glm::vec3(xPos, yPos, zPos));
                s_SphereData.uv.push_back(glm::vec2(xSegment, ySegment));
                s_SphereData.normals.push_back(glm::vec3(xPos, yPos, zPos));
            }
        }
        //上面仅仅是绘制了平面的4个顶点,实则需要6个顶点,
        for (int i = 0; i < Y_SEGMENTS; i++)//第0个顶点和第65个顶点对齐,相邻的维度,绘制3角形
        {
            for (int j = 0; j < X_SEGMENTS; j++)
            {

                 s_SphereData.indices.push_back(i * (X_SEGMENTS + 1) + j);
                 s_SphereData.indices.push_back((i + 1) * (X_SEGMENTS + 1) + j);
                 s_SphereData.indices.push_back((i + 1) * (X_SEGMENTS + 1) + j + 1);
                 
                 s_SphereData.indices.push_back(i * (X_SEGMENTS + 1) + j);
                 s_SphereData.indices.push_back((i + 1) * (X_SEGMENTS + 1) + j + 1);
                 s_SphereData.indices.push_back(i * (X_SEGMENTS + 1) + j + 1);
            }
        }

        s_SphereData.indexCount = static_cast<unsigned int>(s_SphereData.indices.size());
        //data将每个顶点的三个数据和为一个-》最终每个顶点的数据

        for (unsigned int i = 0; i < s_SphereData.positions.size(); ++i)
        {
             s_SphereData.data.push_back( s_SphereData.positions[i].x);
             s_SphereData.data.push_back( s_SphereData.positions[i].y);
             s_SphereData.data.push_back( s_SphereData.positions[i].z);
            if (s_SphereData.normals.size() > 0)
            {
                 s_SphereData.data.push_back( s_SphereData.normals[i].x);
                 s_SphereData.data.push_back( s_SphereData.normals[i].y);
                 s_SphereData.data.push_back( s_SphereData.normals[i].z);
            }
            if (s_SphereData.uv.size() > 0)
            {
                 s_SphereData.data.push_back( s_SphereData.uv[i].x);
                 s_SphereData.data.push_back( s_SphereData.uv[i].y);
            }
        }
索引index

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

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

相关文章

71 为对象定义类

① 类定义对象的特征和行为。 ② 一个 Python 类使用变量存储数据域&#xff0c;定义方法来完成动作。类就是一份契约&#xff08;有时也称之为模板或蓝本&#xff09;&#xff0c;它定义对象的数据域和方法。 ③ 对象是类的一个实例&#xff0c;可以创建一个类的多个对象。创建…

【Linux】yum软件包管理器(使用、生态、yum源切换)

目录 1.yum-软件包管理器&#x1f638;1.1yum使用方法1.2什么是yum&#xff1f;&#x1f638;1.3yum的周边生态1.4yum源切换1.4.1 查看系统本身yum源1.4.2 软件源1.4.3yum源配置 1.yum-软件包管理器 以下操作需要联网的情况下进行 &#x1f638;1.1yum使用方法 安装软件时由于需…

蜜罐——HFish使用

蜜罐——HFish的使用 一、蜜罐简介 1.1 蜜罐技术 蜜罐技术本质上是一种对攻击方进行欺骗的技术&#xff0c;通过布置一些作为诱饵的主机、网络服务或者信息&#xff0c;诱使攻击方对它们实施攻击&#xff0c;从而可以对攻击行为进行捕获和分析&#xff0c;了解攻击方所使用的…

分类预测|基于灰狼优化最小二乘支持向量机结合Adaboost集成的数据分类预测Matlab程序GWO-LSSVM-Adaboost

分类预测|基于灰狼优化最小二乘支持向量机结合Adaboost集成的数据分类预测Matlab程序GWO-LSSVM-Adaboost 文章目录 前言分类预测|基于灰狼优化最小二乘支持向量机结合Adaboost集成的数据分类预测Matlab程序GWO-LSSVM-Adaboost 一、GWO-LSSVM-Adaboost模型1. Grey Wolf Optimize…

c++基本数据类型变量的最大值,最小值和内存空间

基本数据类型有哪些&#xff1f; 在C中&#xff0c;基本数据类型主要包括以下几种&#xff1a; 整型 (Integral Types)&#xff1a; int&#xff1a;通常为32位&#xff0c;有 signed 和 unsigned 两种版本&#xff0c;如 int, unsigned int.short 或 signed short / unsigned …

sqlserver怎么做全文搜索

在SQL Server Management Studio中管理界面&#xff0c;创建表全文索引&#xff0c; 选中表&#xff0c;右键–>全文检索–>定义全文检索—>SQLServer全文检索向导 &#xff0c;然后按提示下一步&#xff0c;创建要创建索引的列&#xff0c;就是搜索数据列 创建完了使…

抗噪声最大最小值筛选

问题 在如下图所示包含一些噪声的数据队列中如何可以把绿色的&#xff08;有一个点图片上忘记标了&#xff09;几个主观认为的最大值最小值筛选出来 思路 简述&#xff1a;定义一个噪声阈值&#xff0c;如果当前比上一次超过噪声阈值才进行更新&#xff0c;如果当前比上一次的…

双11订单实时大屏 - Flink实战洞见

每年的双11购物狂欢节不仅是消费者的狂欢&#xff0c;更是技术人员展示实力的舞台。在这个全民关注的时刻&#xff0c;如何实现实时、准确、鲜活的订单数据展示&#xff0c;成为了各大电商平台技术竞技的焦点。本文将深入探讨如何利用Apache Flink构建一个面向双11的订单实时大…

软件设计原则 KISS、YAGNI、DRY

软件设计原则 KISS、YAGNI、DRY flyfish 设计模式、设计原则与编程惯用法综述 图片来源SpaceX 简约至极的猛禽3(Raptor 3)火箭发动机 一、KISS (Keep It Simple, Stupid!, 保持简单) KISS原则&#xff0c;即“Keep it simple, stupid!”&#xff08;保持简单&#xff0c;傻…

鸿蒙(API 12 Beta3版)【AVCodec Kit简介】 音视频编码服务

AVCodec kit&#xff08;Audio & Video Codec Kit&#xff0c;音视频编解码&#xff0c;封装解封装原子能力&#xff09;是媒体系统中的音视频的编解码、媒体文件的解析、封装、媒体数据输入等原子能力。 能力范围 媒体数据输入&#xff1a;媒体应用可以传入文件fd、或者…

力扣面试150 反转链表 II 三指针

Problem: 92. 反转链表 II &#x1f468;‍&#x1f3eb; 参考题解 特殊情况 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val…

【区块链+医疗健康】健康管理平台 | FISCO BCOS应用案例

如今&#xff0c;医疗数据的共通共享依然存在一些难点&#xff1a; 1. 数据碎片化&#xff0c;分散在各个机构和公司&#xff0c;难以整合和共享。 2. 数据不完整&#xff0c;缺乏全面的患者信息&#xff0c;导致决策质量下降。数据的可扩展性不足&#xff0c;难以长期跟踪患…

“Mutation Observer:让DOM变化尽在掌握

Mutation Observer&#xff08;变动观察者&#xff09; 定义 Mutation Observer是一种JavaScript API&#xff0c;用于异步监测DOM树的变动&#xff0c;包括元素的添加、删除、属性变化等。当DOM发生变动时&#xff0c;它可以触发回调函数&#xff0c;允许你对变动作出响应。 …

Ubuntu14.04安装网卡驱动

1&#xff0c;lspci 查看网卡型号 2,到官网下载解压&#xff0c;进入文件目录 3,新装的服务器会报错&#xff0c;提示我们没有安装make&#xff0c;下载缺少的gcc和make依赖&#xff0c;记得先执执行一下系统更新 sudo apt update && sudo apt upgrade -y sudo apt …

【css】使用CSS绘制奥运五环--巴黎奥运

使用CSS绘制奥运五环 在2024年巴黎奥运会期间&#xff0c;本文来使用 CSS 来画一个奥运五环。奥运五环由五个相互交叠的圆环组成&#xff0c;分别代表五大洲。 奥运五环是相互连接的&#xff0c;因此在视觉上会产生重叠效果&#xff0c;这也是实现五环最有挑战性的部分 HTML结…

Linux -软件包管理 下载与安装方式

1. wget下载 先下载再安装 wget命令是Linux系统用于从Web下载文件的命令行工具&#xff0c;支持 HTTP、HTTPS及FTP协议下载文件 当然现在更多支持用yum工具的&#xff0c;不过有的时候一些镜像站点不再维护一些旧版本的软件时&#xff0c;这时候就可以用wget可以先获取&…

Unity补完计划 之 SpriteEditer Multiple

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…

CSP-J 复赛 模拟题7 and 解析

1.超级素数&#xff1a; 题目描述 素数&#xff0c;又称质数&#xff0c;是指除 11 和其自身之外&#xff0c;没有其他约数的正整数。例如 2,3,5,132,3,5,13 都是素数&#xff0c;而 4,9,12,184,9,12,18 则不是。特别地&#xff0c;规定 11 不是素数&#xff08;因此自然数的…

【C++进阶学习】第十二弹——C++ 异常处理:深入解析与实践应用

前言&#xff1a; 在C编程语言中&#xff0c;异常处理是一种重要的机制&#xff0c;它允许程序员在运行时捕获和处理错误或异常情况。本文将详细介绍C异常处理的相关知识点&#xff0c;包括异常的定义、抛出与捕获、异常处理的原则、以及在实际编程中的应用。 目录 1. 异常处理…

算法力扣刷题记录 六十九【动态规划基础及509. 斐波那契数】

前言 调整一下做题顺序&#xff0c;多个章节同步进行&#xff0c;穿插练习。可以在各章节的专栏中找同一类。 记录 六十九【动态规划基础】。 一、动态规划理论基础学习 参考学习链接 二、509. 斐波那契数 2.1 题目阅读 斐波那契数 &#xff08;通常用 F(n) 表示&#x…