Graphics
未读OPENGL + FFMPEG 实现全景播放器
加载并编译着色器,用于处理顶点和片段着色。
创建一个球体模型,用于映射视频帧。
实现渲染帧的功能,将解码后的帧数据传递给GPU并绘制在球体上
Video 视频处理 编解码闪屏问题每次渲染新帧时,屏幕可能会出现闪屏现象,这可能是渲染的帧没有正确地显示或者上一帧的内容在新帧显示之前被清空。启用了VSync(垂直同步)。VSync会使得帧刷新率与显示器的刷新率同步,避免在图像未完全刷新时就进行绘制,从而减少闪屏和撕裂的情况。
双缓存问题启用双缓冲机制。这会使得渲染完成的一帧不会立即显示,而是先保存在一个缓冲区中,直到当前帧全部渲染完成后再交换缓冲区,避免屏幕上出现不完整的图像。
1glfwWindowHint(GLFW_DOUBLEBUFFER, GL_TRUE);
多线程处理,其中一个线程专门负责视频解码和帧数据准备,而主线程只负责渲染。这种方法有效地避免了主线程因为解码而阻塞导致的渲染延迟,从而消除了闪屏问题。
123456789101112131415161718192021222324252627// 解码线程,负责解码视频帧vo ...
1234567891011121314title: Unreal Hierarchydate: updated:tags: - UE5categories: - Unrealkeywords:description: Unreal Hierarchycomments: top_img: swiper_index: 1top_group_index: 1background: "#fff"
Unreal渲染管线PSO渲染管线中的 PSO(Pipeline State Object)是指一种用于定义和存储图形渲染状态的对象。PSO 是现代图形 API(如 DirectX 12 和 Vulkan)中引入的一个重要概念,旨在提高渲染性能和简化状态管理。
PSO 的作用在传统的图形渲染中,渲染状态是通过一系列 API 调用逐步设置的,比如设置着色器、混合模式、深度测试、光栅化状态等。这种做法虽然灵活,但在高性能渲染中容易导致开销较大的状态切换。PSO 则通过将这些渲染状态组合成一个对象进行管理,从而减少状态切换的开销。
PSO 的构成一个 PSO 通常包括以下状态信息 ...
VCPKG 使用安装VCPKG1. 克隆库12git clone https://github.com/microsoft/vcpkg.gitcd vcpkg
2. 安装库1./bootstrap-vcpkg.bat
3. 使用123456789101112// 查找库./vcpkg search <library-name>./vcpkg search glfw// 安装库./vcpkg install <library-name>./vcpkg install glfw3./vcpkg install <package-name>:<version>// 查看安装包和版本号vcpkg list// 查看详细版本信息vcpkg x-history fmtvcpkg remove package
4. 集成1./vcpkg integrate install
(最简单的)VS-2022搭建opengl开发环境_vcpkg安装opengl-CSDN博客
https://blog.tryhardzhang.xyz/2024/08/02/graphics/opengl/Opengl/
https://blog.tryhardzhang.xyz/2024/07/30/intern/FFMPE%E4%B8%8ESDL%E6%92%AD%E6%94%BE%E5%99%A8%E6%9E%B6%E6%9E%84/
https://blog.tryhardzhang.xyz/2024/07/20/intern/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8/
OpenGL
与窗口分离
OpenGL本身不负责创建窗口、管理窗口事件或者处理输入设备。这些任务通常由其他库或操作系统提供的窗口系统接口来处理。
由于viewport视口
右手坐标系
GLFWGLFW(Graphics Library Framework)是一个用于创建窗口、处理输入以及管理OpenGL上下文的开源库。它简化了OpenGL程序的开发,提供了跨平台的接口,使得开发者可以专注于渲染和图形处理,而不必担心底层平台特定的窗口系统和输入处理 ...
音视频开发
未读FFMPEG+SDL播放器架构
目录
libavcodec: 提供了一系列编码器的实现。
libavformat: 实现在流协议,容器格式及其本IO访问。
libavutil: 包括了hash器,解码器和各利工具函数。
libavfilter: 提供了各种音视频过滤器。
libavdevice: 提供了访问捕获设备和回放设备的接口。
libswresample: 实现了混音和重采样。
libswscale: 实现了色彩转换和缩放工能。
基本概念
音/视频流:路音/视频称为一路流
容器 :MP4、 FLV、MOV等文件格式。可以存放多路音视频文件。以 MP4 为例,就可以存放一路视频流,多路音频流,多路字幕流。
channel:声道。在一路音频流中,可以有单声道,双声道或立体声。
FFmpeg处理音视频流程
FFmpeg指令ffmpeg [global_options] {[input_file_options] -i input_url} …
{[output_file_options] output_url} …
信息查询
参数
- ...
Games 101 Geometry 几何几何种类 隐式和显式
Implicit 隐式表示几何会告诉在这个表面上的点满足怎样的关系
隐式表示 看出一个图形形状比较难
但方便判断这个点在不在这个面上
Explicit 显示表达
直接写出点
通过参数映射的方法表示出来
对于显示 判断一个点在不在表面上比较难
Algebraic Surfaces (implicit)隐式表达表面
Constructive Solid Geometry (Implicit)CSG
Distance Functions (Implicit) 距离函数距离函数是指空间上任何一个点到你想要表述的这个几何形体上任意一个点的最小距离 这个距离可以为正或者负
外部为正 内部为负
得到两个物体的距离函数 可以做融合 blending
如果想让blend融合表示运动信息
SDF :Sigiend distance fuction 有向距离函数
Level Set Methods (Also implicit)水平集
Fractals(Implicit)分型(套娃)Implicit Representat ...
Games 101 HomeworkHomework 01234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include<cmath>#include<eigen3/Eigen/Core>#include<eigen3/Eigen/Dense>#include<iostream>#define M_PI 3.14159265358979323846int main(){ // Basic Example of cpp std::cout << "Example of cpp \n"; float a = 1.0, b = 2.0; std::cout << a << std::endl; std::cout ...
Games 101 Illumination,Shading and Graphics Pipeline
Visibility / occlusion
Z-buffering 深度缓存 深度缓冲
Shading
Illumination & Shading
Graphics Pipeline
概念补充半程向量半程向量(Halfway Vector)是计算机图形学中的一个概念,通常用于光照计算,特别是在实现镜面反射(Specular Reflection)时。它是光源方向和观察方向的归一化中间向量。使用半程向量可以简化光照计算中的镜面反射部分,使计算更加高效和准确。
Painter’s Algorithm 画家算法先画远处的 近处覆盖远处的
但是深度的定义较为困难 比如这个正方体 如果先画左边在华上面右上角便不会出现一条线
Z-Buffer 解决画家算法的问题
Depth Z buffer这张图 距离越近 颜色越深
Shading 着色在绘画上 :引入明暗和颜色的不同
A Simple Shading Model (Bli ...