解决opengl计算顶点的法线问题
2024-10-10 17:45:03
因为需要的论文,最近开始学习OpenGL。由于刚入门的初学者有这么总会遇到很多问题,。
这些天,好不容易才OpenGL个问题弄明确了。
几点迷惑:
- 在网上百度。发现非常多求平面法向量的介绍以及程序。后面才知道顶点法向量才是我要的。
- 对于空间中的三个点。怎么确定平面法向量的方法?这里能够通过尝试顺时针和逆时针结合结果图来推断。以下简介下如何进行如果。
怎样通过如果方法推断平面法向量的方向(这里是指三角面片):
首先,当然要有数据,就是原始数据中每一个面片是由那三个顶点组成。比方如今空间中有一个三角形平面由三个顶点A,B,C组成。
接着。就会存在以下两种情况,例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlzaGVyd2Fu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">
因此,我们在程序中仅仅要反着试一次,就会得到我们的结果了。
以下我给出我的部分代码已经效果图(斯坦福大学著名的bunny模型):
当中,A和B是后面要进行叉乘的两个向量,point1,point2,point3就是三角面片的三个顶点。
情况1:
A[X] = point2[X] - point1[X];
A[Y] = point2[Y] - point1[Y];
A[Z] = point2[Z] - point1[Z];
B[X] = point1[X] - point3[X];
B[Y] = point1[Y] - point3[Y];
B[Z] = point1[Z] - point3[Z];
情况2:
<span style="color:#000000;">A[X] = point3[X] - point1[X];
A[Y] = point3[Y] - point1[Y];
A[Z] = point3[Z] - point1[Z];
B[X] = point1[X] - point2[X];
B[Y] = point1[Y] - point2[Y];
B[Z] = point1[Z] - point2[Z];</span>
从上面两种情况能够看出。它们确实是相反的。
自己再实际操作的时候能够去尝试一下。
计算顶点法向量的过程记录:
首先,我们要了解几个概念,平面法向量(平面上两个不平行。不共线的向量叉乘得到),顶点法向量(以这个点为顶点的全部三角形的法向量之和)。
接着,我们就能够通过三个顶点求得两个向量,两个向量叉乘得到平面法向量。(平面法向量进行归一化)
然后,统计每一个顶点的全部平面法向量之和。(顶点法向量进行归一化)
第一连接是bunny一些数据模型格档,第二个环节是一个包括bunny顶点数据模型和已计算出的顶点法向矢量数据。
计算,我们可以自己用顶点数据顶点的法线,在顶点的法线进行比较,然后,和文件,写你自己的计算,验证顶点正常的程序是正确与否。
最新文章
- SVG动画
- HADOOP安装指南-Ubuntu15.10和hadoop2.7.2
- 二:基础概述netty
- Asp.net_完美设置页面最小宽度(兼容ie)
- java Map迭代
- c语言的一些库
- reCAPTCHA 简单分析
- Codeforces GYM 100114 B. Island 水题
- python里的Join函数
- placeholder 兼容 IE
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
- Python3基础 pop() 删除 键为指定值的项
- 201521123050 《Java程序设计》第8周学习总结
- js 点击复制代码 window.clipboardData.setData
- python 模块——os 模块
- 用RIPv2实现网络区域的互通
- jmeter之beanshell取出需要参数,传递给下个请求
- 【Linux】MySQL安装及允许远程访问
- 第10月第5天 v8
- CSUOJ 1007 矩形着色
热门文章
- 获取listboxitem在ListBox中的index并转换成abcd
- 【iOS开发-60】案例学习:多组数据的tableView设置、添加右側组索引、多层数据模型设置以及valueForKeyPath
- MIPS台OpenWrt在系统内的路由器Rust应用程序开发
- iOS开展——全球应对MotionEvent
- UVA 11248 - Frequency Hopping(网络流量)
- 02、Unicode 汉子转码小工具
- 使用WPF创建无边框窗体
- C++编程有趣的标题1 于1~9填写的运算结果的中间符号等于100
- newinstance()和new有什么区别?(转)
- 求Sn=a+aa+aaa+…+aa…aaa(有n个a)…