Games202作业0及优化部分

GAMES202实时渲染(3)-Screen Space Ray Tracing 屏幕空间光追,实现高效率的、大地形光照计算 阅读详情

完成部分:

  • 环境和框架搭建
  • bllin-phong光照模型

优化部分:

  • 从文件加载shader

遇到的问题:

  • 模型偶尔加载不出来
  • shader参数设置不正确

环境和框架搭建

根据文档搭建好环境后,运行后会执行默认材质,效果如下:

由于默认材质直接使用贴图颜色,没有执行任何光照计算,所以模型不会随光源位置发生任何改变。在此过程中会遇到模型偶尔加载不出来的问题,参见bug部分。

Bllin-Phong光照模型

1.添加shader

该部分可以直接以字符串形式加入到InternalShader.js中,也可以从文件中加载,参加优化部分

2.修改index.html,在material.js后面添加phongmaterial.js

<script src="src/materials/PhongMaterial.js" defer></script>

3.将loadOBJ.js中的材质定义部分(第40~56行)换成phongmaterial

let myMaterial = new PhongMaterial(mat.color.toArray(), colorMap, mat.specular.toArray(), renderer.lights[0].entity.mat.intensity);

4.增加PhongMaterial

class PhongMaterial extends Material {
    /**
     * Creates an instance of PhongMaterial.
     * @param {vec3f} color The material color
     * @param {Texture} colorMap The texture object of the material
     * @param {vec3f} specular The material specular coefficient
     * @param {float} intensity The light intensity
     * @memberof PhongMaterial
     */
    constructor(color, colorMap, specular, intensity) {
        let textureSample = 0;
        if (colorMap != null) {
            textureSample = 1;
            super({
                'uTextureSample': { type:'1i', value:textureSample },
                'uSampler': { type: 'texture', value: colorMap },
                'uKd': { type:'3fv', value:color },
                'uKs': { type:'3fv', value:specular },
                'uLightIntensity': { type: '1f', value: intensity }
                }, [], PhongVertexShader, PhongFragmentShader);
        } else {
            // console.log(color);
            super({
                'uTextureSample': { type:'1i', value:textureSample },
                'uKd': { type:'3fv', value:color },
                'uKs': { type:'3fv', value:specular },
                'uLightIntensity': { type:'1f', value:intensity }
                }, [], PhongVertexShader, PhongFragmentShader);
        }
    }
}

最终可以达到的效果如下:

 

从文件加载Shader

因为Shader需要在渲染之前完成加载和绑定,并且PhongShader本身并不大,故而使用同步实现。首先,在loadShader.js中增加以下函数用于同步读取Shader文件:

function loadShaderFromFile(filePath) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', filePath, false); // 使用同步请求
    xhr.send(null);
  
    if (xhr.status === 200) {
        return xhr.responseText;
    } else {
        console.error('无法加载着色器文件:', filePath);
        return null;
    }
}

其次,在PhongMaterial的构造函数中增加以下四行代码用于从文件中读取Shader:

const phongVertexPath = 'src/shaders/phongShader/vertex.glsl';
const phongFragmentPath = 'src/shaders/phongShader/fragment.glsl';
var PhongVertexShader = loadShaderFromFile(phongVertexPath);
var PhongFragmentShader = loadShaderFromFile(phongFragmentPath);

如果不出问题,效果与采用静态字符串形式的无二。

一些bug

1.模型加载不出来

有两个可能的原因,可以通过刷新几次进行甄别。

如果偶尔能显示,应该是材质加载的问题,在loadOBJ.js中,有这样一个语句materials.preload();这个语句会进行资源的异步加载,但随便将该materials进行了传参,此时materials可能还没加载完成,导致在渲染模型的时候无法正确应用材质。解决方法是在Index.html中加入以下代码声明材质的预加载:

<link rel="preload" href="/assets/mary/MC003_Kozakura_Mari.png" as="image" type="image/png" crossorigin/>

还有可能是shader不对,Material.js中可以发现如下语句:

