Articles of 实例

我应该什么时候使用实例化与常量缓冲区?

我听说过一些关于实例化的东西,并且明白这对于稍微改变多次绘制同一个对象是有用的。 这样做速度更快,因为每帧调用draw函数一次,并在每个帧更新一次缓冲区(在本例中为实例缓冲区),同时使用常量缓冲区,例如,如果需要世界matrix,则必须每隔一次更新常量缓冲区目的。 但是如果我只有一个对象,使用一个不变的缓冲区,实例化会更快(或者至less是一样快)吗? 通过实例化,您只需要调用一个更新缓冲区函数(对于顶点实例缓冲区),而使用CB则需要两个调用:一个用于顶点缓冲区,另一个用于常量缓冲区。 关于实例的另一个问题: 因为我必须每帧更新一次实例缓冲区,所以我需要用DYNAMIC_USAGE创建它,并且用一个字节宽度表示一次调用可以绘制的最大对象数量。 例如,如果我想传递一个matrix,我需要insBufferdesc.bwitdh= sizeof(matrixtype)*maxNumObjs 。 这是正确的吗? 鉴于maxNumObjs是20,我只想渲染10个objs,我应该只更新缓冲区的前10个matrix,并调用drawInstanced(…, 10) 。 如果我不使用所有的缓冲区,我会得到一些错误?

每个实例的世界matrix是0.0f / NaN

我试图用硬件实例绘制一些立方体。 但是他们不显示。 所以我debugging了我的代码,发现问题的根源: 在我的VertexShader中,具有每个实例世界matrix的var值为: {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,NaN,NaN,NaN} 最奇怪的是它NaN(不是一个数字)。 以下是我创建实例化缓冲区的方法: XMMATRIX trans[4]; trans[0] = XMMatrixTranslation(0.0f, 0.0f, 0.0f); trans[1] = XMMatrixTranslation(0.5f, 0.5f, 0.5f); trans[2] = XMMatrixTranslation(-0.5, -0.5, 0.5); trans[3] = XMMatrixTranslation(0.5, -0.5f, 0.5); //Store world matrices for (int i = 0; i < 4; i++) XMStoreFloat4x4(&mIV[i].world, trans[i]); D3D11_BUFFER_DESC instDesc; ZeroMemory(&instDesc, sizeof(D3D11_BUFFER_DESC)); instDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; instDesc.Usage = D3D11_USAGE_DYNAMIC; instDesc.ByteWidth = […]

实例化效果

大约有多less实例能够生效? DirectXdynamic缓冲区似乎比不可变的缓冲区多一点。 所以显然你不想为一个网格创建一个dynamic的缓冲区。 那么两三个呢? 我意识到可能有很多变数要考虑,但只是为了掌握它呢?

实例化花费太长时间?

