PhysX3 学习笔记2.5

本文介绍了在PhysX和OpenGL结合中进行坐标转换的方法,包括创建可视空间、添加墙体、调整视角、修正函数和添加PhysX坐标轴。通过实例展示了如何在OpenGL中绘制PhysX坐标轴,并提供了鼠标控制器来改变视角。文章最后提到了如何在场景中添加Actors的学习内容。
摘要由CSDN通过智能技术生成

注意:本文标注为2.5的原因是因为主要涉及OpenGL概念复习,并没有完全涉及到PhysX物理模拟

上回说到,用PhysX搭建了一个基本的空框架。

今天要说的主要内容是,PhysX和OpenGL中的坐标转换。声明一下有时候我会创建一些之后要用的变量,有可能一开始会看不懂,但坚持下去

最后你会明白的。

最后的结果将是屏幕中出现一个PhysX坐标系的坐标轴。在这过程中我们将会使用到Plane

Plane将空间分为上下两部分,所有在Plane之上的物体都会和他发生碰撞。


1,创建我们的可视空间

添加一个新的类库

#include <foundation\Mat33.h>

这个类库中有一个函数,是用来将变换矩阵从PhysX中转换到OpenGl的。因为OpenGL和PhysX的世界坐标不太相同

左侧的OpenGL坐标系为笛卡尔坐标系(从左向右x正,从内向外z正,从下向上y正)

右侧PhysX中x和y的正轴方向和OpenGL相反。

关于这个函数的具体实现,我们下一篇文章中会提及。


创建可见的墙体

我们将使用Plane来创建上述物体。

我们先修改一下我们的全局变量:

#define MAX_PATH 16384
char buffer [MAX_PATH]

int start_time = 0,total_frames = 0,state = 1,oldX =0,oldY =0;
float fps =0,rX =0,rY =50,dist =0;
const int WINDOW_WIDTH = 800,WINDOW_HEIGHT =600,OBJ_NUM = 130;
const float Gravity = -9.8;

typedef GLfloat point3[3];
point3 planeVertice[4] = {
  {-10,0,10},{-10,0,-10},{10,0,-10},{10,0,10}};
</pre>接下来,我们要使用这些函数来绘制一个网格(作为地面)<p></p><p></p><pre name="code" class="cpp">void drawGrid(int n)
{
	glBegin(GL_LINES);
	glColor3f(0.7f,0.7f,0.7f);

	for(int i = -n;i<=n;i++)
	{
		glVertex3f((float)i,0,(float)-n);
		glVertex3f((float)i,0,(float)n);

		glVertex3f((float)-n,0,(float)i);
		glVertex3f((float)n,0,(float)i);
	}
	glEnd();
}
很容易理解,画了一个20x20的网格地面


有了地面不妨再画个墙:

void drawPlane()
{
	glBegin(GL_POLYGON);

	glNormal3f(0,1,0);
	glVertex3fv(planevertice[0]);
	glVertex3fv(planevertice[1]);
	glVertex3fv(planevertice[2]);
	glVertex3fv(planevertice[3]);
	glEnd();

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值