zoukankan      html  css  js  c++  java
  • 解决opengl计算顶点的法线问题

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

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

            几点迷惑:

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

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

            首先,当然要有数据,就是原始数据中每一个面片是由那三个顶点组成。比方如今空间中有一个三角形平面由三个顶点A,B,C组成。

            接着。就会存在以下两种情况,例如以下图:

    因此,我们在程序中仅仅要反着试一次,就会得到我们的结果了。

    以下我给出我的部分代码已经效果图(斯坦福大学著名的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顶点数据模型和已计算出的顶点法向矢量数据。

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

  • 相关阅读:
    解决linux下主机名变bogon的问题
    如何压缩虚拟机文件
    Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件
    .NET ramework 4.0安装失败
    Oracle数据库密码过期
    MySQL max_allowed_packet设置及问题
    WPF 异步执行
    win8 无法显示桌面,运行explorer.exe 提示 0xc0000018 异常 解决办法
    最全的Spark基础知识解答
    数据处理包plyr和dplyr包的整理
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5035122.html
Copyright © 2011-2022 走看看