数字化方法基础(一)_基础操作与生成四面体

  • Chapter1 VisualStudio2010 Express如何创建新工程
  • Chapter2 SB-WinSRC的使用方法
  • Chapter3 用OpenGL生成四面体
    • 已知3点求法向量
    • 生成四面体

全部教程链接:
https://blog.csdn.net/weixin_44543463/article/details/102650117#_490
此为其中的第一部分

Chapter1 VisualStudio2010 Express如何创建新工程

1、新建一个win32 Console Application工程,选择建立一个空项目(带预编译头的也可以,只不过大多数人不太习惯)
2、在左侧解决方案资源管理器中右击Source-add-New item,创建一个C++文件
3、这样就用VS2010创建好了一个简单的工程!

Chapter2 SB-WinSRC的使用方法

1、解压压缩包,得到一个SB-WinSRC文件夹
2、打开SB-WinSrc\examples\projects\microsoft\chapt05\shinyjet文件夹中的shinyjet.vcproj文件,如出现以下对话框则一直Next到最后

3、打开shinyjet.cpp并进行编译(Build solution生成解决方案)

4、出现图示错误

5、打开目录\SB-WinSrc\examples\src\shared,找到freeglut_static.lib文件,将它复制到之前打开的shinyjet文件夹内


6、再次进行编译(Build solution生成解决方案),出现下图错误

7、在左侧Solution Explorer(解决方案资源管理器)中右击shinyjet打开属性,将Linker-Input-忽略特定默认库一栏中输入LIBC.lib

8、再次编译,成功!

Chapter3 用OpenGL生成四面体

已知3点求法向量

1、具体思路为先根据已知3点做差求出两个向量,利用两个向量叉乘运算求出法向量,实现过程中尽量避免将所有代码集中到一个函数中,因为后续的操作(如投影点的计算)还需用到求法向量的函数,到时可直接调用。
2、已知2点求向量的函数十分简单,代码如下

void getvector(float a[3],float b[3],float vec[3])
{for(int i = 0;i < 3;i++)vec[i] = a[i] - b[i];
}

3、调用两次上述函数即可获得两个向量,接下来要做的就是拿这两个向量进行叉乘,以得到法向量

//函数中的法向量n[3]是提前在函数外定义的,通过调用函数给n[3]赋值
void crossproject(float vec1[3],float vec2[3],float n[3])
{n[0] = vec1[1]*vec2[2]-vec1[2]*vec2[1];n[1] = vec1[2]*vec2[0]-vec1[0]*vec2[2];n[2] = vec1[0]*vec2[1]-vec1[1]*vec2[0];
}

4、将上面两个函数简单封装一下如下

//函数中的法向量n[3]是提前在函数外定义的,通过调用函数给n[3]赋值
void project(float point1[3],float b[3],float c[3],float n[3])
{float vec1[3],vec2[3];getvector(a,b,vec1);getvector(b,c,vec2);crossproject(vec1,vec2,n);
}

5、这样一个求法向量的函数就写好了,使用方法如下例

 double a[3] = {1.0,0.0,0.0};double b[3] = {0.0,1.0,0.0};double c[3] = {0.0,0.0,0.0};double n[3];project(a,b,c,n);//调用过project()函数之后,n[3]数组内的值即为法向量

生成四面体

1、使用OpenGL生成四面体的基本方法为,给定三个点和一个法向量,调用OpenDL的库函数,即可生成一个由这三点围成的三角形平面四个三角形平面即可组成一个四面体
2、将课上的shinyjet.cpp模板复制到src相应的文件夹中(\SB-WinSrc\examples\src\chapt05\shinyjet),然后回到project对应文件夹中,打开shinyjet.vcxproj工程,点击调试,成功后出来的应该为一个蓝绿色底的对话框。


3、在RenderSenen()函数中的下图位置 写入glBegin()与glEnd()函数,并在二者之间插入画三角形的代码

 float rgfPoints4[12] = {-0.6f,-0.6f,-0.6f,0.0f,1.0f,0.0f,1.0f,0.0f,0.0f,0.0f,0.0f,1.0f};//这是定义了一个长为12的数组,每3个元素代表一个点坐标,共4个点glColor3ub(255,255,0);//设置要生成图形的颜色glBegin(GL_TRIANGLES);//开始生成三角形DrawTriangle(rgfPoints4,rgfPoints4+3,rgfPoints4+6);DrawTriangle(rgfPoints4,rgfPoints4+9,rgfPoints4+3);DrawTriangle(rgfPoints4+3,rgfPoints4+9,rgfPoints4+6);DrawTriangle(rgfPoints4,rgfPoints4+6,rgfPoints4+9);//↑函数功能:给定3个点生成一个三角形,调用4次生成4个三角形组成四面体glEnd();//结束

