c++ - 如何同时使用实例化和世界翻译?
问题描述
我正在尝试优化我的应用程序,因此我开始使用实例化来避免对同一对象的多次绘制调用。但我无法理解的是如何将每个实例对象定位在正确的位置,我一直在学习 Rastertek 教程,这是他们的着色器代码:
struct VertexInputType
{
float4 position : POSITION;
float2 tex : TEXCOORD0;
float3 instancePosition : TEXCOORD1;
};
struct PixelInputType
{
float4 position : SV_POSITION;
float2 tex : TEXCOORD0;
};
////////////////////////////////////////////////////////////////////////////////
// Vertex Shader
////////////////////////////////////////////////////////////////////////////////
PixelInputType TextureVertexShader(VertexInputType input)
{
PixelInputType output;
// Change the position vector to be 4 units for proper matrix calculations.
input.position.w = 1.0f;
// Update the position of the vertices based on the data for this particular instance.
input.position.x += input.instancePosition.x;
input.position.y += input.instancePosition.y;
input.position.z += input.instancePosition.z;
// Calculate the position of the vertex against the world, view, and projection matrices.
output.position = mul(input.position, worldMatrix);
output.position = mul(output.position, viewMatrix);
output.position = mul(output.position, projectionMatrix);
// Store the texture coordinates for the pixel shader.
output.tex = input.tex;
return output;
}
我一直在我的世界矩阵上使用XMMatrixTranslation
fromDirectXMath.h
来放置每个对象,但现在看起来实例对象必须直接在着色器上获取它们的坐标,并且我知道这将对每个实例上的每个顶点完成.
这真的让我很困惑,如果对象的每个实例都已经被放置在世界中,那么世界矩阵的目的是instancePosition
什么?如果有办法继续使用我的世界矩阵将同一对象的每个实例转换到世界上,那对我来说会好很多倍,但我不知道是否有可能,如果有人知道任何可以帮助我的事情这会很棒。
解决方案
推荐阅读
- javascript - 数据表布局被scrollX弄乱了
- ruby-on-rails - 警告:Bundler 的运行版本比创建锁文件错误的版本旧
- php - 使用具有自定义数组作为参数的php执行oracle函数
- python - 从excel读取时熊猫合并单元格问题
- amazon-web-services - 如何订阅 Amazon AWS Lambda 函数中的 MQTT 主题?
- kubernetes - 由于 PSP(pod 安全策略)而导致 node-exporter 出现问题
- java - CDI @Produces Javadoc 需求说明
- android - 领域获得匹配查询的某些属性而不是所有属性?
- flutter - 有没有办法在 Flutter 中实现 Google Places 自动完成功能?
- javascript - 运行站点时端口 80 和 5500 之间的不同错误