this.#flatten_uniforms = ['uModelViewMatrix', 'uProjectionMatrix', 'uCameraPos', 'uLightPos'];

在给shader传参时,使用的是modelview矩阵,也就是把模型矩阵和视图矩阵的乘积传入,shader里也应该是如此。

2.shader参数设置不正确

在完成所有工作后,发现渲染出来的模型是灰色,这个问题很脑残,原因是在复制pdf中的PhongMaterial.js多一些空格,,,导致参数映射不正确。

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03 需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。 阅读详情

相关推荐

GAMES202homework:主要是学习闫老师的GAMES202高质量实时渲染完成的大作业

GAMES202homework 主要是学习闫老师的GAMES202高质量实时渲染完成的大作业 RenderDoc调试webgl: 用到了webgl所以需要webgl抓帧调试,但是当前shader的调试暂时不支持~ homework0 作业0主要是实现的Blinn-Phong 着色模型 ,最主要是的环境搭建测试熟悉202的框架等等; homework1 作业1主要是在Blinn-Phong 着色模型基础上实现阴影,通过shadow map实现硬阴影、Soft 阴影PCF算法过滤、软硬阴影PCSS;

GAMES202作业0-环境搭建过程&解决遇到的问题

展示了作业0框架搭建的过程,以及解决了一些搭建框架遇到的问题。

qq_41835314的博客 4716

GAMES202-HW-vulkano

GAMES202-HW-vulkano 该项目的目标是将的作业到Windows上的Rust和Vulkan平台。 IMGUI用于绘制UI控件。 跑步 遵循Windows。 该项目使用vulkano与Vulkan合作。 cargo run 。

GAMES 202 作业0 完成方案,潜在问题与代码解读:

介绍了GAMES202 作业0 的运行方案,代码解读,并列举了可能会出现的问题与解决方案

qq_57720257的博客 1250

games202:games202作业

游戏202 games202作业

GAMES101-现代计算机图形学学习笔记(作业02)

GAMES101-现代计算机图形学学习笔记(作业02) 1. 修改函数 rasterize_triangle(const Triangle& t) in rasterizer.cpp: 在此 处实现与作业 2 类似的插值算法,实现法向量、颜色、纹理颜色的插值。 2. 修改函数 get_projection_matrix() in main.cpp: 将你自己在之前的实验中 实现的投影矩阵填到此处,此时你可以运行./Rasterizer output.png normal 来观察法向量实现结果。 3. 修改函数 phong_fragment_shader() in main.cpp: 实现 Blinn-Phong 模型计算 Fragment Color. 4. 修改函数 texture_fragment_shader() in main.cpp: 在实现 Blinn-Phong 的基础上,将纹理颜色视为公式中的 kd,实现 Texture Shading Fragment Shader. 5. 修改函数 bump_fragment_shader() in main.cpp: 在实现 Blinn-Phong 的基础上,仔细阅读该函数中的注释,实现 Bump mapping. 6. 修改函数 displacement_fragment_shader() in main.cpp: 在实现 Bump mapping 的基础上,实现 displacement mapping. 7. 双线性纹理插值: 使用双线性插值进行纹理采样, 在 Texture 类中实现一个新方法 Vector3f getColorBilinear(float u, float v) 并 通过 fragment shader 调用它。为了使双线性插值的效果更加明显,你应该 考虑选择更小的纹理图。请同时提交纹理插值与双线性纹理插值的结果,并 进行比较。

games202 作业0

games202作业0

liveRTL的博客 402

JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发

海康威视SDK接入方案摘要 本文介绍了使用海康威视官方SDK开发物联网平台摄像头接入功能的完整方案。系统采用Java后端集成HCNetSDK控制摄像头,通过FFmpeg将RTSP流转为RTMP推送到SRS流媒体服务器,前端基于HTTP-FLV协议实现视频播放。文章详细说明了开发准备工作,包括SDK下载、SRS部署、FFmpeg安装等关键步骤,并提供了数据库表设计和接口定义。核心部分展示了如何集成海康SDK,包括提取必要代码、加载DLL文件、配置打包插件等具体实现细节,最终形成了一套支持实时预览、回放和下载的

