因为需要的论文,最近开始学习OpenGL。由于刚入门的初学者有这么总会遇到很多问题,。

这些天,好不容易才OpenGL个问题弄明确了。

几点迷惑:

  1. 在网上百度。发现非常多求平面法向量的介绍以及程序。后面才知道顶点法向量才是我要的。
  2. 对于空间中的三个点。怎么确定平面法向量的方法?这里能够通过尝试顺时针和逆时针结合结果图来推断。以下简介下如何进行如果。

怎样通过如果方法推断平面法向量的方向(这里是指三角面片):

首先,当然要有数据,就是原始数据中每一个面片是由那三个顶点组成。比方如今空间中有一个三角形平面由三个顶点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数据包括顶点数据和顶点法向量数据链接

第一连接是bunny一些数据模型格档,第二个环节是一个包括bunny顶点数据模型和已计算出的顶点法向矢量数据。

计算,我们可以自己用顶点数据顶点的法线,在顶点的法线进行比较,然后,和文件,写你自己的计算,验证顶点正常的程序是正确与否。

解决opengl计算顶点的法线问题的更多相关文章

  1. (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题

    转载请注明出处:http://www.cnblogs.com/lihaiping/p/5567141.html 在做openGL测试的过程中,根据论坛上的帖子,在使用/bin/fbset -a -no ...

  2. 解决java计算中double类型结果不一致问题,使用BigDecimal解决

    一.需求:从数据表中读出一个double的数据,比如是3.5,没问题,但是如果再用3.5进行计算,比如乘以100,结果就是350了,而是35000000004 因为是浮点运算,所有语言中的浮点数都会有 ...

  3. 企业实践 | 如何更好地使用 Apache Flink 解决数据计算问题?

    业务数据的指数级扩张,数据处理的速度可不能跟不上业务发展的步伐.基于 Flink 的数据平台构建.运用 Flink 解决业务场景中的具体问题等随着 Flink 被更广泛的应用于广告.金融风控.实时 B ...

  4. .net 动态编译解决考勤计算问题

    由于公司实施SAP HR项目,但是SAP HR对考勤功能真的太弱化了,直接从考勤机上读取的原始打卡记录不能直接传输到HR系统里面,因为SAP HR不能识别那些多余的打卡记录,而且必须把打卡记录进行成组 ...

  5. Java使用BigDecimal解决精确计算的问题

    最近有人在微信上给我发了一个数学题目,如下图: 我看了之后感觉很是简单,但是却想了半天才解出来.解出来后我想到了用程序再解一遍,然而精确计算的问题却让人头疼不已. 解题思路: 思路其实很简单,暴力求解 ...

  6. 解决js计算0.1+0.2 !==0.3

    经常做用js数据运算的同学应该了解,在js中,0.1+0.2不会等于0.3,而是等于: 我一开始发现这个bug的时候也觉得很奇怪,那怎么去解决这个bug,让0.1+0.2 最后能得到0.3呢? 方法一 ...

  7. 蓝桥杯-正则问题(dfs,解决()的计算)

    历届试题 正则问题   时间限制:1.0s   内存限制:256.0MB      问题描述 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式. 小明想求出这个正则表达式能接受的最长 ...

  8. 使用Decimal.js解决前端计算金钱失真问题

    1.加载 $ npm install --save decimal.js 2.页面导入 import {Decimal} from 'decimal.js' 3.使用 // 加法 new Decima ...

  9. 解决js计算 小数加减乘除失真的功能函数

    function floatPoint(one,two,str){ //转化为字符串 one = ''+one two = ''+two //切割成整数部分和小数部分 var oneStr = one ...

随机推荐

  1. Java / Android 基于Http的多线程下载的实现

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26994463 有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~ 先说下 ...

  2. 最近跑hadoop遇到的一些问题

    一. [#|2013-09-16T18:19:02.663+0800|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterpris ...

  3. c# ThreadPoold使用心得

    于c#多线程编程经常使用的线程,但是,因为线程的创建和销毁是非常资源 - 成本非常大.因此,我们使用线程池来解决问题, 在线程池的开始是申请一定数量的线程系统.和维护,有任务时间,假设你有空闲的线程, ...

  4. Android学习路径(十)如何将Action Bar堆放在布局

    默认情况下,action bar出如今activity窗体的顶部,稍微降低了activity布局的总空间.假设你想隐藏或者显示action bar,在这堂用户体验的课程中,你能够通过调用hide()  ...

  5. HTML5游戏开发实战--当心

    1.WebSocket它是HTML5该标准的一部分.Web页面可以用它来连接到持久socketserver在.该接口提供一个浏览器和server与事件驱动的连接.这意味着client每次需要时不再se ...

  6. 5月,专用程序猿的经典大作——APUE

    五一小长假刚刚过去,收回我们游走的心.開始你们的读书旅程吧! 本期特别推荐 经典UNIX著作最新版. 20多年来,这本书帮助几代程序猿写出强大.高性能.可靠的代码. 第3版依据当今主流系统进行更新,更 ...

  7. node.js抓取数据(fake小爬虫)

    在node.js中,有了 cheerio 模块.request 模块,抓取特定URL页面的数据已经非常方便. 一个简单的就如下 var request = require('request'); va ...

  8. Netty+Tomcat热部署端口占用解决办法(转)

    在eclipse使用maven deploy (tomcat:deploy) 热部署netty项目 ,项目启动的时候会报错端口被占用. java.net.BindException: Address  ...

  9. 上curl java 模拟http请求

    最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...

  10. hdu4190 简单的二分法

    题意是 有n个城市,m个投票箱.接下来n个城市人口数,每一个投票箱都不能为空.计算最后投票箱的容量必须达到多少,才干满足须要. 每一个城市的人必须仅仅能将票投到自己城市分得得投票箱中.要是容量最小箱子 ...