我有一个游戏,有大约4个空物体是我的对象“产卵者”。 我有两个脚本附加到他们所有的人,将保持产卵对象从"basictable" ,然后切换到其他组件,然后从"basictable"产卵对象。 这是我的第一个脚本: public void SpawnA() { if (destroyer.spawncount < destroyer.spawnchange) { //if condition int randomi = Random.Range (0, basictable.Length); Instantiate (basictable[randomi], new Vector3 (this.transform.position.x,this.transform.position.y,basictable[randomi].transform.position.z), Quaternion.identity); Invoke ("SpawnA", Random.Range (mini, maxi)); } else if (keep){ this.GetComponent<spawnscript2>().SpawnB(); keep = false; } 而第二个脚本: public void spawnB() { int randomi = Random.Range (0, complextable.Length); bobo = (GameObject) […]

Unity – DontDestroyOnLoad – FindObjectsOfType(GetType())。长度总是返回1

我试图有一个与DontDestroyOnLoad属性的对象。 我想要一个带有NetworkIdentity的对象在场景中持久化,所以我可以拥有RPC的持有者脚本。 这个答案建议下面的代码: public void Awake() { DontDestroyOnLoad(this); if (FindObjectsOfType(GetType()).Length > 1) { Destroy(gameObject); } } 尽管如此,我还是得到了重复的对象。 FindObjectsOfType(GetType()).Length总是返回1,我不知道为什么,或者如何解决它。 这个对象是层次结构中的预制实例还是简单对象都没有区别。 我也尝试克隆这个对象在我的NetworkManager脚本,它是自动持久的,但GameObject.Find("ObjectNameHere(Clone)")总是返回false。 但是,上面的解决scheme似乎更简单,所以我宁愿找出FindObjectsOfType(GetType()).Length 。

实例化像素着色器参数 – 通过顶点着色器传递实例数据?

我正在处理一个延迟着色器,我想用实例来绘制点光源。 据我所知,我可以通过顶点着色器发送实例数据,并将其传递给像素着色器。 这是否是正确的方法,或者我可以将实例数据以某种方式直接发送给像素着色器?

体素引擎的硬件实例

我刚刚从这个来源的硬件实例教程: http : //www.float4x4.net/index.php/2011/07/hardware-instancing-for-pc-in-xna-4-with-textures/ 。 在900.000和1.000.000之间的某个地方绘制了多维数据集的调用,我得到这个错误“XNA Framework HiDefconfiguration文件支持的最大VertexBuffer大小为67108863.” 而在900K仍然运行顺利。 这比100x100x100略less一点,这正好是一百万。 现在我已经看到了具有非常“微小”体素的体素引擎,在崎岖的地形和体面的远景平面上,您可以轻松获得1,000,000个立方体。 显然,我可以在几何缓冲区方法中优化很多,比如只渲染一个立方体的可见面,或者如果区域是平坦的,则使用覆盖多个立方体的较大面。 但是,我可以使用最大的67MB的顶点缓冲区,或者我可以创建多个?

绑定一个实例matrix和一个InputLayout

如果我想将一个实例matrix绑定到一个顶点着色器,我该如何去做呢? 例如,这里是一个超级简单的VSinput: struct VS_IN { float4 Position : POSITION; row_major float4x4 WorldMat : INSTANCE_TRANSFORM; }; 在创建ID3D11InputLayout时,相应的绑定将如何查看? 我认为这将是类似于: D3D11_INPUT_ELEMENT_DESC[] bindings = …; bindings[0] = { "POSITION", // SemanticName 0U, // SemanticIndex DXGI_FORMAT::DXGI_FORMAT_R32G32B32A32_FLOAT, // Format 0U, // InputSlot 0U, // AlignedByteOffset D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA, // InputSlotClass 0U // InstanceDataStepRate }; bindings[1] = { "INSTANCE_TRANSFORM", // SemanticName 0U, // SemanticIndex […]

Unity Singleton跨越多个场景

我有一个游戏,我的代码被devise为在一个场景中,所以我实现了一个单例: public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour { private static bool _applicationIsQuitting; private static readonly object Locker = new object (); protected static T Instance; public static T GetInstance { get { if (_applicationIsQuitting) { return null; } lock (Locker) { if (Instance == null) { Instance = (T)FindObjectOfType (typeof(T)); if (FindObjectsOfType […]

游戏制作 – 当健康为0时创建实例

我有五个对象: obj_Boss , obj_bossHealth , obj_GameOver , obj_BtnOK和obj_rec2 。 这就是我要的。 当obj_Boss没有健康状态时, obj_GameOver和obj_BtnOK将会出现。 这是我的第一个方法: 在obj_bossHealth ,我有这些事件: 创建事件:将var global.bossHealth to 100设置global.bossHealth to 100 绘制事件:draw_healthbar 在obj_Boss ,我有这些事件: 碰撞obj_rec2 :设置var global.bossHealth relative to -1.5 ; 破坏实例(其他) 没有更多健康:创建obj_GameOver实例; 创建obj_BtnOK实例 这是我的第二个方法: 在obj_bossHealth ,我有这些事件: 创建事件:将var global.bossHealth to 100设置global.bossHealth to 100 绘制事件:draw_healthbar Step Event:如果global.bossHealth is equal to 0则创建obj_GameOver实例并创建obj_BtnOK实例 在obj_Boss ,我有这些事件: 碰撞obj_rec2 :设置var global.bossHealth […]