2401_83057947的博客 2262

[GAMES202]作业1

本文系列为介绍games202中作业1的任务介绍,部分框架代码介绍以及示例答案代码。硬阴影基于PCF的软阴影,和基于PCSS的软阴影实现。本文主要介绍其中硬阴影的作业部分。

刘好念的博客 1323

Balser相机的硬件触发实战:从连线到信号处理

本文详细介绍了Balser相机硬件触发的实战应用,从硬件接线、信号定义到软件配置(Pylon Viewer及API)提供了完整指南。重点阐述了如何利用外部物理电信号实现微秒级精准触发,解决工业场景下的同步与延迟问题,并分享了信号调理、抗干扰等高级实战经验。

y9z0a1b的博客 337

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧)

本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。

weixin_28839549的博客 380

Games202作业1

Games202课程的作业一,内容是基于ShadowMap实现硬阴影和PCF、PCSS的软阴影。

youzongCoding的博客 770

FPGA实战:基于Basys3的多功能数字钟设计与实现

本文详细介绍了基于Basys3开发板的多功能数字钟设计与实现过程,涵盖FPGA开发、SystemVerilog编程及7段数码管驱动等关键技术。通过模块化设计实现时钟分频、时间计数、按键处理等功能,并提供了优化显示驱动和调试技巧,帮助开发者快速掌握数字电路设计核心概念。

weixin_29186249的博客 659

GAMES202作业3

GAMES202作业3笔记

runmasterdd的博客 552

基于STM32的智慧农业大棚监测与控制系统设计与实现

摘要:本文设计了一种基于STM32F103C8T6单片机的智慧农业大棚监测与控制系统,集成多参数环境监测、智能控制和远程管理功能。系统可实时采集光照、CO2、温湿度和土壤湿度等参数,通过OLED显示并采用双模式控制机制:自动模式下根据阈值调节设备,手动模式下支持APP或按键控制。通过ESP8266模块接入机智云平台实现数据云存储和远程控制。测试表明系统具有高精度(温度±0.5℃、CO2±50ppm)、快速响应(<2s)和稳定运行(30天无故障)等特点,有效解决了传统大棚调控不及时等问题。创新点包括多参

3254968421的博客 484

华为 MetaERP 通过元数据驱动的多组织架构 + 内部交易协同 + 自动对账引擎 + 合并规则引擎,实现多组织内部往来与合并报表的全流程自动抵消,核心是源头标准化、过程自动化、结果可追溯

摘要: 华为MetaERP通过元数据驱动的多组织架构与主数据标准化,实现内部往来与合并报表全流程自动化。其核心包括:统一组织模型与主数据(确保数据口径一致)、内部交易协同(自动生成对称凭证)、智能对账引擎(多维度自动匹配差异)、合并规则引擎(配置化抵消模板)。依托GaussDB高性能数据库与流批一体架构,华为全球88家子公司合并报表效率提升400%,关账时间缩短至2小时,支持多准则、多币种自动抵消,审计全程可追溯。相比传统ERP,MetaERP在协同性、自动化与扩展性上优势显著,为跨国集团提供高效、准确的合

金牌架构师 264

GAMES 202 作业2

我采用的编译方案是 cmake 3.22.2-windows.msi 然后vs2019 使用release模式编译 产生报错 prt\src\prt.cpp(219): error C4716: “<lambda_9ed74708f63acbd4deb1a7dc36ea3ac3>::operator()”: 必须返回一个值 论坛大神给出解决方案 MSVC 对于代码中的中文字符支持有问题(应该是会吞换行符),需要启用 utf-8 编译选项: 在 prt/CMakeLists.txt 112.

关宅 4375

2025年抖音面试:商业生态与安全质量运营技能要求及面试

在商业生态与安全岗的质量运营工作中,规则运营职责占据着极为重要的地位,它是保障内容风控质量的关键环节。

