IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 图形API学习工程(27):修正CubeMap采样方向需要重排轴向的问题 -> 正文阅读

[游戏开发]图形API学习工程(27):修正CubeMap采样方向需要重排轴向的问题

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics

问题

《图形API学习工程(21):使用CubeMap纹理》中我实现了CubeMap,然而有个问题:每次采样CubeMap的时候,都需要对采样方向的轴向进行重排:

//采样的方向,这里做一个小调整
vec3 SampleDir = vec3(LightDir.x,-LightDir.z,LightDir.y);

//采样立方体贴图获得颜色
fColor = texture(ourCubeMap, SampleDir);

观察与思考

在RenderDoc中观察看到,我作为“top”的贴图实际是作为了Y+方向。
在这里插入图片描述
但是在C++代码中,我计算视角矩阵时的向上方向指定的是(0,0,1),即Z轴。
在这里插入图片描述
这造成了不匹配。


那么,是该调整传入的贴图顺序,还是调整计算视角矩阵时的向上方向?

首先我尝试调整贴图顺序,但是却让生成的CubeMap方向错误导致边缘不匹配:
在这里插入图片描述
我在OpenGL中创建时的代码为:

 for (unsigned int i = 0; i < FaceImageFiles.size(); i++)
{
    ...
        glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
            0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
    ...
}

立方体贴图 - LearnOpenGL CN 也指出方向是:

项目Value
GL_TEXTURE_CUBE_MAP_POSITIVE_X
GL_TEXTURE_CUBE_MAP_NEGATIVE_X
GL_TEXTURE_CUBE_MAP_POSITIVE_Y
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
GL_TEXTURE_CUBE_MAP_POSITIVE_Z
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

这和我当前工程中创建的顺序一致,所以我想,也许修正计算视角矩阵时的向上方向是更合适的。

实施调整

因此,我在计算视角矩阵的时候,将向上方向改为了+Y。
同时,相机移动的逻辑也随之需要调整。

随后,模型的向上方向也需要调整。

最后,shader中CubeMap的采样方向便不需要再重排轴向了。


现在,天空盒中采样的shader代码如下:

float4 Main( VS_OUTPUT input ) : SV_Target
{
	//采样的方向是位置的方向
	float3 SampleDir = input.WorldPosition;
	
	//采样立方体贴图获得颜色
	return skyboxCubeMap.Sample( ourSampler, SampleDir );
}

测试反射的shader代码如下:

float4 Main( VS_OUTPUT input ) : SV_Target
{
	//视线方向
	float3 EyeDir = eyePosition.xyz - input.WorldPosition;	
	
	//镜面反射光的方向
	float3 LightDir = reflect(normalize(EyeDir),normalize(input.Normal));
	
	//采样的方向就是光线方向的反向
	float3 SampleDir = -LightDir;
	
	//采样立方体贴图获得颜色
	return ourCubeMap.Sample( ourSampler, SampleDir );
}

可以看到轴向不需要之前的重排。而结果也是对的:
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:07:54  更:2021-10-07 14:09:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:42:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码