کتابخانهٔ رایگان Go برای رندرینگ و تبدیل سهبعدی
برترین کتابخانهٔ گرافیک سهبعدی منبع باز Go برای کار با مشهای سهبعدی، سایهزنی و مواد سفارشی، تبدیلهای سهبعدی، رندرینگ چندنخی، ضدلکه و غیره.
کتابخانه FauxGL چیست؟
FauxGL یک کتابخانه نوآورانه منبع باز Go برای سهبعدی است که توسط مایکل فوگلمن توسعه یافته و رندرینگ سهبعدی نرمافزاری صرفاً با Go بدون وابستگیهای خارجی را ارائه میدهد. این ابزار سبک اما قدرتمند برای توسعهدهندگانی که به دنبال یک API رایگان Go برای سهبعدی به منظور راهحلهای گرافیکی قابل حمل هستند، ایدهآل است. این کتابخانه از ویژگیهای اساسی مانند تبدیلهای راس، وارد کردن و دستکاری مشهای سهبعدی، شیدینگ سفارشی، مدیریت مواد، کنترل پرسپکتیو و دوربین، رسترایز مثلث، درونیابی رنگ، نگاشت بافت، رندرینگ سیمکشی، بافر عمق و حذف سطوح مخفی پشتیبانی میکند. توسعهدهندگان نرمافزار میتوانند به راحتی نقشههای STL سهبعدی ایجاد کنند، بخشهایی به فایلهای سهبعدی اضافه کنند و رندرینگ نمودارهای سهبعدی را با دقت انجام دهند، که این کتابخانه را به گزینهای چندمنظوره برای پروژههایی که نیاز به کنترل بالا بر خط لوله رندرینگ دارند، تبدیل میکند.
بر خلاف راهحلهای وابسته به GPU مانند OpenGL یا DirectX، FauxGL بهصورت کامل بر روی CPU پردازش میشود و برای محیطهایی که شتابدهی سختافزاری ندارند یا نیاز به کنترل مستقیم رندر دارند، ایدهآل است. اگرچه برای بازیهای با نرخ فریم بالا طراحی نشده است، اما در رندر آفلاین، تست الگوریتمها، استفاده آموزشی و تولید تجسمها برتری دارد. FauxGL میتواند با فایلهای 3D OBJ و FBX کار کند، فرمتهایی مانند STL، PLY و 3DS را بارگذاری کند و حتی هنگام ادغام در جریانهای کاری گستردهتر، فایلهای 3D را به PDF تبدیل نماید. همچنین توابع داخلی برای ایجاد صفحهها، کرهها، مکعبها، استوانهها و مخروطها دارد که امکان رندر سریع موجودیتهای فایل 3D و اعمال تبدیلات بر نمودارهای 3D را فراهم میکند. FauxGL بهعنوان یک نمایش تمیز و بیانگر از قابلیتهای Go در رندر گرافیک 3D مبتنی بر CPU میباشد.
شروع کار با FauxGL
روش پیشنهادی برای نصب FauxGL استفاده از GitHub است. لطفاً برای نصب روان، از فرمان زیر استفاده کنید.
نصب API FauxGL از طریق دستور Get
go get github.com/fogleman/fauxgl میتوانید کتابخانهٔ مشترک کامپایلشده را از مخزن GitHub دانلود کنید.
رندرینگ صرفاً مبتنی بر CPU از طریق API Go
کتابخانه منبع باز FauxGL از رندرینگ کاملاً مبتنی بر CPU پشتیبانی میکند و به هیچوجه از GPU استفاده نمیکند. هر مثلث، هر پیکسل و هر تبدیل بهصورت کاملاً روی CPU محاسبه میشود. این ویژگی آن را به گزینهای ایدهآل برای محیطهای رندرینگ بدون نمایش (مانند سرورها) یا وظایف ساده پردازش گرافیک بدون وابستگی به GPU تبدیل میکند. اسکریپت کد زیر نشان میدهد چگونه یک صحنه را در برنامههای Go تنظیم کنیم.
چگونه یک صحنه را برای رندرینگ صرفاً مبتنی بر CPU از طریق کتابخانه Go تنظیم کنیم؟
import "github.com/fogleman/fauxgl"
const (
width = 1024
height = 768
)
func main() {
context := fauxgl.NewContext(width, height)
context.ClearColorBufferWithColor(fauxgl.Black)
context.ClearDepthBuffer()
// Now you can start drawing models or primitives!
}
بارگذاری و تبدیل مدلهای سهبعدی
کتابخانه منبع باز FauxGL پشتیبانی کامل برای بارگذاری و کار با مدلهای سهبعدی در برنامههای Go فراهم کرده است. پس از بارگذاری، میتوانید بهراحتی تبدیلاتی مانند مقیاسبندی، چرخش، تغییر اندازه و انتقال را اعمال کنید. در اینجا یک مثال ساده آورده شده است که نشان میدهد توسعهدهندگان نرمافزار چگونه میتوانند فرمتهای Wavefront OBJ، یکی از رایجترین فرمتهای فایل مدل سهبعدی را بارگذاری کرده و با استفاده از کتابخانه Go به آن تبدیل اعمال کنند.
چگونه یک مدل سهبعدی را بارگذاری کرده و تبدیلها را از طریق کتابخانه Go اعمال کنیم؟
mesh, err := fauxgl.LoadOBJ("model.obj")
if err != nil {
panic(err)
}
// Apply transformations
matrix := fauxgl.Identity().
Scale(fauxgl.Vector{1, 1, 1}).
Rotate(fauxgl.V(0, 1, 0), fauxgl.Radians(45)).
Translate(fauxgl.Vector{0, 0, -5})
mesh.Transform(matrix)
عملیات برداری از طریق کتابخانه Go
کتابخانه MathGL پشتیبانی گستردهای برای ریاضیات بردار و ماتریس فراهم میکند، از جمله عملیات برای بردارها و ماتریسهای ۲بعدی، ۳بعدی و ۴بعدی. اینها برای مدیریت موقعیتها، جهتها، سرعتها و سایر دادههای فضایی ضروری هستند. این کتابخانه پشتیبانی از عملیات جمع، تفریق، نقطهای (Dot)، ضرب خارجی (Cross)، نرمالسازی و غیره و انواع دقت چندگانه (mgl32 برای float32، mgl64 برای float64) را ارائه میدهد. در اینجا یک مثال ساده آورده شده است که نشان میدهد توسعهدهندگان نرمافزار چگونه میتوانند عملیاتهای مختلف برداری را در برنامههای Go خود انجام دهند.
چگونه عملیات برداری را از طریق کتابخانه Go انجام دهیم؟
package main
import (
"fmt"
"github.com/go-gl/mathgl/mgl32"
)
func main() {
// Create two 3D vectors
v1 := mgl32.Vec3{1, 2, 3}
v2 := mgl32.Vec3{4, 5, 6}
// Vector addition
sum := v1.Add(v2)
fmt.Println("Vector sum:", sum) // [5 7 9]
// Dot product
dot := v1.Dot(v2)
fmt.Println("Dot product:", dot) // 32
// Cross product
cross := v1.Cross(v2)
fmt.Println("Cross product:", cross) // [-3 6 -3]
}
سایهزنی و مواد سفارشی از طریق Go
میتوانید نحوه سایهدار شدن اشیا را با استفاده از شیدرهای قابل تنظیم در برنامههای Go تعریف کنید. کتابخانه منبع باز FauxGL سیستمی انعطافپذیر برای نوشتن منطق سایهدار کردن خود فراهم میکند — به شما امکان میدهد رنگ، نورپردازی و حتی افکتهای سفارشی را در سطح پیکسل کنترل کنید. موارد زیر نشان میدهد چگونه توسعهدهندگان نرمافزار میتوانند سایهدار کردن ساده مسطح را در برنامههای Go انجام دهند.
چگونه شیدینگ ساده مسطح را در برنامههای Go انجام دهیم؟
shader := func(vertex fauxgl.Vertex) fauxgl.Color {
normal := vertex.Normal.Normalize()
light := fauxgl.Vector{1, 1, 1}.Normalize()
intensity := normal.Dot(light)
baseColor := fauxgl.HexColor(0x3498db) // Light blue color
return baseColor.MulScalar(intensity)
}
context.Shader = shader
context.DrawMesh(mesh)