4、在这里,glColor3ub、glBegin,glEnd均是OpenGL的库函数,不需要我们定义,直接调用即可,需要我们写的是DrawTriangle函数,接下来我们就开始定义DrawTriangle(),前面已经提到,需要用3个点和一个法向量来确定一个平面,因此我们把第一节中生成法向量的函数复制到此文件的开头处,以便调用。

5、画三角形的函数如下:

void DrawTriangle(float a[3],float b[3],float c[3])
{float n[3];    //定义一个数组用来存放法向量project(a,b,c,n);    //调用生成法向量的函数由a,b,c三点生成法向量nglNormal3fv(n);glVertex3fv(a);glVertex3fv(b);glVertex3fv(c);      //此四行为利用用库函数,由法向量n和三个点abc生成一个平面
}

5、完成上述步骤后,进行调试,即可得到一个四面体

Continue……

数字化方法基础(一)_基础操作与生成四面体相关推荐

  1. C语言基础教程_文件操作

    文章目录 前言 一.文件的概念 1.1文件的定义 1.2磁盘文件的分类 二.文件指针 三.打开文件fopen 四.关闭文件fclose 五.一次读写一个字节 5.1 fgetc 5.2 fputc 六 ...

  2. 数字化方法基础(四)_矩阵操作

    数字化方法基础(四)_矩阵操作 Chapter 7 矩阵操作 利用矩阵实现向量平移 使用矩阵实现向量旋转 如何让图形既平移又旋转 坐标系的旋转 让图形显示在屏幕中心且绕中心转动 全部教程链接: htt ...

  3. 数字化方法基础(三)_导入本地模型

    数字化方法基础(三)_导入本地模型 Chapter 6 导入本地模型 如何创建一个列表 如何读取本地模型 全部教程链接: https://blog.csdn.net/weixin_44543463/a ...

  4. python文件替换一行_python基础_文件操作实现全文或单行替换的方法

    这篇文章主要介绍了关于python基础_文件操作实现全文或单行替换的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python修改文件时,使用w模式会将原本的文件清空/覆盖.可以 ...

  5. 数字化方法基础_常用函数

    数字化方法基础_常用函数 1. 叉乘 2. 单位化矢量 3. 矩阵乘法4×4 × 4×1 4. 矩阵乘法 4×4 × 4×4 1. 叉乘 void crossproject(float vec1[3] ...

  6. 数字化方法基础(二)_点的投影

    数字化方法基础(二)_点的投影 Chapter4 用OpenGL生成点的投影 计算点的投影的基本原理 如何编写程序实现点的投影 Chapter5 如何使用VS2010的调试功能 全部教程链接: htt ...

  7. 深度学习与计算机视觉系列(1)_基础介绍

    转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...

  8. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  9. Lunx运维监控_shark巨菜_基础篇

    Lunx运维监控_shark巨菜_基础篇 一.监控重要性 单单从"监控"两个字来谈,范围之广可以涵盖我们生活的方方面面,我们生活和工作中处处可见视频监控的摄像机:机房中的电压电流监 ...

最新文章

  1. Java函数式接口看这一篇就够了
  2. linux内核配置usb虚拟串口,Linux USB虚拟串口设备
  3. Python 内置模块之 asyncio(异步iO)
  4. Unity3d常用插件
  5. Linux: 如何利用HandBrake将DVD光碟转成各式影片档
  6. 4.9_bridge_结构型模式:桥模式
  7. 催化剂概念在管理领域的应用——来自项目管理群的讨论
  8. java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析
  9. 第一课--BD的使用
  10. oracle 自动关闭 数据库连接
  11. k8s学习 : 前端是如何连接到后端数据库的?
  12. Pycharm装不上torch的解决办法!!!
  13. Android Paint中setTextSize
  14. c语言函数调用用法大全,C语言函数
  15. 鸿蒙系统下载 绿色,WiseFolderHider(文件夹加密软件)4.3.7
  16. 关于计算机教室的寄语,教师寄语大全(精选90句)
  17. Java拼图游戏总结,Java拼图游戏课程设计报告
  18. php银行卡号姓名,PHP实现根据银行卡号判断银行_PHP
  19. [mysql]存储过程/存储函数
  20. AcWing 487. 金明的预算方案

热门文章

  1. SPFA差分约束(bzoj 2330: [SCOI2011]糖果)
  2. javascript学习之支持正则表达式的String对象的方法的使用 search match replace split
  3. python后台架构Django教程——manage.py命令
  4. vivado修改block design后更新进sdk
  5. zynq文档学习之向GPIO引脚写数据
  6. HDOJ 3480 Division
  7. Scrum Meeting day 2
  8. [Java] arraycopy 数组复制(转)
  9. ajax图片上传,基于firefox
  10. web工程本地跟tomcat部署导致根路径不一致问题