Pregunta

Intenté escribir una función TransformMesh . La función acepta un objeto Mesh y un objeto Matrix . La idea es transformar la malla usando la matriz. Para hacer esto, bloqueé el búfer de vértices y llamé a Vector3 :: TransformCoordinate en cada vértice. no produjo los resultados esperados. La malla resultante era irreconocible.

¿Qué estoy haciendo mal?

// C++/CLI code. My apologies.
int n = verts->Length;
for(int i = 0; i < n; i++){
        verts[i].Position = DX::Vector3::TransformCoordinate(verts[i].Position, matrix);
}
¿Fue útil?

Solución

Estoy totalmente de acuerdo con Coincoin, el código contextual ayudaría.
Y si solo desea dibujar una malla transformada en la pantalla, no necesita transformar la malla de esta manera. Simplemente puede cambiar una de las matrices de mundo, vista y proyección. Esto produce el resultado esperado. Como en el siguiente código de muestra.

      // Clear the backbuffer to a Blue color.
  device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue,   
     1.0f, 0);

  // Begin the scene.
  device.BeginScene();

  device.Lights[0].Enabled = true;

  // Setup the world, view, and projection matrices.
  Matrix m = new Matrix();

  if( destination.Y != 0 )
     y += DXUtil.Timer(DirectXTimer.GetElapsedTime) * (destination.Y 
          * 25);

  if( destination.X != 0 )
     x += DXUtil.Timer(DirectXTimer.GetElapsedTime) * (destination.X 
          * 25);

  m = Matrix.RotationY(y);
  m *= Matrix.RotationX(x);

  device.Transform.World = m;
  device.Transform.View = Matrix.LookAtLH(
      new Vector3( 0.0f, 3.0f,-5.0f ),
      new Vector3( 0.0f, 0.0f, 0.0f ),
      new Vector3( 0.0f, 1.0f, 0.0f ) );   
  device.Transform.Projection = Matrix.PerspectiveFovLH(
      (float)Math.PI / 4, 1.0f, 1.0f, 100.0f );

  // Render the teapot.
  teapot.DrawSubset(0);

  // End the scene.
  device.EndScene();

Esta muestra se toma de aquí .

Otros consejos

Sin un código contextual sobre lo que está haciendo, puede ser difícil saber el problema exacto. ¿Cómo se crea la malla? ¿Cómo se lee verts [], cómo se escribe? ¿Estás intentando leer desde un búfer de vértices de solo escritura?

Mi recomendación sería probar primero con una matriz de traducción muy simple y depurar el código y ver la entrada y salida del vértice. Vea si recibe buenos datos y si se transforman correctamente. Si es así, el problema está en el paso de vértices, la declaración de flujo o algo más profundo en la tubería de DirectX.

Como dije, se necesitaría más código para determinar el origen del problema.

Recomiendo usar la función D3DXConcatenateMeshes. Pase una malla y una matriz. El resultado será una malla transformada. Es bastante fácil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top