这是我的问题.我正在创建一个游戏,我想知道如何进行碰撞.我有几个案例要分析并找到最佳解决方案.
我事先说的是,我没有使用任何第三方物理库,但我会在家里做.(因为这是一个教育项目,我没有时间表,我想学习)
我有2种类型的网格,我必须为其进行冲突:
1)静态网格物体(在屏幕上移动,但没有任何动画)
2)皮肤/粘合网格(动画)
其实我有这个解决方案(非常hacky:|)
首先,我对一些包围整个网格(我的情况下是胶囊)的边界体积进行了测试,之后:
1)对于静态网格,我在块中(在建模器上)手动划分它们,对于每个块,我使用球体/ AABB测试.(工作正常,但切片每个网格有点乱:P)(我尝试了一个自动系统将网格划分为平面,但它给出了不好的结果:()
2)对于动画网格ATM我在运行时将网格划分为x个块(其中x是骨骼的数量).每个块包含该骨骼作为主要影响者的顶点.(有时工作,有时会产生非常糟糕的结果.:|)
请注意,网格的划分是在加载时完成的,而不是每次都完成(否则它会像幻灯片一样运行:D)
这是问题所在:
对于这两种情况,最明智的想法是什么?我有什么材料可以研究这些方法吗?(有一些源代码和解释会更好(语言并不重要,当我理解算法时,实现很容易))你能说出为什么这个解决方案比其他解决方案更好吗?我听说过很多关于kd-tree,octree等的讨论.虽然我理解他们的结构但我错过了他们在碰撞检测场景中的实用性.
非常感谢你的答案!!!
编辑:试图在网上找到一个K-Dop示例和一些解释.仍然没有找到任何东西.:(任何线索?我对如何使用其他类型的边界卷等有效测试K-Dop感兴趣...但网上的文档似乎非常缺乏.:(
快速的问题.我想知道我的应用程序正在执行的系统中是否存在DLL.
这可能在C#中吗?(以某种方式适用于所有Windows操作系统?)
对于DLL我的意思是一个非.NET经典DLL(一个Win32 DLL)
(基本上我想做一个检查,因为我使用的DLL可能会或可能不会出现在用户系统上,但我不希望应用程序在没有警告时崩溃:P)
在使用Pix分析我的应用程序时,我注意到GPU正在通过(在DX10模式下)大部分时间处于空闲状态,等待资源不可用.(并且总是与CPU排在一起(例如,如果CPU处理第X帧,GPU也在处理第X帧)这个问题)
一些说明:
1)应用程序是GPU限制的(CPU基本上是空闲的(在最繁重的场景中占CPU使用率的20%))
我的问题是:
1)我如何解释这些结果?在Pix的每一帧中我看到2-3个小红条(据我所知,意味着资源不可用),然后是中/大灰条(这意味着GPU空闲).另一边的CPU有一些操作,一个大的空条,然后是其他一些操作(等待什么?)
另一个注意事项,当GPU空闲时,CPU通常正在工作.(相反,显然无效)
2)什么电话可以使资源变得不可用?
带有DISCARD的MAP被认为是阻塞电话吗?
获取对象的DESC的查询?
共享着色器效果被认为是一种争论?
别的什么?
我的一般框架是:
41 DrawPrimitives/DrawIndexedPrimitives(大多数对象都是实例化的)
7/8使用discard锁定顶点缓冲区
9更改像素着色器/顶点着色器
1 setrendertarget
谢谢!
PS截图pix
http://img191.imageshack.us/img191/6800/42594100.jpg
如果我使用单个绘制调用(具有相同的gpu负载(例如具有x粒子或实例化对象的粒子引擎))而不是完整的游戏,我得到一个完整的蓝色条和GPU正确2-3帧后面的CPU ...
编辑:我越来越关注效果框架可能是这个问题的原因.我在更多对象之间共享一种效果,以节省内存和创建它们的时间.在没有争用的情况下可以安全地假设吗?
我有一个多线程.Net C#应用程序,它使用Direct3D 9/10和XAudio2.(Direct3D仅由一个线程访问,对于XAudio2也是如此.Direct3D不是问题,因为DX9或DX10模式中的错误显示,而其行为没有任何变化.)
有时候(有些区域会随机出现这个问题)这个应用程序会以一种相当不引人注目的方式崩溃.即使应用程序是通过带有调试器的visual studio启动的,它也会崩溃而不会出现任何异常.(首先说"applicationname.svchost.exe崩溃等等.等等.你想调试吗?",如果我按下它会告诉我"你无法调试已经关闭的应用程序."
没有办法找出崩溃的原因是什么?因为我的想法已经用完了,调试器根本没有给我任何信息.没有例外,我甚至无法进行堆栈跟踪或转储.:P(我假设是一个同步问题(甚至在那个领域我认为我只做顺序工作......),但是为什么不启动异常?:|)
在出现问题的区域我正在卸载一个重新加载一系列与小说相关的类(在顺序核心线程中,所以我怀疑它可能是一个问题)并通过XAudio2开始一个新的音乐.(顺便说一下,关于XAudio2的多线程考虑是什么?从多个线程调用是否安全?)
谢谢您的帮助.
PS有一个软件附加到我的监控所有电话,并告诉我崩溃前的最后一次电话是什么?
我有一点问题.我最近创建了一个算法,允许在屏幕上绘制粗线(作为四边形结构),问题是当线非常长且对角线时,锯齿非常高,使得线看起来非常糟糕.在尝试获得高性能时,我有什么机会减少混叠?
我正在使用(如标签所示)DirectX作为图形API.
我需要从我的DLL加载一些资源(我需要从DLL代码加载它们),为此我正在使用FindResource.
要做到这一点,我需要DLL的HModule.怎么找到?
(我不知道DLL的名称(文件名)(用户可以更改它))
我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 - 三角形交叉测试.(我不需要知道交叉点发生的确切位置,但只知道交叉点已经发生)
我打算按照理论上的pdf来实现它,但我很沮丧
本指南的第5点.我真的不知道要问的是什么(全部是5,6和7).XD
因为我对数学知之甚少(嗯,我知道大学的几门考试给了我(我是一名原始程序员XD)),请尽量让我尽可能简单.:D(我试图在谷歌搜索,但大多数链接指向大约4-5页的公式,我真的不知道,我不明白.)
谢谢您的帮助
我很擅长使用C++而且我实际上遇到了问题.
我有一些A,B,C类定义如下(PSEUDOCODE)
class A
{
...
DoSomething(B par1);
DoSomething(C par1);
...
}
class B
{
A parent;
...
}
class C
{
A parent;
...
}
Run Code Online (Sandbox Code Playgroud)
问题是 :
怎么做到这个?如果我只是这样做(因为我总是在c#中完成)它会给出错误.我非常理解这个的原因.(如果我将B和C的引用(包含)添加到自己的头中,则尚未声明A)
有什么方法可以解决这个问题吗?(使用void*指针不是去imho的方法)