我想用DirectX
或显示100个浮动立方体OpenGL
.
我正在寻找一些示例源代码或技术描述.我无法让更多的立方体正确显示.
我梳理了净一个良好的系列教程的,虽然他们谈论怎么办3D
原语,我无法找到是怎么做大量的信息3D
原语- ,cubes
,spheres
,pyramids
等等.
这是我的问题.我正在创建一个游戏,我想知道如何进行碰撞.我有几个案例要分析并找到最佳解决方案.
我事先说的是,我没有使用任何第三方物理库,但我会在家里做.(因为这是一个教育项目,我没有时间表,我想学习)
我有2种类型的网格,我必须为其进行冲突:
1)静态网格物体(在屏幕上移动,但没有任何动画)
2)皮肤/粘合网格(动画)
其实我有这个解决方案(非常hacky:|)
首先,我对一些包围整个网格(我的情况下是胶囊)的边界体积进行了测试,之后:
1)对于静态网格,我在块中(在建模器上)手动划分它们,对于每个块,我使用球体/ AABB测试.(工作正常,但切片每个网格有点乱:P)(我尝试了一个自动系统将网格划分为平面,但它给出了不好的结果:()
2)对于动画网格ATM我在运行时将网格划分为x个块(其中x是骨骼的数量).每个块包含该骨骼作为主要影响者的顶点.(有时工作,有时会产生非常糟糕的结果.:|)
请注意,网格的划分是在加载时完成的,而不是每次都完成(否则它会像幻灯片一样运行:D)
这是问题所在:
对于这两种情况,最明智的想法是什么?我有什么材料可以研究这些方法吗?(有一些源代码和解释会更好(语言并不重要,当我理解算法时,实现很容易))你能说出为什么这个解决方案比其他解决方案更好吗?我听说过很多关于kd-tree,octree等的讨论.虽然我理解他们的结构但我错过了他们在碰撞检测场景中的实用性.
非常感谢你的答案!!!
编辑:试图在网上找到一个K-Dop示例和一些解释.仍然没有找到任何东西.:(任何线索?我对如何使用其他类型的边界卷等有效测试K-Dop感兴趣...但网上的文档似乎非常缺乏.:(
它看起来像这个问题已经被问的每个多次在不同的环境和我已经在做覆盖了游戏中的一些进步(这是信息数据,等等).我也想让它像Steam和XFire一样可以互动.
我已经设法获得了一个直接游戏的叠加,而它在窗口模式...有点.
我已经看了遍布堆栈溢出和谷歌没有很多运气.
如果需要,我可以用C++而不是C#来尝试.我知道C#,但我不认为自己是一个专业人士.只需要更好的解释.哎呀,如果能让这个工作正常,我会愿意整理一个精彩的截屏/教程.
注意:我真的想用本机代码而不是库来做这个,但是如果那里有一个好的免费库,我想查看它.
http://www.gamedev.net/community/forums/topic.asp?topic%5Fid=359794
更多信息:我确实设法获得一个窗体覆盖游戏窗口,并将其父设置为使用SetParent.然而,这并不能很好地工作,因为它根本无法全屏工作,并且透明度不起作用.(基本上有一个透明度键,TopMost设置为TRUE.)我真的想找到一个不同的方法.
这是这个问题的后续行动.我正在编写一个简单的游戏,我正在寻找在Win32窗口中(反复)显示RGB数据数组的最快方法,没有闪烁或其他工件.
在上一个问题的答案中建议采用几种不同的方法,但没有达成共识,哪种方法最快.所以,我把测试程序汇总在一起.代码只是在屏幕上反复显示帧缓冲,尽可能快.
这些是我获得的结果,对于在32位视频模式下运行的32位数据 - 他们可能会让一些人感到惊讶:
- Direct3D (1): 500 fps
- Direct3D (2): 650 fps
- DirectDraw (3): 1100 fps
- DirectDraw (4): 800 fps
- GDI (SetDIBitsToDevice): 2000 fps
Run Code Online (Sandbox Code Playgroud)
鉴于这些数字:
以下是每个Direct*代码路径调用的简短摘要.如果有人知道使用DirectDraw/Direct3D的更有效方法,请发表评论.
1. CreateTexture(D3DUSAGE_DYNAMIC, D3DPOOL_DEFAULT);
LockRect(); memcpy(); UnlockRect(); DrawPrimitive()
2. CreateTexture(0, D3DPOOL_SYSTEMMEM); CreateTexture(0, D3DPOOL_DEFAULT);
LockRect(); memcpy(); UnlockRect(); UpdateTexture(); DrawPrimitive()
3. CreateSurface(); SetSurfaceDesc(lpSurface = &frameBuffer[0]);
memcpy(); primarySurface->Blt();
4. CreateSurface();
Lock(); memcpy(); Unlock(); primarySurface->Blt();
Run Code Online (Sandbox Code Playgroud) 我正在编写一个着色器,通过绘制阴影圆圈在点精灵上渲染球体,并且需要编写深度分量和颜色,以便彼此相邻的球体正确相交.
我使用的代码类似于Johna Holwerda编写的代码:
void PS_ShowDepth(VS_OUTPUT input, out float4 color: COLOR0,out float depth : DEPTH)
{
float dist = length (input.uv - float2 (0.5f, 0.5f)); //get the distance form the center of the point-sprite
float alpha = saturate(sign (0.5f - dist));
sphereDepth = cos (dist * 3.14159) * sphereThickness * particleSize; //calculate how thick the sphere should be; sphereThickness is a variable.
depth = saturate (sphereDepth + input.color.w); //input.color.w represents the depth value of the pixel on …
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习DirectX编程.但我遇到了障碍.
我好像错过了这个文件:d3dcompiler_43.dll
我安装了(按此顺序):
我想我需要一个DirectX SDK,但这个链接说我没有:
从Windows 8开始,DirectX SDK作为Windows SDK的一部分包含在内.
我应该只安装DirectX Distributable吗?我担心会给我这个dll但是我也会遗漏其他的东西......
这是我得到的确切错误:
无法加载DLL"d3dcompiler_43.dll":找不到指定的模块.(来自HRESULT的异常:0x8007007E)
更新: 我跑了dxdiag
,它说我安装了DirectX 11 ......不知道为什么我不能让这个工作.
我需要弄清楚如何将D3D纹理和曲面的数据恢复到系统内存.做这些事情的最快方法是什么?
另外,如果我只需要一个subrect,那么如何只读回那部分而不必将整个内容读回系统内存?
总之,我正在寻找如何将以下内容复制到系统内存的简明描述:
这是Direct3D 9,但关于D3D的新版本的答案也将受到赞赏.
我正在编写一个需要从XBox 360控制器获取输入的程序.输入将以无线方式发送到我正在建造的RC直升机上.
到目前为止,我已经了解到这可以使用DirectX的XInput库或XNA中的Input框架来完成.
我想知道是否还有其他选择.我的程序范围相当小,并且必须安装像DirectX或XNA这样的大型游戏库似乎过多.此外,我希望该程序是跨平台的,而不是微软特定的.
有一种简单的轻量级方法,我可以用像Python这样的东西来获取控制器输入吗?
编辑以回答一些评论:
直升机总共有6个螺旋桨,分布在3个同轴对中.基本上,它将与此非常相似,只需花费约1,000美元而不是15,000美元.它将使用Arduino进行板载处理,使用Zigbee进行无线控制.
选择360控制器是因为它设计得很好.它非常符合人体工程学,并且具有所需的所有控制输入.对于熟悉直升机控制的人来说,左操纵杆将控制集体,右控制杆控制俯仰和滚转,模拟触发器将控制偏航.模拟触发器是360控制器的一大特色.PS和大多数其他人没有它们.
我有一个项目的网页,但它仍然很稀疏.我确实计划记录整个设计,所以最终它会很有趣.
http://tricopter.googlecode.com
在旁注中,是否会杀死谷歌为googlecode项目提供博客功能?
我希望360控制器输入程序尽可能在Linux和Windows中运行.最后,我想将控制器直接连接到嵌入式微控制器板(例如Arduino),这样我就不必通过计算机,但目前它并不是一个高优先级.
在DirectX 10中,您可以使用D3DX10提供的字体界面.在DirectX 11中,您应该使用DirectWrite.但看起来DirectWrite本身并不能说Direct3D?有什么基本的东西我不见了吗?如何使用DirectX 11绘制简单文本?
我的开发平台是windows 7 x64.我已经安装了VS2012,我想编译一个包含一些Dx11代码的项目.
具体来说,它包括以下文件:
#include <d3dx11.h>
#include <d3dx10.h>
Run Code Online (Sandbox Code Playgroud)
和链接
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
Run Code Online (Sandbox Code Playgroud)
我已经在我的开发机器上安装了VS2011,但我想在VS2012中尝试使用本机C++的单元测试工具.
由于安装了VS2011并使用DirectShow代码,我安装了Windows 7.1 SDK.
VS2012选择了这个并引用了7.1 SDK,但在VS2012下使用引用的7.1 SDK编译我的项目给出了错误:
"warning C4005: '__useHeader' : macro redefinition"
Run Code Online (Sandbox Code Playgroud)
我用Google搜索了这个,并在social.msdn.microsoft.com上找到了类似我的查询.并且解决方案建议使用Windows 8工具包而不是7.1 SDK进行链接以解决此问题.
Windows 8套件包括d3d11.h之类的标题,但不包括d3dx11.h.
我怎样才能包括与Windows 8的试剂盒,但没有得到多个"宏定义"错误一起d3dx11(从DX SDK)?