می تونید به جای دانلود سورس رو از روی svn بگیرید. و کامپایلش کنید. خیلی راحت می تونید با دستکاری فایل config.h گزینه هایی رو که می خوایید اضافه یا کم کنید.راستی لینک دانلودش خرابه میشه واسه ما یه جا دیگه آپلود کنید؟
می تونید به جای دانلود سورس رو از روی svn بگیرید. و کامپایلش کنید. خیلی راحت می تونید با دستکاری فایل config.h گزینه هایی رو که می خوایید اضافه یا کم کنید.راستی لینک دانلودش خرابه میشه واسه ما یه جا دیگه آپلود کنید؟
سلام
چرا دیگه لینکشو گذاشتم
http://kge3d.org/downloads/
فقط چون سورس فورج تحریممون کرده باید یه جوری بتونید دورش بزنید.
انجین به صورت dll قابل استفاده است و از قبل هم به صورت دیباگ و هم ریلیز کامپایل شده.
متاسفانه برای این نسخه مثال آماده نکرده ایم کاری که باید می کردیم.
سلام
درخواست آپیدت اطلاعات رو دادم ولی مثله اینکه سرشون شولوغه و طول می کشه اپدیت کنن
این هم یه لینک دیگه برای دانلود http://kge3d.org/?file_id=6
سلام
خواستم ببینم از دوستان کسی پیشنهادی داره که چه چیزی به انجین برای نسخه بعدی اضافه کنیم؟
یه ادیتور اوپن سورس بهش اضافه کنید خیلی خوب می شه
ادیتور اضافه کردن حالا زوده خیلی چیز های دیگه لازم داره تا به اون مرحله برسه از جمله یه دیزاین بهتر
اگر هم ادیتور اضافه کنیم فقط می شه باهاش صحنه چید
شاید xpsm رو اضافه کردم
http://xmvlad.110mb.com/
Instancing هم قابلیت خوبی می تونه باشه برای اضافه شدن
خب من خيلي وقته كه مي بينم اين موتور رو داري توسعه مي دي واقعا خسته نباشي
2 باري هم فقط دانلودش كردم ولي حتي نگاه نكردم بهش ، حداقل يه جا امكاناتش رو كامل مي نوشتي تا با توجه به امكانات ديگر موتور ها مي گفتيم چه چيزي رو اضافه كني بهتره
در ضمن من تو سايتش دنبال برنامه آماده شده با اين انجين گشتم و چيزي پيدا نكردم بهتره چندتا فايل exe اضافه كني تا قدرت پردازشش رو هم در عمل ببينيم و مهمتر اين كه سايتش طوري باشه تا آدم راحت خواشته هاش رو بطونه تو سايت پيدا كنه
پيروز و موفق باشي
سلام
تو این صفحه امکاناتش رو نوشتم http://kge3d.org/about/
تو قسمت دانلود یه دمو هست که البته برای سه سال پیشه http://kge3d.org/?file_id=3
برای ریلیز بعدی حتما دمو و مثال های بیشتری می زارم برای دانلود
اگر برای سایت هم نظری دارید بگید ممنون می شم
خدا وکیلی یک کلمه فارسی هم تو ساتت نیست
این همه زحمت کشیدی ولی برای چه کسی؟
این مربوط به کل علوم مخصوصا علم کامپیوتر و الکترونیک می شه که به صورت ساعتی دارن پیشرفت میکنن.چه ربطی داره
زبان علم انگلیسی است اینو بدون که اگه کسی زبان بلد نباشه نمی تونه تو صنعت گیم کار کنه.
خوب البته اگر کنار این نسخه ی انگلیسی یه نسخه ی فارسی هم می گذاشتی توی وبت بد نبود چون حتی فارسی زبانانی که انگلیسیشون خوبه هم براشون یکمی سخته که به مغزشون فشار بیارند و تمام این نوشته ها رو به فارسی ترجمه کنند و خوب اینجوری سرعت خوندنش هم میاد پایین و آدم وقت نمی کنه که همه ی مطالبی رو که نوشتی رو مطالعه کنه . پس اگر وقت و حوصلش رو داشتی نسخه ی فارسیش رو هم بگذار .
واقعا این افرادی که شما می گید چقدر علاقه مند هستند :D
همین طور که داریم نسخه 0.0.7 رو می نویسیم در حال طراحی و نوشتن دیزاینی جدید برای نسخه 0.1.0 هستیم
دیزاین جدید مولتی ترد ، پلاگین بیس و کامپوننت بیس است و کدهایی که از اول نوشته می شن یا از نسخه قبلی کپی می شن تر تمیز تر می شن و درست حسابی تر
برای نسخه جدید از nedmalloc به عنوان memory allocator استفاده می کنم.
برای شروع کلاس logger ای که نوشتم تو یه ترد دیگر لاگ می گیرد چون نوشتن تو کنسول یا فایل یه عملیات کند است و می تونه سرعت رو بیاره پایین ولی الان تو یه ترید دیگر این کار رو انجام می ده که باعث می شه سرعت نخوابه
اگه بشه سعی می شه از همین اول کاری پورت لینوکس رو هم بنویسیم
توضیحات بیشتر تو wiki بخونید
http://kge3d.org/wiki/document/developers/
سلام
من دارم روی نسخه 0.1 کار می کنم که در این نسخه قصد ندارم فقط روی گرافیک کار کنم بلکه می خوام این نسخه یک گیم انجین باشه نه فقط رندرینگ انجین.
در این نسخه همه قسمت ها داکیومنت دارن و برای هر قسمت که نوشته می شه یه برنامه تست هم نوشته می شه.
یه چیزهای ابتدایی نوشتم که اینجا قرار می دم تا اگه کسی خواست نگاهی بندازه.
Thread & Mutex for windows and linux
پلاگین
http://kge3d.org/wiki/plugin/
در حال نوشتن یک web player برای انجین هستم که می خوام از java و jni استفاده کنم.
توضیحات بیشتر در لینک زیر اگر هم کسی سوالی داشت بپرسه.
http://kge3d.org/wiki/web-player/
کدهای Plugin Manager رو هم باید برای نسخه لینوکس بنویسم همین طور هم رندر اپن جی ال رو.
الان که دارم از اول کد می زنم موقعیت خوبی هست برای کسانی که دوست دارن تو این پروژه همکاری کنند.
فقط بنازم به این پشتکار هیچ کسیو ندیدم مثل این کوچول بره دنبال علاقش دمش گرم .
کاش یکمی سطحم بالا بود منم می تونستم با هاتون همکاری کنم .الان که دارم از اول کد می زنم موقعیت خوبی هست برای کسانی که دوست دارن تو این پروژه همکاری کنند.
بعد به نظرم خیلی کار خوبیه که قسمت پلاگین رو براش طراحی کردید وانصافاً webplayer خیلی کار می بره البته تا جایی که من می دونم.
سلام
ممنون.
راستی یادم رفت بگم که حداقل نیازها برای همکاری آشنا بودن به زبان سی++ و انگلیسی است.
آره پلاگین هم انعطاف پذیری رو می بره بالا و هم تو کاهش compile time خیلی کمک می کنه هم اینکه کاربرها بعدا می تونن پلاگین های خودشون رو بسازند.
Java Native Interface این امکان رو می ده که تابع های داخل یک dll یا so رو صدا بزنی. کاری که من می کنم اینه که با جاوا یه اپلت می نویسم که تابع های داخل فایل های dll رو صدا بزنه مثل initialize update & shutdown و همین طور هم پوینتر hwnd رو بده به انجین برای ترسیم روی صفحه browser ها.
خوبی ای که این روش داره اینه که کاربر احتیاجی به نصب پلاگین یا ... نداره و فقط داشتن جاوا کافیه که روی 88% از کامپیوتر ها جاوا هست.
همین طور هم راه هایی وجود داره که بشه کدهای java script رو هم تو اون صفحه از وب اجرا کرد.
برای لود شدن تکسچر ها و عکس ها باید یک زمانبندی خوبی ارائه بدید چون یک کاربر نمی تونه 1 ساعت همینطور منتظر لود شدن باشه یعنی سرعت اینترنت کاربر رو بگیرید و نسبت بهش فایل های پیش نیازش رو بفرستید و به نظرم این قسمتش یکمی کار می بره و قسمتی رو که جاوا اسکریپت قراره ترسیم کنه به نظرم باید با آجاکس پیاده بشه اما اگه اینجوری باشه که شما میگید خیلی خوبه چون زیاد وقت نمی بره و خروجیش به قول بچه های ما دهن پر کنه!!!!!Java Native Interface این امکان رو می ده که تابع های داخل یک dll یا so رو صدا بزنی. کاری که من می کنم اینه که با جاوا یه اپلت می نویسم که تابع های داخل فایل های dll رو صدا بزنه مثل initialize update & shutdown و همین طور هم پوینتر hwnd رو بده به انجین برای ترسیم روی صفحه browser ها.
خوبی ای که این روش داره اینه که کاربر احتیاجی به نصب پلاگین یا ... نداره و فقط داشتن جاوا کافیه که روی 88% از کامپیوتر ها جاوا هست.
همین طور هم راه هایی وجود داره که بشه کدهای java script رو هم تو اون صفحه از وب اجرا کرد.
و اینکه زبان انگلیسی و سی من در حد مبتدیه ولی من خوشحال می شم در ایده ها یا جاهایی که گیر میکنید شرکت کنم.
سلام
KGEWebPlayer رو تست کردم کاملا کار می کنه /m\
روش کار به این صورت است که یه پروژه win32 dll می سازین و از کلاس kge::web::WebApplication یک کلاس مشتق می کنید تا بتونید رویداد ها رو هندل کنید.
این هم یه نمونه کد از تعریف این کلاس
#ifndef TESTWEBAPPLICATION_H
#define TESTWEBAPPLICATION_H
#include "../../engine/include/WebApplication.h"
#include "../../engine/include/Device.h"
#include "../../engine/include/Renderer.h"
kge::Device dev;
kge::InitParameters params;
kge::gfx::Renderer* pRen;
namespace kge
{
namespace web
{
class KGE_API TestWebApp: public WebApplication
{
public:
//! Constructor
TestWebApp() {}
//! Destructor
~TestWebApp() {}
//! The WebPlayer call this function when you have to initialise your application.
void Initialise() {}
//! The WebPlayer call this function when you have to update your game step.
/*! Return false to stop the WebPlayer
*/
bool Update()
{
if (dev.Run())
{
pRen->BeginRendering(true, true, true);
pRen->EndRendering();
return true;
}
return false;
}
//! The WebPlayer call this function when you have to shutdown your application.
void ShutDown() {}
//! The WebPlayer call this function give you the window handle and size for render.
/*!
\param hwnd The Window handle
\param width The window width
\param height The window height
*/
void SetCanvas(int hwnd, int width, int height)
{
params.hwnd = (void*)hwnd;
dev.Init(params);
pRen = dev.GetRenderer();
}
//! Gives the resource path for loading default resources
void SetResourcePath(const char* path) {}
}; // TestWebApp
} // web
} // kge
#endif // TESTWEBAPPLICATION_H
بعد باید تابع WebMain رو بنویسید که WebApplication رو بسازید و WebPlayer رو هم بسازید و استارت کنید.
تابع WebMain نقطه اصلی شروع برنامه شماست.
#include "../../engine/include/KgeMemory.h"
#include "../../engine/include/WebPlayer.h"
#include "Test web application.h"
extern "C"
{
KGE_API void WebMain()
{
kge::web::TestWebApp* pWebApp = new kge::web::TestWebApp();
kge::web::WebPlayer* pWebPlayer = new kge::web::WebPlayer(pWebApp);
} // WebMain
} // extern "C"
این دیزاینی هست که من برای کار با WebPlayer در آوردم حالا شما قدرت کامل ++C رو در browser خود دارید.
فایل dll شما حتما باید به اسم KGEWebApp.dll باشه.
متاسفانه من الان سرباز(آش خور) هستم و روزی حد اکثر 2 تا 3 ساعت می تونم کار کنم ولی باز همین هم خدا رو شکر می کنم.
سلام پویا
نمی دونم الان وقت داری روی KGE کار کنی یا نه؟
می خوام که پلاگین RendererGL رو بنویسی قبلا می گفتی که KGE کامنت و داکیومنت و مثال نداره ...
حالا که داره و اگر هم وقت داری خوشحال می شم دوباره با هم روی KGE کار کنیم
اگر هم فقط روی کدهای OpenGL نظارت کنی هم ممنون می شم.
آخرین ویرایش به وسیله kochol : چهارشنبه 11 آبان 1390 در 18:38 عصر
آقا رو چشم. شما تنها کافیه که امر کنی.نمی دونم الان وقت داری روی KGE کار کنی یا نه؟
کلا میتونی اونها رو به من بسپریاگر هم فقط روی کدهای OpenGL نظارت کنی هم ممنون می شم.
فعلا یه مقدار دهی کننده اولیه OpenGL رو نوشتم که تا ورژن 4.1 ساپورت میده و توی لینوکس و ویندوز هم کار میکنه. فردا هم کد ایجاد محتوی (context) رو برای ویندوز و لینوکس رو میزنم. فقط داخل لینوکس میخوای با X11 کار کنی یا اینکه کتابخونه های دیگه مثل SDL و ... رو در نظر داری؟
من هم لود کردن پلاگین ها رو برای لینوکس نوشتم
http://kge3d.org/wiki/plugin/#Resources
من برداشتم glew رو به شاخه libs اضافه کردم تا کامپایل پروژه راحت تر بشه.
من که نتونستم تو لینوکس کامپایل کنم از تمامی تابع هایی که تو initGL.h تعریف کردی ایراد می گیره.
من نظرم رو X11 هست
آخرین ویرایش به وسیله kochol : پنج شنبه 12 آبان 1390 در 00:36 صبح
جالبه برای من کامپایل میشه. ( توی dge) یه چک میکنم ببینم مشکل از کجاست. فایل glxext.h رو داری؟من که نتونستم تو لینوکس کامپایل کنم از تمامی تابع هایی که تو initGL.h تعریف کردی ایراد می گیره.
فقط از یه تابع glew استفاده میشه. اون رو هم به زودی حذف میکنم.من برداشتم glew رو به شاخه libs اضافه کردم تا کامپایل پروژه راحت تر بشه.
منم موافقم.من نظرم رو X11 هست
راجب به دیزاین انجین نظری داشتی بگو
تو کامپیوتر من تابع glGetString( GL_VERSION )
null بر می گردونه؟ باید چی کارش کنم؟
این بخاطر اینه که هنوز محتوی معتبر نداریم. بعد از ایجاد محتوی کار میکنه.تو کامپیوتر من تابع glGetString( GL_VERSION )
null بر می گردونه؟ باید چی کارش کنم؟
البته باید کارت گرافیکت رو هم نصب کنی وگرنه OpenGL 2 کار نمیکنه.
به نظر من اندازه بافر عمق و اندازه بافر استثیل رو هم باید به InitParameters اضافه کنی. من که پیش فرض عمق رو 24 و استثیل رو 8 گرفتم ( سازگارترین مقادیر هستن)راجب به دیزاین انجین نظری داشتی بگو
فعلا که vs2010 من رو سرویس کرده هر 3، 4 دقیقه یکبار کرش میکنه.
سلام
امید وارم خوب باشید
من خیلی از پروژه عقب موندم و کد هایی که زدم برای انجین مثل فیزیک و امثال آنها کامل نشدن ولی می خواهم با جدیت بیشتری دوباره شروع کنم چون واقعا تازه می فهمم که از برنامه نویسی چیزی نمی دونم.
کوچول و پویا می دونن که من عاشق Embedded Systems هستم و می خواهم اگر موافق باشید با هم کاری کنیم که انجین برای آنها هم کار کنه ، البته از OpenGL ES می بایست استفاده کنیم و باید وارد دنیای به سرعت رو به رشد Android هم بشیم،نظر شما چی هست؟
اگر به بنده برنامه کار بدین خوش حال می شوم
موفق باشید
سلام هادي جان خوبي؟ تو اين مورد مثل من هستيکوچول و پویا می دونن که من عاشق Embedded Systems هستم
من بخاطر يه پروژه كه اتفاقا اون هم embedded هست مجبورم روي OpenGL ES كار كنم. چه بهتر كه از اين نقطه كار شروع بشه.می خواهم اگر موافق باشید با هم کاری کنیم که انجین برای آنها هم کار کنه ، البته از OpenGL ES می بایست استفاده کنیم و باید وارد دنیای به سرعت رو به رشد Android هم بشیم،نظر شما چی هست؟
اكبر:
همونجوري كه صحبت كرديم من مي خوام براي انجين خودم از متريال اسكريپتها استفاده كنم. فعلا تصمصيم دارم اسكريپتهاي من چيزي شبيه به زير باشن:
material <mat_name>
{
technique <tech_name>
{
pass <number>
{
vertex_shader = "<shader_path>";
pixel_shader = "<shader_path>";
tex[target]= "<texture_path>";
tex[0] = "s.bmp";
<identifier> = <expr>;
// fixed vars
val1 = Vector3D(1.0,2,1.3f);
// this function called every frame from code
void update()
{
val2 = Vector3D(1.0) * cos(DeltaTime);
}
// collosion function
void collossion(Vector3D pos)
{
pixel_shader="sss";
color = Color::Red;
}
}
}
}
تابع update توي هر فريم براي به روز كردن متريال صدا زده ميشه.
تابع collision تنها زماني صدا زده ميشه كه يه برخورد رخ بده (فعلا دقيقا در مورد اين تابع نه اطمينان دارم و نه ايده اي بابت طراحيش فقط توي MOGL خونده بودم كه بعضي ها اون رو جزئي از متريال ميذارن و ...
تكنيك هم كه توي انجين من براي render_path ها استفاده ميشه. شايد بهتر باشه كه توي KGE هم از اون استفاده كنيم.
براي افزايش سرعت بعضي از متغييرها رو مثل DeltaTime رو اشاره گرشون رو ارسال مي كنيم كه باعث ميشه تغيير داخل اسكريپت مستقيما اعمال بشه (مثل AngleScript) و توابع محاسبات رو هم با JIT پياده مي كنيم كه باعث ميشه سرعتش به سرعت كد واقعي نزديكتر بشه. تابع Update رو هم ميشه بوسيله يك اشاره گر به تابع خيلي سريع از داخل كد صداش زد (بعد از پياده سازي JIT)
اگر شما روي پارسر و ماشين مجازيش كار كني منم ميتونم به موازات اون روي JIT اش كار كنم. فقط بايد از ماشين مجازي استفاده كنيم و گرنه نمي تونيم بعدا از جيت استفاده كنيم.
سلام
همین که فهمیدی چیزی از برنامه نویسی نمی دونی خودش عالیه lol
من هم وقتی اینو فهمیدم رفتم یه ذره برنامه نویسی یاد گرفتم.
خوب این خیلی عالیه
اول از همه می دونی که به Android 2.3 احتیاج داری تا بتونی از NDK استفاده کنی فکر کنم باید یه چند روزی فقط مشغول دانلود باشی.
به نظرم این قدم اول هست بعد باید برنامه های اسون برای اندروید بنویسیم و بعد بریم سراغ OpenGL ES و پورت دادن KGE به اندروید.
من می خوام از این فرصت استفاده کنم و به سراحت اعلام کنم که هدف از ساخت نسخه جدید انجین یه گیم انجین هست که در مرحله اول به درد ساخت بازی های اسون شبکه بخوره مثل بازی های turn base
به نظرم یه چیز هایی تو ذهنت هست ولی کامل نیستن
پس کد شیدرت کجا ساخته می شه؟
=========================
از RakNet برای شبکه می خوام استفاده کنم.
http://www.jenkinssoftware.com/
هادی این API هم به نظر خیلی جالب می یاد یه نگاهی بهش بنداز
http://www.madewithmarmalade.com/
كد شيدرها داخل فايلهاي جدا نگهداري ميشن. توي متريال فقط آدرس اونها از مسير پايه يا اسم اونها نگهداري ميشه. من توي انجينم هر شيدر يه اسم داره كه با اسم فايلش يكيه. خود انجين بعد از كامپايل اسم رو به شيدر ميده و داخل ريسورس منيجر نمونه اون رو نگهداري ميكنه. بعدش ميشه با اسم نمونه كلاسش رو گرفت.پس کد شیدرت کجا ساخته می شه؟
دقيقا اين شكليه. بخاطر تجربه كم نمي دونم دقيقا چه ديزايني درسته. تنها چيزي كه به ذهنم ميرسه اينه.به نظرم یه چیز هایی تو ذهنت هست ولی کامل نیستن
فعلا يه كلاس متريال دارم كه توابعش بصورت virtual هست كه هم بتونم تو حالت اسكريپت و هارد كد ازش استفاده كنم و يه تابع به اسم clone دارم كه اجازه نمونه برداري از انواع مختلف رو به متريال منيجرم ميده.
تو استفاده تجاري ميشه ازش استفاده كرد؟ ( با توجه به شرايط ايران) نسخه evoluation اون مثل fmod هست يا فقط 30 روز كار ميكنه؟از RakNet برای شبکه می خوام استفاده کنم.
هادی این API هم به نظر خیلی جالب می یاد یه نگاهی بهش بنداز
http://www.madewithmarmalade.com/[/QUOTE]
سلام
امید وارم خوب باشین
باشه من مطالعه می کنم روش
موفق باشید
پس شیدر ها رو باید از قبل برنامه نویس بنویسه.كد شيدرها داخل فايلهاي جدا نگهداري ميشن
اصلا این کاری که می خوای انجام بدی چه مزیتی داره؟ چه قابلیتی اضافه می کنه که می خوای انجام بدی؟
برای پروژه های با بودجه کمتر از 100 هزار دلار مجانی است فقط باید Logo بندازیتو استفاده تجاري ميشه ازش استفاده كرد؟ ( با توجه به شرايط ايران) نسخه evoluation اون مثل fmod هست يا فقط 30 روز كار ميكنه؟
ضمیمه 77462
من مشکل اصلی که دارم با ساخت خود کد شیدر هست.
دو تا قابلیت Interface و unsized array رو تو cgfx دیدم خیلی خوشم اومد ولی هنوز دقیقا تصمیم نگرفتم که چه روشی بهتر است.
راجب دیزاین بالا هم بعدا توضیح می دم
اون فايل شيدر كناري رو ميتونه برنامه نويس بنويسه و يا شبيه يه tool كه قبلا همراه cgfx بود آرتيست بسازه كه اين مورد شبيه همون ديزاني هست كه شما مد نظر داري. متريال اسكريپت مثل اسكريپت خود بازي ميمونه و نميشه دقيقا به يه مورد خاص اشاره كرد اما در عين حال تقريبا توي پروژه هاي بزرگ ضروري.
سلام
من یه نگاه سطحی به makewithmarmalade انداختم برای پروژه های غیر تجاری رایگان هست ولی خیلی از امکاناتش که هنوز دقیقا نمی دونم چی هست رو این نسخه رایگان نداره.
خدا بگم چی کارشون بکنه؟؟؟؟؟؟؟؟ نصف سایت هارو که فیلتر کردیم نصف دیگشون هم که تحریم هستیم حالا ما موندیم و انجینمون:D
من دارم سعی می کنم رو برد Devkit8000 اندروید 2.2 را بالا بیارم و البته روی گوشیم هم بتونم 2.3 رو بوت کنم خوب می شه که با استفاده از آنها کد هایی که می زنم رو تست هم کنم.
http://www.embedinfo.com/english/product/devkit8000.asp
قبلا برای devkit8k بجز اندروید روی CD خودش هیچ پروژه دیگه ای اجرا نمی شد ولی به تازگی خوشبختانه 0xlab برد من رو هم پشتیبانی می کنه البته تا این لحظه خودم تستش نکردم ببینم چه طور است این هم لینک سایتشون:http://code.google.com/p/0xdroid/
هر خبری شد به شما اطلاع میدم
دقیقا همین طور شدهخدا بگم چی کارشون بکنه؟؟؟؟؟؟؟؟ نصف سایت هارو که فیلتر کردیم نصف دیگشون هم که تحریم هستیم حالا ما موندیم و انجینمون:D
به نظرم برای اول پروژه این مطلب ضروری تر هستش.اون فايل شيدر كناري رو ميتونه برنامه نويس بنويسه و يا شبيه يه tool كه قبلا همراه cgfx بود آرتيست بسازه كه اين مورد شبيه همون ديزاني هست كه شما مد نظر داري.
منتظر هستم ببینم کی می تونی این کار رو بکنیمن دارم سعی می کنم رو برد Devkit8000 اندروید 2.2 را بالا بیارم و البته روی گوشیم هم بتونم 2.3 رو بوت کنم خوب می شه که با استفاده از آنها کد هایی که می زنم رو تست هم کنم.
البته انروید یه سری نسخه ها داره فقط برای تبلت هاست مثل اندروید 3
سلام
از NDK دو مدل می شه استفاده کرد.
1- توسط JNI که تابع داخل یک فایل so رو صدا می زنی که این روش روی اندروید 1.5 به بالا کار می کنه.
2- یک اینترفیس NDK داره که با اون می تونی کلا با سی++ کد بزنی و به جاوا نیازی نیست و روی اندروید 2.3 به بالا کار می کنه.
سلام
می خوام در مورد دیزاین متریال سیستمی که تو ذهنم است بگم تا اگه نظری دارید بدید.
Material system: خروجی که می دهد یک تکه کد شیدر هست که متغییرهایی مثل Diffuse, Specular و ... دارد.
بعد بر اساس نوع Render path تصمیم گرفته می شود که چه استفاده ای از این متغییر ها بشود مثلا اگر forward shading بود Render path می گه.
return Diffuse * Specular;
و اگر هم که Deffered shading بود می تونه از MRT ای که می خواد استفاده کنه برای پر کردن بافر هاش یا ...
out.Diffuse = Diffuse;
out.Specular = Specular;
out.Normal = Normal;
out.Position = Position;
return out;
Render path می تواند یکسری data های لازم را هم برای خودش به Material Manager سفارش بدهد مثل Perpixel Normal یا Position تا Material system آنها را Generate کند تا بعد Render path و post process ها از آن استفاده کننند.
MaterialParam: این کلاس خصوصیات عمومی اون متریال رو در خودش نگه می دارد مثل این که چندتا نور رو ساپورت می ده یا مثلا نوع نورپردازی چی هست تا بعد بر اساس این اطلاعات شیدر مورد نظر ساخته شود.
CustomMaterial: در موقع ساخته شدن کد شیدر Custom Material ها می تونن تکه های خاصی از کد شیدر را تغییر بدن.
MaterialBlock: که بیشتر به درد ساخت یک tools برای Artist می خوره.
این دیزاینی هست که تا این لحظه به فکر من رسیده.
به نظر من این باید توی tool باشه نه خود انجین.
من تقریبا اسکریپت متریال خودم رو نوشتم ( حدود ۹۰ درصد). در حال حاضر با مفسر کار میکنه و کنده. (خب البته قواعد زیادی رو مثل type-castingها و ... رو رعایت میکنه.) کارهایی که برای اسکریپتم مونده تا انجامشون بدم:
۱. تعریف توابع (دارم تحقیق میکنم ظاهرا باید برای پیاده سازی درست توابع یه چیزهای به اسم فریم، پرولوگ و ... رو تعریف کرد که بشه از مواردی مثل تعریف متغییر داخل اونها و فراخوانی بازگشتی پشتیانی کرد. البته توابع خارجی رو می تونم به صورت کامل صدا بزنم.
۲. شی گرایی (برای مواردی مثل وکتورها و ماتریسها لازمش دارم) بیشترین کار رو هم همین نقطه داره.
بعدا به vm و jit پورتش میکنم. منتها این جیت درد سر به تمام معناست. بعضی چیزا توی لینوکس درست جواب میده و توی ویندوز جواب نمیده و یا برعکس. مثلا مقدار یه متغییر رو داخل ویندوز عوض میکنم منتها فقط توی تابعی که عوض شده تغییر میکنه (تابع نوشته شده با جیت) اما همون توی لینوکس جواب میده تا حالا تقریبا تمام کارها رو تونستم باهاش انجام بدم و ازش راضی هستم فقط موردهای زیر موندن:
۱. عوض کردن مقدار متغییرها (متغییرهای خارجی داخل کد C/C++
۲. پرولوگ توابع
پویا جان این متریال اسکریپتت چه قابلیت هایی داره یعنی اگه ساخته بشه به انجین چه قابلیت هایی اضافه می کنه؟