تقديم قائم على الأجهزة بقيمة 3D هندسة

إنشاء الأجهزة وتقديم هندسة 3D

مطلوب تقديم شكل هندسي 3D ، تظليل ، مخازن وحالة تقديم. لا يمكن لأي منهم العمل دون الآخر.

  • Uuffers-قوائم riangle Tهي مثلثات فردية محددة في صفيف يشار إليها أحيانا باسم المخزن المؤقت. In قائمة مثلث ، يتم تحديد كل مثلث بشكل فردي. يمكن مشاركة oinللمثلث باستخدام مؤشرات لتقليل كمية البيانات التي يجب تمريرها إلى أجهزة الرسومات.
  • Sهادرز-It يحدد كيفية تحويل المثلثات من الفضاء العالمي إلى مساحة الشاشة وحساب لون بكسل النهائي في الجانب GPU
  • Render تيتس-يوفر It المعلمات ل GPraraالمثلثات إلى بكسل.

لغة تظليل OpenGL (GLSL) هي لغة تظليل قياسية عالية المستوى لرسومات OpenGL API. توضح طريقة InitRenderer في ملف AssetBrowser/Controls/RenderView.cs ضمن التطبيق التجريبي (الاسم: AssetBrowser) الاستخدام البسيط لـ GLSL باستخدام Aspose.3D API. هناك ثلاثة أنواع من التظليل شائعة الاستخدام: تظليل الرأس ، تظليل الشظية ، تظليل الهندسة.

فئة GLSLSource تخبر المستعرض ، رمز المصدر هو لغة تظليل OpenGL ، ويمكن تجميعها إلى فئة ShaderProgram. تحدد فئة ShaderVariable المتغيرات المستخدمة في التظليل. تُستخدم فئة VariableSemantic لتحديد الدلالية لمتغير التظليل ، Aspose. سيقوم المستعرض 3D بإعداد قيم متغير التظليل تلقائيًا بناءً على الدلالات.

Pروغرامينغ ple وافرة ل Shader

هذا المثال رمز تهيئة العارضين وتظليل للشبكة. يمكنك تنزيل مشروع العمل الكامل لهذا المثال من هنا.

// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET
private void InitRenderer()
{
    // Create a default camera, because it's required during the viewport's creation.
    camera = new Camera();
    Scene.RootNode.CreateChildNode("camera", camera);
    // Create the renderer and render window from window's native handle
    renderer = Renderer.CreateRenderer();
    // Right now we only support native window handle from Microsoft Windows
    // We'll support more platform on user's demand.
    window = renderer.RenderFactory.CreateRenderWindow(new RenderParameters(), Handle);
    // Create 4 viewports, the viewport's area is meanless here because we'll change it to the right area in the SetViewports later
    viewports = new[]
    {
        window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
        window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
        window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1)),
        window.CreateViewport(camera, Color.Gray, RelativeRectangle.FromScale(0, 0, 1, 1))
    };
    SetViewports(1);


    //initialize shader for grid

    GLSLSource src = new GLSLSource();
    src.VertexShader = @"#version 330 core
    layout (location = 0) in vec3 position;
    uniform mat4 matWorldViewProj;
    void main()
    {
        gl_Position = matWorldViewProj * vec4(position, 1.0f);
    }";
                src.FragmentShader = @"#version 330 core
    out vec4 color;
    void main()
    {
        color = vec4(1, 1, 1, 1);
    }";
    // Define the input format used by GLSL vertex shader the format is struct ControlPoint { FVector3 Position;}
    VertexDeclaration fd = new VertexDeclaration();
    fd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position);
    // Compile shader from GLSL source code and specify the vertex input format
    gridShader = renderer.RenderFactory.CreateShaderProgram(src, fd);
    // Connect GLSL uniform to renderer's internal variable
    gridShader.Variables = new ShaderVariable[]
    {
        new ShaderVariable("matWorldViewProj", VariableSemantic.MatrixWorldViewProj)
    };

    SceneUpdated("");
}

Pروغرامينغ ple وافرة ل Bأوفر و Render تايت

Tله رمز المثال يبدأ المخزن المؤقت وتقديم الدولة للشبكة.

// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET
class Grid : ManualEntity
{
    public Grid(Renderer renderer, ShaderProgram shader)
    {
        // Render state for grid
        RenderState = renderer.RenderFactory.CreateRenderState();
        RenderState.DepthTest = true;
        RenderState.DepthMask = true;
        this.Shader = shader;
        // Define the format of the control point to render the line
        VertexDeclaration vd = new VertexDeclaration();
        vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position);
        // and create a vertex buffer for storing this kind of data
        this.VertexBuffer = renderer.RenderFactory.CreateVertexBuffer(vd);
        // Draw the primitive as lines
        this.DrawOperation = DrawOperation.Lines;
        this.RenderGroup = RenderQueueGroupId.Geometries;

        List<FVector3> lines = new List<FVector3>();
        for (int i = -10; i <= 10; i++)
        {
            // Draw - line
            lines.Add(new FVector3(i, 0, -10));
            lines.Add(new FVector3(i,0, 10));


            // Draw | line
            lines.Add(new FVector3(-10, 0, i));
            lines.Add(new FVector3(10, 0, i));
        }
        // Put it to vertex buffer
        VertexBuffer.LoadData(lines.ToArray());
    }
}