2015-11-09 3 views
1

Я читал об аппаратных настройках. Я хотел применить его к примитивам вместо моделей. Но мой вопрос: Я хочу, чтобы нарисовать круг строить вершины (в общей 6300 Вершине для всех кругов)Аппаратное обеспечение для примитивов

Должен ли я установить преобразование матрицы для каждой вершины?

Заранее спасибо

ответ

0

Это то, что MSDN должен сказать относительно GraphicsDevice.DrawInstancedPrimitives

Этого метод обеспечивает механизм для сбора вершинного шейдера входных данных из разных потоков на разных частотах (обычно путем интерпретации одного поток данных как глобальное преобразование для каждого экземпляра); этот подход требует, чтобы пользовательский шейдер интерпретировал входные данные. Для получения дополнительной информации см. DrawInstancedPrimitives в XNA Game Studio 4.0. Tell me more

Возвращаясь к вашему вопросу:

Должен ли я установить преобразование матрицы для каждой вершины?

Нет, вы этого не сделаете. Экземпляр (а не каждая вершина) будет иметь преобразование, которое вы связываете с вашим шейдером перед рендерингом. Модель/экземпляр будет иметь преобразование, описывающее его положение в мире. Каждая вершина по существу относится к координате , описывающей смещение от начала координат модели.

например. любезно Shawn Hargreaves Blog

float4x4 WorldViewProj; 

void InstancingVertexShader(inout float4 position : POSITION0, 
          in float4x4 world : TEXCOORD0) 
{ 
    position = mul(mul(position, transpose(world)), WorldViewProj); 
} 

... код XNA: снова любезно Shawn Hargreaves Blog

instanceVertexBuffer.SetData(instanceTransformMatrices, 0, numInstances, SetDataOptions.Discard); 

graphicsDevice.SetVertexBuffers(modelVertexBuffer, new VertexBufferBinding(instanceVertexBuffer, 0, 1)); 
graphicsDevice.Indices = indexBuffer; 
instancingEffect.CurrentTechnique.Passes[0].Apply(); 

graphicsDevice.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 
             modelVertexBuffer.VertexCount, 0, 
             indexBuffer.IndexCount/3, 
             numInstances); 
+0

Спасибо! У меня есть только один маленький вопрос: мне нужно определить собственное VertexDeclaration или я могу использовать VertexDeclaration экзамена VertexPositionColor –

+0

@ λExpression. Добро пожаловать. Я не уверен в этом. Пример, показанный здесь (http://blogs.msdn.com/b/shawnhar/archive/2010/06/17/drawinstancedprimitives-in-xna-game-studio-4-0.aspx), использует пользовательскую декларацию но я не знаю, требуется ли это. – MickyD

+0

Howdy дорогой друг. Я думаю, что могу использовать свой собственный vertexbuffer с собственным объявлением. Вероятно, это обрабатывается отдельно, так как вы можете увидеть «graphicsDevice.SetVertexBuffers (modelVertexBuffer, новый VertexBufferBinding (instanceVertexBuffer, 0, 1)); В любом случае, спасибо –

Смежные вопросы