小编fea*_*l87的帖子

真实世界应用程序中的冲突

这是我的问题.我正在创建一个游戏,我想知道如何进行碰撞.我有几个案例要分析并找到最佳解决方案.

我事先说的是,我没有使用任何第三方物理库,但我会在家里做.(因为这是一个教育项目,我没有时间表,我想学习)

我有2种类型的网格,我必须为其进行冲突:

1)静态网格物体(在屏幕上移动,但没有任何动画)

2)皮肤/粘合网格(动画)

其实我有这个解决方案(非常hacky:|)

首先,我对一些包围整个网格(我的情况下是胶囊)的边界体积进行了测试,之后:

1)对于静态网格,我在块中(在建模器上)手动划分它们,对于每个块,我使用球体/ AABB测试.(工作正常,但切片每个网格有点乱:P)(我尝试了一个自动系统将网格划分为平面,但它给出了不好的结果:()

2)对于动画网格ATM我在运行时将网格划分为x个块(其中x是骨骼的数量).每个块包含该骨骼作为主要影响者的顶点.(有时工作,有时会产生非常糟糕的结果.:|)

请注意,网格的划分是在加载时完成的,而不是每次都完成(否则它会像幻灯片一样运行:D)

这是问题所在:

对于这两种情况,最明智的想法是什么?我有什么材料可以研究这些方法吗?(有一些源代码和解释会更好(语言并不重要,当我理解算法时,实现很容易))你能说出为什么这个解决方案比其他解决方案更好吗?我听说过很多关于kd-tree,octree等的讨论.虽然我理解他们的结构但我错过了他们在碰撞检测场景中的实用性.

非常感谢你的答案!!!

编辑:试图在网上找到一个K-Dop示例和一些解释.仍然没有找到任何东西.:(任何线索?我对如何使用其他类型的边界卷等有效测试K-Dop感兴趣...但网上的文档似乎非常缺乏.:(

c# c++ directx collision-detection

16
推荐指数
2
解决办法
1154
查看次数

检查系统中是否存在DLL

快速的问题.我想知道我的应用程序正在执行的系统中是否存在DLL.

这可能在C#中吗?(以某种方式适用于所有Windows操作系统?)

对于DLL我的意思是一个非.NET经典DLL(一个Win32 DLL)

(基本上我想做一个检查,因为我使用的DLL可能会或可能不会出现在用户系统上,但我不希望应用程序在没有警告时崩溃:P)

c# windows dll pinvoke winapi

8
推荐指数
2
解决办法
2万
查看次数

资源争用

在使用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 ...

编辑:我越来越关注效果框架可能是这个问题的原因.我在更多对象之间共享一种效果,以节省内存和创建它们的时间.在没有争用的情况下可以安全地假设吗?

c# c++ directx

8
推荐指数
1
解决办法
526
查看次数

应用程序崩溃没有任何异常

我有一个多线程.Net C#应用程序,它使用Direct3D 9/10和XAudio2.(Direct3D仅由一个线程访问,对于XAudio2也是如此.Direct3D不是问题,因为DX9或DX10模式中的错误显示,而其行为没有任何变化.)

有时候(有些区域会随机出现这个问题)这个应用程序会以一种相当不引人注目的方式崩溃.即使应用程序是通过带有调试器的visual studio启动的,它也会崩溃而不会出现任何异常.(首先说"applicationname.svchost.exe崩溃等等.等等.你想调试吗?",如果我按下它会告诉我"你无法调试已经关闭的应用程序."

没有办法找出崩溃的原因是什么?因为我的想法已经用完了,调试器根本没有给我任何信息.没有例外,我甚至无法进行堆栈跟踪或转储.:P(我假设是一个同步问题(甚至在那个领域我认为我只做顺序工作......),但是为什么不启动异常?:|)

在出现问题的区域我正在卸载一个重新加载一系列与小说相关的类(在顺序核心线程中,所以我怀疑它可能是一个问题)并通过XAudio2开始一个新的音乐.(顺便说一下,关于XAudio2的多线程考虑是什么?从多个线程调用是否安全?)

谢谢您的帮助.

PS有一个软件附加到我的监控所有电话,并告诉我崩溃前的最后一次电话是什么?

.net c# directx multithreading

7
推荐指数
1
解决办法
6892
查看次数

快速绘制抗锯齿线

我有一点问题.我最近创建了一个算法,允许在屏幕上绘制粗线(作为四边形结构),问题是当线非常长且对角线时,锯齿非常高,使得线看起来非常糟糕.在尝试获得高性能时,我有什么机会减少混叠?

我正在使用(如标签所示)DirectX作为图形API.

c# c++ math directx 3d

5
推荐指数
1
解决办法
3364
查看次数

从DLL内部获取HModule

我需要从我的DLL加载一些资源(我需要从DLL代码加载它们),为此我正在使用FindResource.

要做到这一点,我需要DLL的HModule.怎么找到?

(我不知道DLL的名称(文件名)(用户可以更改它))

c++ dll resources

4
推荐指数
2
解决办法
6251
查看次数

三角形 - 三角交叉测试

我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 - 三角形交叉测试.(我不需要知道交叉点发生的确切位置,但只知道交叉点已经发生)

我打算按照理论上的pdf来实现它,但我很沮丧

  1. 三角形的计算平面方程2.
  2. 如果三角形1的所有点都在同一侧,则拒绝为微不足道.
  3. 三角形的计算平面方程1.
  4. 如果三角形2的所有点都在同一侧,则拒绝为微不足道.
  5. 计算交叉线并投影到最大轴上.
  6. 计算每个三角形的间隔.
  7. 相交间隔.

本指南的第5点.我真的不知道要问的是什么(全部是5,6和7).XD

因为我对数学知之甚少(嗯,我知道大学的几门考试给了我(我是一名原始程序员XD)),请尽量让我尽可能简单.:D(我试图在谷歌搜索,但大多数链接指向大约4-5页的公式,我真的不知道,我不明白.)

谢谢您的帮助

c# math physics collision-detection collision

3
推荐指数
1
解决办法
9116
查看次数

对父级的类引用

我很擅长使用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的方法)

c++ oop class parent-child

3
推荐指数
1
解决办法
1139
查看次数