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

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

Chapter1 VisualStudio2010 Express如何创建新工程

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

Chapter2 SB-WinSRC的使用方法

1、解压压缩包,得到一个SB-WinSRC文件夹
2、打开SB-WinSrc\examples\projects\microsoft\chapt05\shinyjet文件夹中的shinyjet.vcproj文件,如出现以下对话框则一直Next到最后
Huffie
3、打开shinyjet.cpp并进行编译(Build solution生成解决方案)
Huffie
4、出现图示错误
Huffie
5、打开目录\SB-WinSrc\examples\src\shared,找到freeglut_static.lib文件,将它复制到之前打开的shinyjet文件夹内
Huffie
Huffie
6、再次进行编译(Build solution生成解决方案),出现下图错误
Huffie
7、在左侧Solution Explorer(解决方案资源管理器)中右击shinyjet打开属性,将Linker-Input-忽略特定默认库一栏中输入LIBC.lib
Huffie
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工程,点击调试,成功后出来的应该为一个蓝绿色底的对话框。
Huffie
Huffie
3、在RenderSenen()函数中的下图位置 写入glBegin()与glEnd()函数,并在二者之间插入画三角形的代码Huffie

	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个点和一个法向量来确定一个平面,因此我们把第一节中生成法向量的函数复制到此文件的开头处,以便调用。
Huffie
5、画三角形的函数如下:

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

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

Continue……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huffiee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值