in

Desafío: Dibujar con metal-cpp – Descubrir – Desarrollador de Apple

Desafío: Dibujar con metal-cpp - Descubrir - Desarrollador de Apple

El metal es la base para gráficos acelerados y poder de cómputo en las plataformas de Apple, y si está familiarizado con C++, ahora es el momento perfecto para explorar su increíble poder. Para este desafío, lo invitamos a probar metal-cpp y renderizar su propio triángulo, esfera o incluso una malla en Xcode.

¡También lo invitamos a visitar el Graphics & Games Study Hall durante el día para colaborar en este desafío! Haga preguntas, conéctese con otros desarrolladores y comparta sus creaciones.

Empieza el reto

Antes de comenzar, querrá ver “Programa Metal en C++ con metal-cpp” y descargar el proyecto LearnMetalCPP, que contiene una serie de ejemplos de C++.

Desafío: Dibujar con metal-cpp - Descubrir - Desarrollador de Apple

Programa Metal en C++ con metal-cpp

Tus juegos y aplicaciones de C++ ahora pueden aprovechar el poder de Metal. Le mostraremos cómo metal-cpp lo ayuda a unir su código C++ con Metal, explorar cómo cada uno administra los ciclos de vida de los objetos y demostrar las utilidades que pueden ayudar a que estos lenguajes cooperen en su aplicación. También compartiremos las mejores prácticas para diseñar…

Descarga el proyecto LearnMetalCPP

Abra el proyecto en Xcode y elija 00-window.cpp como su código base. Para renderizar su imagen, deberá configurar algunas cosas dentro de su proyecto.

Primero, crea un MTL::RenderPipelineState objeto con un MTL::RenderPipelineDescriptor. Para hacer esto, deberá crear una función, como buildShaders(). En el fragmento de código a continuación, proporcionamos el código de sombreado necesario para representar un solo triángulo.

void Renderer::buildShaders()
{
    using NS::StringEncoding::UTF8StringEncoding;

    const char* shaderSrc = R"(
        #include <metal_stdlib>
        using namespace metal;
        struct AAPLVertex
        {
            float3 position;
            half3  color;
        };
    
        // Welcome to modify the mesh as you want
        constant AAPLVertex triangles[] = {
            { float3{ -0.8f,  0.8f, 0.0f }, half3{  1.0, 0.3f, 0.2f } },
            { float3{  0.0f, -0.8f, 0.0f }, half3{  0.8f, 1.0, 0.0f } },
            { float3{ +0.8f,  0.8f, 0.0f }, half3{  0.8f, 0.0f, 1.0 } }
        };
    
        struct v2f
        {
            float4 position [[position]];
            half3 color;
        };

        v2f vertex vertexMain( uint vertexId [[vertex_id]])
        {
            v2f o;
            o.position = float4( triangles[ vertexId ].position, 1.0 );
            o.color = half3 ( triangles[ vertexId ].color );
            return o;
        }

        half4 fragment fragmentMain( v2f in [[stage_in]] )
        {
            return half4( in.color, 1.0 );
        }
    )";
    
    
}

Luego, extienda la Renderer::draw( MTK::View* pView) función configurando un MTL::RenderPipelineState e insertar sorteos.

void Renderer::draw(  MTK::View* pView  )
{
...
    
    
...
}

Después:

  • Crear el MTL::RenderPipelineDescriptor objeto y configurar algunas propiedades.
  • Crear el MTL::RenderPipelineState objeto.
  • Sugerencia: tenga cuidado con los ciclos de vida de los objetos.

¿Listo para compartir tu arte de metal-cpp con la comunidad? Muéstranos lo que has hecho en Twitter con el hashtag #WWDC22Challenges, o comparte tu trabajo en Graphics & Games Study Hall. Y si desea hablar sobre metal-cpp y otros temas de gráficos y juegos, únase al equipo en los eventos durante toda la semana en WWDC22.

Explore #WWDC22Challenges en las redes sociales

Lee los términos y condiciones de los desafíos de la WWDC22



Fuente

Written by TecTop

Cómo configurar y usar Drop In en dispositivos Amazon Echo

Cómo configurar y usar Drop In en dispositivos Amazon Echo

Un fan art de Dragon Ball Super da a Granolah un cambio de imagen estilo DBZ

Un fan art de Dragon Ball Super da a Granolah un cambio de imagen estilo DBZ