|
|
|
|
|
|
نويسنده |
پيغام |
mralizadeh در حال رشد
تاريخ عضويت: 1 شنبه 16 اسفند 1383 تعداد ارسالها: 65 محل سكونت: تهران
5 شنبه 4 بهمن 1386 - 16:49 |
|
|
سلام
1- مهمترين تفاوت OpenGL و DirectX اين است که قسمتهای زيادی از DirectX (البته من Direct3D کار کردم) بصورت شی گرا (Object Oriented) نوشته شده، در حاليکه OpenGL کاملا رويه ای (Procedural) است.
2- دومين تفاوت اساسی ايندو اين است که DirectX وابسته به يک شرکت کاملا تجاری است و محصولی کاملا بازاری(Commercial) می باشد. در حاليکه OpenGL محصول SGI است (و فکر می کنم همونطور که دوستمون گفتن الان زير نظر ARB)و بيشتر در محيط های آکادميک استفاده می شود.
(همين قضيه موجب شده که مفاهيم اضافه شده به OpenGL يا همان extension ها زير نظر يک جای واحد نباشد. مثلا NV و ATI و SGI و ARB و ... همه عنوان شروع موارد اضافه شده به OpenGL می باشد که ممکن است روی يک سخت افزار بعضی از آنها پشتيبانی شوند و روی بعضی نه.)
3- اينکه : "اما DirectX به وسیله نرم افزار گسترش پیدا میکن" رو قبول ندارم . تا اونجايی که من می دونم DirectX در دو مود سخت افزاری (HAL) و نرم افزاری (REF) اجرا می شه. (حتی يک لايه نرم افزاری بين برنامه ما و سخت افزار سربار (overhead) زيادی به بار مياره و کارايی رو به شدت کاهش می ده) در ضمن اين که می بينيم در مورد يک کارت گرافيکی گفته می شه، DirectX 9.0c و OpenGL2 را پشتيبانی می کند نشان می دهد که اين پشتيبانی بصورت سخت افزاری است.
4- اگر می خواهيد با يکی از ايندو شروع کنيد من OpenGL را پيشنهاد می کنم. به نظر من OpenGL برای شروع بسيار ساده تر است. در ضمن برای راحتی کار بالا آوردن (راستش هيچ کلمه مناسبی براش پيدا نکردم) می توانيد از کتابخانه GLUT استفاده کنيد. (بالا آوردن OpenGLو ِDirect3D کلا کار زياد و مزخرفيه).
در ضمن می تونيد به سايت nehe.gamedev.net هم سری بزنيد که کد نمونه با استفاده از GLUT را نيز دارد.
مثلا اين کدی که از تمرين دوم اين سايت کپی کردم (با کمی اصلاحات) به راحتی کار می کنه (ضمنا با کمی اغماض می شود از توابع reshape و init صرف نظر کرد البته فقط برای شروع):
كد: |
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
void init ()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
void display ()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
glutSwapBuffers ( );
}
void reshape ( int w, int h )
{
glViewport ( 0, 0, w, h );
glMatrixMode (GL_PROJECTION );
glLoadIdentity ();
if ( h==0 ) gluPerspective ( 80, ( float ) w, 1.0, 5000.0 );
else gluPerspective ( 80, ( float ) w / ( float ) h, 1.0, 5000.0 );
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
}
void main ()
{
init ();
glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE );
glutInitWindowSize ( 500, 500 );
glutCreateWindow ( "NeHe's OpenGL Framework" );
glutFullScreen ( );
glutDisplayFunc ( display );
glutReshapeFunc ( reshape );
glutMainLoop ( );
} |
5- اينکه بشود از هردوی اينها همزمان استفاده کرد را تا حالا من جايی نديده ام. (ولی می تواند استفاده بسيار زيادی داشته باشد.) و اينکه چون هر دوی اين کتابخانه ها تا حد زيادی روی سخت افزار پياده می شوند قدرت آنها نيز بسيار نزديک به يکديگر می باشد (البته DirectX 10 بيرون آمد ولی OpenGL3 هنوز در مرحله آگهی دادن ( announce) می باشد.) |
|
|
بازگشت به بالا |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
صفحه 2 از 3 |
تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد برو به صفحه قبلي 1, 2, 3 بعدي
|
|
شما نمي توانيد در اين انجمن نامه ارسال كنيد. شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد
|
|
|