DirectX之顶点法线的计算
首先要明白,顶点法线存在的原因:确定灯光照射到物体表面的角度。所以一提到顶点法线,肯定要进行与灯光相关的运算了。
下面是顶点法线的计算方式
假如 A、B、C三个顶点构成一个三角形,它们对应的顶点法线分别是 n_A、n_B、n_C。
从三角形中计算出两个向量(注意是有方向的):
u = B - A v = C- A
那么对应的面法线(向量的叉乘运算) n = u x v
如果直接用面法线表示顶点法线的话,那么 n_A = n_B = n_C = n
但是对于一些曲面物体,直接用面法线表示顶点法线,显然是不合适的(不够平滑),为了达到更好的效果,我们可以用共享该顶点的所有三角形的面法线的平均值来表示该顶点的顶点法线(有点绕,哈哈哈)。
我们知道,3D建模的时候,物体一般都是由三角形构成的,所以,正常情况一个顶点是被3个三角形共享的。
假如共享某个顶点的三个三角形的面法线分别为 n1, n2,n3,
那么按照法则,该顶点的顶点法线(n)可以表示为 n = (n1 + n2 + n3) / 3
DirectX之顶点法线的计算的更多相关文章
- unity3d中的自定义模型的顶点法线和建模软件中的术语“软硬边”和立方体
在unity3d中我是想用Mesh生成一个正方体,直到遇到了法线的问题. 我是想显示如下图所示的正方体,却发现法线设置上的问题. 这里我先使用了8个顶点 按照每个顶点一个法线的结果,只能是这样:(也就 ...
- [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算
1 前言 略,作为记录使用 2 代码 /** * @Author: FB * @Description: * @File: RotateSample.go * @Version: 1.0.0 * @D ...
- Kinect实现简单的三维重建
Kinect想必大家已经很熟悉了,最近基于Kinect的创意应用更是呈井喷状态啊!看到很多国外大牛用Kinect做三维重建,其中最著名的要数来自微软研究院的Kinect Fusion了,可以看看下面这 ...
- [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型
[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...
- 软件光栅器实现(二、VS和PS的运作,法线贴图,切空间的计算)
二.软件光栅器的VS和PS的输入.输出和运作,实现法线贴图效果的版本.转载请注明出处. 这里介绍的VS和PS是实现法线映射的版本,本文仅介绍实现思路,并给出代码供参考.切空间计算.光照模型等相关公式不 ...
- 顶点着色器详解 (Vertex Shaders)
学习了顶点处理,你就知道固定功能流水线怎么将顶点从模型空间坐标系统转化到屏幕空间坐标系统.虽然固定功能流水线也可以通过设置渲染状态和参数来改变最终输出的结果,但是它的整体功能还是受限.当我们想实现一个 ...
- DirectX 总结和DirectX 9.0 学习笔记
转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...
- 【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 比较DirectX和OpenGL的区别(比较详细)
OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库.OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL.IRIS GL是一个工业标准的3D图形软件接口,功能虽然 ...
随机推荐
- dell win 10笔记本关闭多媒体键,启用功能键的快捷方式
自从使用win 10之后,在使用快捷键方面就没有win 7之前来的顺手,比如F8切换投影仪,F5/F6调试等等.特地搜了下,使用Fn+Esc可以在功能键和多媒体键之间切换.
- maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext
报这个异常java.lang.IllegalStateException: Failed to load ApplicationContext的时候,通常是因为applicationContent.x ...
- 问题:grid卸载后重新安装时ASM磁盘识别不到了
现象,磁盘路径是对的,但是识别不出来asmdisk2 系统显示磁盘也存在 识别不到的原因是:安装了一次磁盘已经有asm信息写入,需要擦除才能重新被识别到,命令如下 [root@swnode1 dev] ...
- centos 7 安装使用 redis
1.下载redis,用wget就行,版本在这里找: http://download.redis.io/releases/ 2.安装gcc,tcl,用yum 安装. 3.解压,make ,make in ...
- 20145308 《网络对抗》 MAL_免杀原理及实践 学习总结
20145308 <网络对抗> MAL_免杀原理及实践 学习总结 实践内容 (1)理解免杀技术原理 (2)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免 ...
- Codeforces Round #439 (Div. 2) Problem B (Codeforces 869B)
Even if the world is full of counterfeits, I still regard it as wonderful. Pile up herbs and incense ...
- 写了个脚本将json换成md
用python 脚本将protocol.json中的json按照templete.md模版生成,结果在protocol.md中 Python: #!/usr/bin/python # -*- codi ...
- Git Add,Git别名等
一,Git Add 1. git add -A 保存所有的修改 2. git add . 保存新的添加和修改,但是不包括删除 3. git add -u 保存修改和删除,但是不 ...
- Android编译系统中的Android.bp【转】
本文转载自: 转自:http://note.qidong.name/2017/08/android-blueprint/ Android编译系统中的Android.bp.Blueprint与Soong ...
- Golang踩坑录 两种方式来读取文件一行所导致的问题
前两天零零碎碎看完了golang的基础,想着找个小项目练练手,可是出现了一个十分棘手的问题 我要做的东西是网站路径爆破 所以我会从文本字典中把一行行路径读取然后与域名拼接,但是我在跑起程序后出现了问题 ...