🎨 graphics - Grafik ve Rendering
OpenGL, Vulkan, 2D/3D Graphics, Shaders, Textures
163
Fonksiyon
1,624
Satır
53 KB
Boyut
🚀 Hızlı Başlangıç
içe_aktar graphics
// Window oluştur
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, // sol alt
0.5, -0.5, 0.0, // sağ alt
0.0, 0.5, 0.0 // üst
]
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
📚 Özellikler
- OpenGL 3.3+: Modern OpenGL API
- Vulkan: Low-level graphics API (experimental)
- Shaders: GLSL vertex/fragment/geometry/compute shaders
- Textures: 2D/3D textures, mipmaps, filtering
- Framebuffers: Render-to-texture, post-processing
- 3D Math: Matrices, vectors, quaternions
💡 Örnekler
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,
// ... (diğer yüzler)
]
// 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
// Framebuffer oluştur
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 sahneyi framebuffer'a
graphics.framebuffer_bind(fbo)
graphics.clear(0.1, 0.1, 0.1, 1.0)
render_scene()
// 2. Post-processing uygula
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