王国平的博客 608

GAMES202-高质量实时渲染(Real-Time Shadows)

SAT是对原数据的预处理得到的数据,在一维场景下,每个index记录都是前缀和(提前记录好),现在要求中间某一段的和,就直接拿出SAT在范围查询边界(左边是边界-1)的数据相减就行了。出现该问题的原因可以看下图,光源视角下的一个像素内高度认为是同一个,下一个像素的位置,会被认为比前一个Z值更远,所以平坦的地板会交替出现高低不平的地方,这样就会出现阴影。在任何一个点上,以它记录的值为半径画圆,都不可能碰到物体,如果做光线追踪,那可以直接移动到圆的表面上去,这就是SFD的一个应用。

lzh804121985的博客 1055

全志平台camera驱动开发(3)MIPI接口camera驱动开发

详细沟通: 请加video_D 目前开发过的allwinner平台: V5/V3/V3S/V40/T3/T7/A64等 开发过的mipi sensor: sony:imx317、imx477、imx274、imx258、imx286、imx307、imx385等 ov:ov2718、ov12895、ov2710等 ar: ar0238等 国产:gc1024、gc1034...

jzwjzw19900922的博客 9028

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

games202:一,导论----课程内容和不涉及的内容(mark)+ 作业0问题

game202:一,导论----课程内容及不涉及内容一,课程主要内容和几个模块The Real-Time High-Quality Rendering Class课程4大模块课程主要涉及内容课程不涉及内容(要另外学的内容)Tips 一,课程主要内容和几个模块 The Real-Time High-Quality Rendering Class Real-Time----实时渲染:30 fps,vr等特殊场景:90 fps,interactive rendering(交互绘制):肉眼能看到在刷新 High-

噗噗噗的博客 3138

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

GAMES202实时渲染(2)-Precomputed Radiance Transfer

预计算-烘焙技术是实时渲染中的必杀技

763

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Games202学习记录(1)

Shadows ShadowMap 硬阴影实现后存在自相交问题→ 解决方式为根据角度计算动态bias。 引发新的问题部分阴影不显示→ 学术界解决方式为记录second depth。虽然不增加时间复杂度,但是2n比n还是增加了性能损耗(if else导致的)。 近似什么时候比较准确呢? g(x) smooth即变化不大 ,比如常数,small support积分范围小的时候。 eg:shadingpoint上brdf而言diffuse就是smooth的,glossy brdf就不适合。面光源作为Li的时候

cr196的博客 334

cs-self-learning CS 自学指南:知识库组织、多语言文档站架构与贡献工作流解析

[![CS 自学指南标题横幅](https://raw.gitcode.com/GitHub_Trending/cs/cs-self-learning/raw/adce8e13789dc16aa6d1fbe163e9541736defae4/docs/images/title.png?utm_source=gitcode_repo_files)](https://link.gitcode.com/

gitblog_00146的博客 451

Hadoop+Spark游戏推荐系统毕业设计:从ALS到可视化大屏全攻略

大数据与推荐系统是当前技术实践中高频出现的两个方向,其核心价值在于从海量用户行为数据中挖掘潜在偏好。协同过滤作为最经典的推荐原理,通过分析用户与物品的交互矩阵实现个性化匹配,而ALS交替最小二乘法以低秩分解方式高效处理稀疏数据,成为分布式环境中的主流实现。结合Hadoop生态的分布式存储与Spark内存计算,可搭建完整的数据处理与模型训练链路。在游戏场景中,用户评分、游玩时长等数据天然适合构建训练集,配合Hive统计分析和ECharts可视化大屏,既能直观展示推荐效果,也能落地为工程实践。以Hadoop+S

weixin_31715171的博客 327

【Games202学习笔记01】作业0框架安装及实现

Games202作业0框架安装及实现

qq_39863386的博客 1019
上一篇: Games104作业四(含提高项)
下一篇: Games202作业1
要什么单车
博客等级 码龄8年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值