从别人基础开始敲最差劲游戏引擎三_顶点输入之法线(翻译向)
Posted avi9111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从别人基础开始敲最差劲游戏引擎三_顶点输入之法线(翻译向)相关的知识,希望对你有一定的参考价值。
目录
1)今天,还是在研究顶点法线
2)此法线非彼法线,不想说法线向量,不过输入关键字:法线,网上的资料都是在说法线向量(你们是有多爱法线向量)
3)以下内容出自《Introduction to 3D Game Programming with DirectX 11》
4)传说中的龙书,感觉是大学的老师都在推这本书(2017年前后有不少老师的中文翻译)
翻译:法线向量??
(法线向量,这个名词到底怎么来的),看完第7章我悟了
略懂中文的应该都觉得有语法错误(Title 是法线向量,第一句就是表面法线,后面也没说法线向量是个什么东东,而整个第七章节说的都是光线,感觉看得懂这个章节的都是天才,千万不要浪费你的才华)
7.2 法线向量
---------------------------------------------------------------------------------------------
一个表面法线 is 一个单位向量,用于描述(一个)polygon(拓扑块)的面向方向(朝向),(例如,平面上所有点的xxx)见图表7.4a ~¥#@%¥#!%¥!^%#*&%*!%^*!!%*&@^*&^*! %^&%!^&%!^&*((^(*^#(*@&*(&$*#@(%&^$%^%$^~#%$#%$@%~$
龙书的7.2这一个章节,一直在说表面向量
人家用英文,用一整个章节其实就在解析的 normal(非法线向量)吗?
人家说的就是normal,并没有什么法线向量
人家说的vector normal 应该是Normal vector,主要是英文的“普通”,和“法线”是同一个单词
所以才给这个章节命名成,Normal Vector,用来区分Normal Case
结果国人就一直说法线向量,法线向量,还要一直钻研法线向量
其实,人家可能只想说的是如何Normalize 矢量(非法线向量)以及如何用
是没错,Normal 在图形学就翻译成法线
有图有真相
入门公式,公式和公式的理解
关于龙书,哥只看了2个章节,
已经是Directx11的书了,前面又D9,D10,这本龙书可是迭代了10几年了,
书中的内容,无论确图片,公式,扩展计算,还是公式推导都很相当出色,和完善
真是经典书籍,但实际开发过程中,真的用不上(因为每年几万的从业人员,倒闭的公司都以千,以万做单位)
很小众的行业,但毕竟这个行业已经存在多年(有增长,有萎缩)
实际开发过程,这个行业已经有太多现成经验了(虽然哥碰到现成的少,分享的也少)
n 这个公式我是真没看懂,但从下面的代码可以推断就是“叉乘”的意思,因为用了XMVector3Cross()
void ComputeNormal(const XMVector3& p0,
const XMVector3& p1,
const XMVector3& p2,
XMVector3& out)
XMVector3 u = p1 - p0; //向量减法运算
XMVector3 v = p2 - p0; //向量减法运算
XMVector3Cross(&out, &u, &v); //叉乘
XMVector3Normalize (&out, &out); //归一化
是不是有点奇怪,怎么一个方法,传两个相同的参数??&out ??
XMVector3Normalize (&out, &out); //归一化
//这TM传2个相同的参数是什么意思?
//有病?
//是的c++有病
//
XMVector3Normalize (&out, &out);
//我们不得不又把上下文拿出来
//其实上面还有&u,&v
XMVector3Cross(&out, &u, &v);
XMVector3Normalize (&out, &out);//第一个&out是指针内容做参数传入,第二个&out是传入一个指针,接受返回值
//但问题来了,既然都是指针了,怎么就不直接修改指针内容,进进出出,肯定容易出错啊,内容不安全啊,二义性啊,你这怪程序员不懂C++?不会写程序 ?
用Unity,C#的写法,其实就是
function ComputeNormal(Vector3 p0,Vector3 p1,Vector p2,out Vector pNormal)
Vector3 u = p1-p0;
Vector3 v = p2-p0;
Vector3 cross = Vector3.Cross(u,v);
pNormal = cross.Normalize();//忘了,有没这个写法
第六章,还是没有法线,顶点法线
不在第7章,而在第六章节,找到了顶点法线
顺带,还知道了 normal的长度 - 12个字节
无奈,从书中,找不到.normal的使用方法,只有.color,(甚至.color的方法都没有的,只是有结构体)
而顶点的color,真心不是那么容易“获得”这里不展开说了
只是提一下:.color主要是用作 Flat shading,如下
而我们不搞:Flat Shading,
只会用:Gourand shading(normal)练下手,这才是我们今天的主角法线
4: shade(着色):
Flat shading:通過一個點的顏色來render多邊形的顏色
Gourand shading: 通過多個點
可以通過SetRenderStata(D3DRS_SHADEMODE,,)來設置shade方
第七章,为什么翻译Vectors
第7章主要讲光线。。。。。。
为什么目录里是:Normal Vectors?
还有Computing Normal Vectors,和Transforming Normal Vectors
重新看了一下,为什么Vectors要用复数?
难道,翻译成”法线向量“原来是完全错误的?
正确翻译,应该是”法线归一化,法线朝向“吗?
当然,很多书都翻译成“向量”,但很多书都把“向量”和“矢量”等价,
“向量”这个词应该是为了翻译修正,和“矢量”区隔
其实下面英文说的明明白白(中国“叫兽”真的不要自作聪明,用简写,用向量,害了多少人?害了几代人?)
其实搞清楚什么是Vectors(向量)
剩下就很容易理解第7章了
7.2 法线朝向
7.2.1 计算法线朝向
7.2.2 法线朝向的各种转换
Gourand Shading
结合龙书的第6,第7章节,和乐乐姐的书
| |
| |
|
*注意:因为normal的类型是 float4,所以这是我的将错就错的写法,+ float4()
*最好normal还是用专门的Normal类型,shader就提供法线类型
以上是关于从别人基础开始敲最差劲游戏引擎三_顶点输入之法线(翻译向)的主要内容,如果未能解决你的问题,请参考以下文章
从别人基础开始敲最差劲游戏引擎二_反射Shader的HLSL语法