🎨 graphics - Graphics and Rendering

OpenGL, Vulkan, 2D/3D Graphics, Shaders, Textures

163
Functions
1,624
Lines
53 KB
Size

🚀 Quick Start

içe_aktar graphics

// Create window
değişken pencere = graphics.window_create("BERK Graphics", 800, 600)

// OpenGL context
değişken gl = graphics.gl_context_create(pencere)
graphics.gl_make_current(gl)

// Shader program
değişken vertex_shader = graphics.shader_compile(VERTEX_SHADER, vertex_code)
değişken fragment_shader = graphics.shader_compile(FRAGMENT_SHADER, fragment_code)
değişken program = graphics.program_link(vertex_shader, fragment_shader)

// Vertex data
değişken vertices = [
    -0.5, -0.5, 0.0,  // bottom left
     0.5, -0.5, 0.0,  // bottom right
     0.0,  0.5, 0.0   // top
]

değişken vbo = graphics.buffer_create()
graphics.buffer_data(vbo, vertices)

// Render loop
döngü yap
    graphics.clear(0.2, 0.3, 0.3, 1.0)
    
    graphics.program_use(program)
    graphics.draw_arrays(TRIANGLES, 0, 3)
    
    graphics.window_swap_buffers(pencere)
    graphics.poll_events()
    
    eğer graphics.window_should_close(pencere) ise yap
        kır
    son
son

📚 Features

💡 Examples

Textured Cube with Camera

içe_aktar graphics, math, image

// Cube vertices with texture coordinates
değişken cube_vertices = [
    // position        // texcoord
    -0.5, -0.5, -0.5,  0.0, 0.0,
     0.5, -0.5, -0.5,  1.0, 0.0,
     0.5,  0.5, -0.5,  1.0, 1.0,
    // ... (other faces)
]

// Load texture
değişken texture = graphics.texture_create()
değişken img = image.load("crate.png")
graphics.texture_data(texture, img.genişlik, img.yükseklik, img.veri)
graphics.texture_set_filter(texture, LINEAR, LINEAR_MIPMAP_LINEAR)
graphics.texture_generate_mipmap(texture)

// Camera
değişken kamera = yap
    pozisyon: [0.0, 0.0, 3.0],
    hedef: [0.0, 0.0, 0.0],
    yukarı: [0.0, 1.0, 0.0]
son

// Transformation matrices
değişken model = math.mat4_rotate_y(graphics.time() * 50.0)
değişken view = math.mat4_look_at(kamera.pozisyon, kamera.hedef, kamera.yukarı)
değişken projection = math.mat4_perspective(45.0, 800.0/600.0, 0.1, 100.0)

// Render
graphics.program_use(program)
graphics.program_set_mat4(program, "model", model)
graphics.program_set_mat4(program, "view", view)
graphics.program_set_mat4(program, "projection", projection)
graphics.texture_bind(texture, 0)
graphics.draw_arrays(TRIANGLES, 0, 36)

Post-Processing Effect

içe_aktar graphics

// Create framebuffer
değişken fbo = graphics.framebuffer_create()
değişken color_texture = graphics.texture_create()
graphics.texture_data(color_texture, 800, 600, yok)
graphics.framebuffer_attach_texture(fbo, color_texture)

// Post-processing shader (grayscale)
değişken post_shader = graphics.program_create("
    #version 330
    in vec2 TexCoord;
    out vec4 FragColor;
    uniform sampler2D screenTexture;
    
    void main() {
        vec3 color = texture(screenTexture, TexCoord).rgb;
        float gray = 0.299 * color.r + 0.587 * color.g + 0.114 * color.b;
        FragColor = vec4(gray, gray, gray, 1.0);
    }
")

// Render loop
döngü yap
    // 1. Render scene to framebuffer
    graphics.framebuffer_bind(fbo)
    graphics.clear(0.1, 0.1, 0.1, 1.0)
    render_scene()
    
    // 2. Apply post-processing
    graphics.framebuffer_bind_default()
    graphics.clear(0.0, 0.0, 0.0, 1.0)
    graphics.program_use(post_shader)
    graphics.texture_bind(color_texture, 0)
    graphics.draw_fullscreen_quad()
    
    graphics.window_swap_buffers(pencere)
son

← All Modules