چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی ازgluOrtho2Dاستفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی ازgluOrtho2Dاستفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
روش معمولش استفاده از glPushMatrix و glPopMatrix است. ولی می شه ماتریس های اصلی رو خودمون دستکاری کنیم و باز نویسی کنیم.چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
خوب شما وقتی می خواهید این تابع را تنظیم کنی جوری تنظیمش کن که مرکز صفحه باشه. یا با glTranslate مختصات رو جابه جا کن.در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی ازgluOrtho2Dاستفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
درثانی منم مثل خودتونم تازه کارم بهتره تو خود انجمن سوالاتون رو مطرح کنید تا دوستان ماهر تر جواب بدند.
آقا ما اینو نوشتیم . ولی اجرا نشد . کلی مشکل داشت . دوستان کمک کنن لطفا :
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include<math.h>
#include<gl\glut.h>
#define PI 3.1415926535898
GLint circle_points = 360;
class time
{
public:
int hour; // ساعت
int min; //دقیقه
int sec;//ثانیه
};
void gettime()
{
struct tm *time_now;
time_t secs_now;
char str[2];
tzset(); //تبديل ساعت گرينويچ به ساعت محلي
time(&secs_now);
time_now = localtime(&secs_now);
strftime(str, 3,"%H",time_now);
time.hour = atoi(str);
strftime(str, 3,"%M",time_now);
time.min = atoi(str);
strftime(str, 3,"%S",time_now);
time.sec = atoi(str);
printf("%d:%d:%d",h,m,s);
}
void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
GLint i;
GLdouble theta;
glLineWidth(5.0) ;
glColor3f(1.8,1.0,0.1);
glBegin(GL_LINE_LOOP);
for (i = 0; i < circle_points; i++)
{
theta = 2*PI*i/circle_points;
glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
}
glEnd();
}
void drawhour ()
{
glPushMatrix();
glBegin(GL_POLYGON);
glLineWidth(5.0) ;
glColor3f(1.8,0.0,0.1);
glVertex2f( centerx,centery) ;
glVertex2f( centerx,.9*radius) ;
glEnd () ;
glRotatef(time.hour*6,0,0,0.1);
glPopMatrix();
sleep (36000) ;
}
void drawmin ()
{
glPushMatrix();
glBegin(GL_POLYGON);
glLineWidth(5.0) ;
glColor3f(1.8,0.0,0.1);
glVertex2f( centerx,centery) ;
glVertex2f( centerx,.5*radius) ;
glEnd () ;
glRotatef(time.min*6,0,0,0.1);
glPopMatrix();
sleep (60000) ;
}
void drawsec ()
{
glPushMatrix();
glBegin(GL_POLYGON);
glLineWidth(1.0) ;
glColor3f(1.8,0.0,0.1);
glVertex2f( centerx,centery) ;
glVertex2f( centerx,.9*radius) ;
glEnd () ;
glRotatef(time.sec*6,0,0,0.1);
glPopMatrix();
sleep (1000) ;
}
void drawpoint ()
{
for (int i =0 ; i<=330 ; i+=30)
{
glPushMatrix();
glBegin(GL_POLYGON);
glLineWidth(1.0) ;
glColor3f(0.0,0.0,0.0);
glVertex2f( centerx,centery) ;
glVertex2f(0.25, 0.75);
glEnd();
glRotatef(-i,0,0,0.1);
glPopMatrix();
}
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
gettime();
MyCircle2f(0.0,0.0, .75);
drawhour ();
drawmin ();
drawsec () ;
glFlush();
glutSwapBuffers();
}
void init(void){
glClearColor(1.0,1.,1.0,1.0);
}
int main(int argc, char* argv[])
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutCreateWindow("clock");
init();
glMatrixMode(GL_PROJECTION);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutMainLoop();
return 0;
}
میتونی از push/pop تو در توی ماتریسها استفاده کنی.چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
روش بهتر ساختن دستی ماتریسها و لود کردن اونها داخل حافظه به کمک glLoadMatrix هستش. میتونی برای ساخت این ماتریسها بدون هیچ دردسری از کلاس matrix موتور kge استفاده کنی. من خودمم از کدهای kge برای اینکار استفاده می کنم که کوچول اونها رو نوشته.
دستور gluOrtho یه ماتریس دو بعدی (orthographic ) رو میسازه که با لود شدن اون (به کمک خود دستور) اثر پروجکشن از بین میره و انگار دارین دو بعدی کار میکنین (مثل شروع کار) که توی این حالت z تاثیر نداره مگر اینکه بیشتر از 1 و یا کمتر از -1 بدین که باعث شه شکل محو بشه. پارامترهای این دستور به ترتیب عبارتند از:در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی ازgluOrtho2Dاستفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
- left: مختصات از سمت چپ صفحه
- right: مختصات از سمت راست صفحه
- bottom: مختصات از پایین صفحه
- top: مختصات از بالای صفحه
به عنوان مثال دستور زیر باعث میشه که مختصات 0 و 0 به گوشه سمت چپ پایین صفحه انتقال پیدا بکنه:
gluOrtho2d(0, عرض, 0, ارتفاع);
یعنی اگر میخوای وسط صفحه باشه کافیه ارتفاع و عرض پنجره رو تقسیم به دو کنی و اونها رو داخل دستور وارد کنی. مثلا اگر طول و ارتفاع پنجره 400 باشه باید به شکل زیر عمل کرد:
glOrtho(200,200,200,200,1,-1);
زمانی که داری دو بعدی کار میکنی بهتره با پیکسل ها کار کنی(از دستور glVertex{2,3,4}i استفاده کن).(اگر اندازها دقیقا برات مهم نیست، مثلا اگر نرم افزار CAD تولید نمی کنی) به عنوان مثال تکه کد زیر یه مستطیل که از گوشه چپ پایین 10 پیکسل فاصله داره رو رسم میکنه.:
glBegin(GL_QUADS);
glVertex2i(10,10);
glVertex2i(300,10);
glVertex2i(300,300);
glVertex2i(10,300);
glEnd();
توی کد بالا از دستور glOrtho به شکل زیر استفاده شده:
glOrtho(0,400,0,400,1,-1);
آخرین ویرایش به وسیله pswin.pooya : پنج شنبه 19 فروردین 1389 در 01:34 صبح
والا به نظر من خیلی کار رو سخت کردی ... اصلاح شده کدت این می شه :
#include <time.h>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
#include <gl\glut.h>
#define PI 3.1415926535898
GLint h,m,s,circle_points = 360;
GLboolean min=0;
void gettime()
{
struct tm *time_now;
time_t secs_now;
char str[2];
tzset(); //ÊÈÏíá ÓÇÚÊ Ñíäæí Èå ÓÇÚÊ ãÍáí
time(&secs_now);
time_now = localtime(&secs_now);
strftime(str, 3,"%H",time_now);
h = atoi(str);
strftime(str, 3,"%M",time_now);
m = atoi(str);
strftime(str, 3,"%S",time_now);
s = atoi(str);
}
void output(int x, int y, char *string)
{
int len, i;
glRasterPos2f(x, y);
len = (int) strlen(string);
for (i = 0; i < len; i++)
{
glutBitmapCharacter(GLUT_BITMAP_8_BY_13, string[i]);
}
}
void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
GLint i;
GLdouble theta;
glLineWidth(5.0) ;
glColor3f(1.8,1.0,0.1);
glBegin(GL_LINE_LOOP);
for (i = 0; i < circle_points; i++)
{
theta = 2*PI*i/circle_points;
glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
}
glEnd();
}
void drawhms (GLfloat centerx, GLfloat centery,GLint hms,GLfloat r)
{
glPushMatrix();
glTranslatef( centerx, centery, 0.0f );
glRotatef(-(hms*r)+45,0,0,1.0);
glLineWidth(2.0) ;
if(min) r=10;
else if(r==6) r=8;
glBegin(GL_LINES);glVertex2i(0.0,0.0); glVertex2i(150.0/(r),150.0/(r)); glEnd();
glPopMatrix();
min=0;
}
GLint i=0;
GLfloat cx=100.0,cy=75.0;
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0); //display window set to white
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,200.0,0.0,150.0); //sets up WC extent
}
void lineSegments(void)
{
glClear(GL_COLOR_BUFFER_BIT); //clears display window
gettime();
MyCircle2f(cx,cy,30);
glColor3f(0.0, 0.0, 1.0); //line colour set to blue
drawhms(cx,cy,h,30);
min=1;
drawhms(cx,cy,m,6);
drawhms(cx,cy,s,6);
glPushMatrix();
glTranslatef( cx-2, cy, 0.0f );
glRotatef(90,0,0,1);
for( i=360;i>0;i-=30){
char a[5]="0";
itoa(i/30,a,10);
output(30*cos(-(PI/180*i)), 30*sin(-(PI/180*i)),a);
}
glPopMatrix();
glFlush(); //process all OGL functions immediately
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv); //initialise GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //sets display mode
glutInitWindowPosition(50, 100); //top left display window pos
glutInitWindowSize(400, 300); //display win width and height in pixel coords
glutCreateWindow("Clock"); //now create display win
init(); //run initilization procs
glutDisplayFunc(lineSegments); //call drawing func
glutIdleFunc(lineSegments);
glutMainLoop(); //display all and wait
return 0;
}
اینم برای دوستان علاقمند به OpenGL :
یک سری مثال از کار با این بسته گرافیکی از سایت رسمی OpenGL
http://www.opengl.org/resources/code.../examples.html
____________
دوستانی که دنبال یک رفرنس برای کار با توابع Opengl هستند از کتاب blueBook استفاده کنند.
سلام دوستان . بعد کلی غیبت اومدم باز . من توضیحاتی در مورد بافر ها و ماتریسها تو openGL میخوام . برای کار با دستورات دچار مشکل شدم . ...
والا قضیه این ماتریس ها هم واسه خودش کلاسی داره ولی در کل یک سرچی بزنی خیلی کتاب خفن پیدا می کنی به نظر من همیشه استفاده از کد های آماه بهتره ....
امكانش هست تابعهاي بيشتري ازopengl كه بصورت gl_ هستند دراختيارمون قرار بدين
میتونید به کتاب قرمز و یا super bible مراجعه کنید:
http://opengl.persiangig.com/page.html
ببنید من خودم برای کار خودم یک فایلی درست کردم با فرمت chm که تمام توابع رو توضیح داده اینجا گذاشتم ازش استفاده کنید فقط نکته ایی که وجو داره وقتی می خواهین سرچ کنید یک * قبل و بعد عبارتتون اضافه کنید از اینجا دریافتش کنید. در ضمن به نظر من رد بوک که آقا پویا گفتندم خیلی چیزه خوبیه یا بلو بوک
با سلام
من می خوام گیم snake رو با opengl بنویسم میشه کمکم کنید
چرا تاپیک خوابیده بی صبرانه منتظر ادامه هستیم
لطفا ادامه بدین
خیلی مفید بود
از دوستان کسی نیست که جوابم رو بده ؟
این رسما درخواست پروژه آخر ترم هستش! که مخالف قوانین سایت هست.
فکر نکنم کسی کمکت کنه چون open gl یکی از مباحثی هست که کسانی که چیزی بلدند با سختی خیلی زیاد تونستن اونو یاد بگیرن وبه خود اونا هم کسی کمک نکرده البته اگه اشتباه نکنم این مطلب تو مقدمه یک مقاله که از سایت gamedev دان کرده بودم بیان شده بود.البته قصد توهین به کسی نداشتم ولی منظورم اینه که خودت باید سرهم کنی. برای یادگیری هم اگه تو ویندوز میخوای از اون استفاده کنی بهتره قبل از یادگیری opengl کمی API های ویندوز رو یاد بگیری. برای لینوکس هم به نظرم باید دوستان با سوادتر از من بگن.
سلام و خسته نباشد
آقا ممنون آموزش عالی بود
باز از این کار ها انجام بده
مشکلت کجای برنامه هستش؟ توی رسم دایره و یا چرخوندن اون؟آقایون
حاضرم برای حلش پول هم بدم
جواب این سوال برام خیلی مهم شده
بلد نیستم اما واسه رو کم کنیه که مهم شده برام
لطفأ کمکم کنید
من یه تازه کارم
رسم دایره رو بلدم.یعنی یاد گرفتم
اما اینکه دایره رو بوسیله یه خطی نامرئی که زاویه بدم به یه گوشه ی صفحه مانیتور برخورد کنه و طبق همون زاویه قرینه بشه و به سمت دیگه ی صفحه ی مانیتور برخورد کنه و ...
این یکم برام تفهیمش سخته.
حالا اگه حل کردنش براتون امکان نداره یه منبعی کتابی چیزی معرفی کنید که بتونم این سوال و مسأله های مشابه رو پیدا و حلش کنم
منتظر حل سوال و یا راهنمایی شما هستم
با سپاس
جابجا کردن اشکال رو توی فضا با تبدلات اتجام میدن. تبدیلات از سi عمل انتقال، چرخش و مقیاس تشکیل شده:
انتقال: یک جسم رو از یک نقطه به نقطه دیگه میبره. توی OpenGL بر انتقال دادن اشیاء از glTranslatef استفاه میکنن مثلا کد زیر 10 واحد شکل رو روی محورهای y جا به جا میکنه.
glTranslatef(0,10,0);چرخش: چند نمونه چرخش وجود داره اما اونی که توی fixed-function، اپن جی ال هستش چرخش به دور یک محور هستش و کارش اینه که شکل سه بعدی شما رو دور محوری که مشخص کردن می چرخونه. اینکار داخل OpenGL به صورت glRotatef انجام میگیره و داخل دایرکت ایکس با دستور D3DXMatrixRotationAxis. (الته همه اونها از این نوع یعنی چرخش به دور محور دلخواه مشتق میشن) مثلا داخل OpenGL برای اینکه به اندازه 90 درجه شکل رو به دور محورهای x بچرخونی باید از دستور زیر استفاده کنی:
glRotatef(PI/2,1.0f,0,0);مقیاس: برای بزرک و کوچیک کردن اشکال به کار میره و از دستور glScalef برای اینکار استفاده میشه.ا ین دستور سه پارامتر میگیره که برای مقیاس توی هر کدوم از محورها هستش. مثلا اگر به پارامتر اول 2 بدی شکل رو روی محورهای x دو برابر میکنه (مولفه x ورتکسها رو دو برابر میکنه) و یا اگر بهش 0.5 اونها رو نصف میکنه. مثلا کد زیر شکل رو دو برابر میکنه.
glScalef(2.0,2.0,2.0);تمامی سه دستور بالا روی یک ماتریس اثر میذارن که ModelView نامیده میشه. بحث ماتریسها خیلی پیچیده هستش و صحبت کردن در مورد اونها داخل یک فروم خارج از حوصله هم فروم و هم اعضای اون مثل من هست. فصل چهارم کتاب Beginning OpenGL Game Programming درباره ماتریسها صحبت میکنه. همینطور اگر داخل این فروم یه سرچ بزنی می تونی مواردی رو پیدا کنی.
خب حالا برای حرکت توپ باید یه بردار سرعت درست کنی و هر لحظه مکان توپ رو با اون جمع کنی و اگر مکان توپ از گوشه های صفحه (-1و1) بیرون رفتش معکوس اون بردار رو بدست بیاری. درست کردن بردار سرعت یا جابجایی و محاسبه بیرون رفتن اون و ... مربوط به برنامه نویسی OpenGL نیستش. اما رسم توپ توی نقطه مربوط به برنامه نویسی GL میشه اجازه بده فرض کنیم که px,py و pz موقعیت توپ (دایره) من رو داخل صفحه مشخص میکنه. پس کد من داخل OpenGL باید یه صورت زیر باشه:
این کد زمانی به درد میخوره که فقط بخوای دایره رو رسم کنی و اگر مورارد دیگه داخل صفحه باشن همه با هم حرکت می کنن. توی این حالت اگر بخوای فقط دایره حرکت کنه باید بنویسی:
void Display()
{
glLoadIdentity();
glTranslatef(px,py,pz);
// rasme daire
و ...
}
void main()
{
glPushMatrix();
glLoadIdentity();
glTranslatef(px,py,pz);
// rasme daire
glPopMatrix();
و بقیه کد
}
آقای pswin.pooya با تشکر از مطالب خوبی که ارسال کردی
واقعأ ممنونم
چیزای خوبی بود که به دردم می خوره
اما یه سوال دیگه دارم
توی مثالی که زده بودم قراره دایره ای که رسم کردم طبق یه زاویه ای که با یکی از محورها داده میشه ، حرکت کنه و وقتی به اتنهای صفحه رسید دوباره بر اساس همون زاویه اما مخالف محور قبلی به حرکتش ادامه بده . طوری که دایره به 4طرف مانیتور برخورد کنه و بطور متوالی
یه راهنمایی در این مورد انجام بدین ممنون میشم
گفتم که برای اینکار باید یه بردار سرعت و یا بردار جهت حرکت (اگر نرمال باشه) درست کنی. مثلا بردار (2,.3.) داخل کد زیر میگه که توی هر فراخوانی به x، .2 واحد و y سه دهم واحد اضافه کنه:توی مثالی که زده بودم قراره دایره ای که رسم کردم طبق یه زاویه ای که با یکی از محورها داده میشه ، حرکت کنه و وقتی به اتنهای صفحه رسید دوباره بر اساس همون زاویه اما مخالف محور قبلی به حرکتش ادامه بده . طوری که دایره به 4طرف مانیتور برخورد کنه و بطور متوالی
یه راهنمایی در این مورد انجام بدین ممنون میشم
void display()
{
px += .2;
py =.3;
....
حالا اگر یکی از px و یا pyها بزرگتر از یک و یا کوچیکتر از -1 شد. اون مولفه بردار سرعت رو توی -1 ضرب مبکنی. مثلا:
struct vector
{
vector(float _x,float _y){ x= _x;y = _y;};
float x;
float y;
};
vector s(.2,.3);
vector pos (0,0);
void main ()
{
pos.x += s.x;
pos.y += s.y;
if (pos.x > 1 || pos.x < -1)
s.x = -s.x
if (pos.y > 1 || pos.y <-1)
s.y = -s/y;
...
glTranslatef(pos.x,pos.y,0);
....
}
salam!
kho0bi amin?!
bebin man o0n postet darbare "PolyTrance " ro kho0ndam!
man khodam hafte Dge projhe daram shatranj!
bad hameye mohrehasho doros kardam ba 3DMax!
bad o0n PolyTrance ro download kardam,bad ba o0n export kardam be openGl...vali vaghT run kardam sheklesh daghighan o0n nashod..yaani engar yechizayish kame..tike tike boridan az yejahayish..mikhastam bebinam to ham hamin moshkelo dari?! rahe hali nis barash?
merC!
khaheshan age mishe zood bejavab chon cchan rooz bishtar vaght nadaram!
آخرین ویرایش به وسیله amirali! : چهارشنبه 02 تیر 1389 در 00:32 صبح
salam man 1 barnamey paint neveshtam, kheili kam dar rabeteh ba ijad menue v nahvehy karbordesh midonam age mishe komakam konid
به نظر من بهتر قید توابع glut را بزنید برای منو اما اگر هنوز اسرار دارید می تونید یک تصویر از کلید ها درست کنید و بعد وقتی مختصات ماوس روی اونجا ها قرار گرفت یک تابع را اجرا کنید یعنی منو و اینها رو خودتون بسازید glx وجود داره
http://sourceforge.net/projects/glui/
http://www.lighthouse3d.com/opengl/glut/index.php?9
سلام
آقای amin1softco
میشه ID تونو داشته باشم؟
برای یه کاری
ممنون
منبع : همین جا بگم اگه انگلیسیتون خوبه منبع رو بخونید چون من ترجمم یکمی مورد داره
آموزش لود کردن و نمایش یک فایل تصویری بوسیله کتابخانه دویل و اپن جی ال(devil-OpenGL)
دویل (همچنین به عنوان OpenIL شناخته می شه) یک کتابخانه برای کار با عکس ها است که اجازه لود و دستکاری کردن(فیلتر گذاری و تغییر اندازه) تصاویر را به شما می دهد.
توسعه دهنده دویل Denton Woods دنتون وود کار روی پروزه خودش را حدود 2 سال به تعویق انداخت اما او کد نویسی آن را دوباره شروع کرده است. اما قدر این کتابخانه را بدانید.
دویل دنبال می کنه فلسفه نحوی توابع OpenGL را و راهی که ما آنها را به کار می بریم. بنابر این اگر شما با OpenGL آشنایی داشته باشید می تونید در عرض چند دقیقه کار با این کتابخانه را فرا بگیرید.
دویل یک کتابخانه متن باز است و برای کاربرد های تجاری و غیر تجاری رایگان است. شما می توانید اطلاعات بیشتر در این زمینه را در لینک زیر بیابید:
http://openil.sourceforge.net/about.php
هدف از این خودآموز نشان دادن راهی برای لود یک تصویر jpg و بکار بردن آن به عنوان RGB byte داده های منبع برای بافت(الگوtexture ) یک مستطیل (محیط بسته دوبعدی)است.
مهمترین قسمت این خود آموز تابع DevILTextureLoader() است.
بطور کلی , این تابع مراحل زیر را انجام می دهد:
1- ساخت و پیوست نام تصویر:
ILuint ImgId = 0;
ilGenImages(1, &ImgId);
ilBindImage(ImgId);
شبیه توابع اپن جی ال زیر
glGenTextures() / glBindTexture()
2- لود کردن تصویر از نام تصویر:
ilLoadImage(filename);
3- بدست آوردن حجم تصویر و اختصاص حافظه برای کپی کردن الگو RGB byte
width = ilGetInteger(IL_IMAGE_WIDTH);
height = ilGetInteger(IL_IMAGE_HEIGHT);
pixmap = new BYTE[width * height * 3];
ilCopyPixels(0, 0, 0, width, height, 1, IL_RGB,
IL_UNSIGNED_BYTE, pixmap);
4- آزاد کردن تصویر و حافظه مربوط به دویل:
ilBindImage(0);
ilDeleteImage(ImgId);
بر اساس برنامه شما مرحله 3 ضروری نیست. دویل نگهداری می کنه یک حافظه بافر با داده های تصویری پیوست شده به نام تصویر در این مثال ImgId شما می توانید به طور مستقیم به بافر دویل دسترسی داشته باشید:
ilBindImage(ImgId);
BYTE* data = ilGetData();
ilGetData() :
به شما اجازه می دهد یک اشاره گر مستقیم به محدوده تصویر فعلی داشته باشید. و به اندازه نام عکس معتبر است. شما می توانید از اشاره گر داده ها بوسیله تابع ilGetData() استفاده کنید.
در فایل ضمیمه تما فایل های مورد نیاز این خود آموز قرار داده شده است (*.h + *.dll + *.lib)
فایل ضمیمه حجمش بالا بود.
سلام
قبل از اینکه بخواین از devil استفاده بکنین اون رو مقدار دهی اولیه بکنید:
ilInit ();
ilEnable (IL_CONV_PAL);
همچنین شما می تونید از devil برای تهیه شات از برنامتون استفاده کنید.این تکه کد از انجین من برای تهیه شات از فریم بافر (بافر رنگ) هست (کد مربوط به ویرایش 0.0.0 بود) :
void Renderer::writeContentsToFile(std::string filename)
{
ILuint img;
ilGenImages(1, &img);
ilBindImage(img);
char *buf = new char[ m_uWidth * m_uHeight * 4 *4];
glReadPixels(0, 0, m_uWidth, m_uHeight, GL_RGBA,
GL_UNSIGNED_BYTE, buf);
ilTexImage(m_uWidth, m_uHeight, 1, 4, IL_RGBA,
IL_UNSIGNED_BYTE,buf );
// save image to file
#ifdef DGE_UNICODE_SUPPORTED
core::String f(filename.c_str());
ilSaveImage(f.getUTF16());
#else
ilSaveImage(IL_PNG,filename.c_str());
#endif
DGE_DELETE_ARRAY(buf);
ilDeleteImage(img);
}
آموزش به کار گیری openGL در زبان ها برنامه نویسی دیگر
متناسب با هر زبان یک فرم ورک تدارک دیده شده پس بهتره بعد از انتخاب زبانی که می خواهید باهاش برنامه بنویسید یک سری به اینجا بزنید :
http://www.opengl.org/resources/bindings/
خوب من فکر می کردم به راحتی می تونم از اپن جی ال در سی شارپ استفاده کنم ولی بعد از یکمی سرچ و اینها به این نتیجه رسیدم که برای بکار بردن اپن جی ال در سی شارپ چند راه وجود داره :
1-فرم ورک csgl هست که قدیمی شده و tao که توسعه یافته همونه
2- فرم ورک OpenTK بهترین راه به نظر من و آپدیت آپدیت.
3- SharpGL
دوستان اگه راه بهتری سراغ دارند دریغ نکنند.
در آخر یک نتیجه دیگه هم بدست آوردم و اون این بود که آدم بره سراغ دایرکس که تو سی شارپ خیلی راحت (البته نه در اون حد) برنامه بنویسه البته سه بعدی.
سلام
برای نصب GLUT کلی مشکل پیدا کردم
توی turbo c , BORLANDC.31 , Visual C++ 6.0 هرکاری کردم نشد
دیروز توی Visual Studio 2005 امتحان کردم جواب داد ، اجراشد بدون اشکال و خروجی داد
اما امروز که اومدم شروع کنم :
- انگار برای هر برنامه باید opengl32.lib glu32.lib glut32.lib رو اضافه کنم ( برای هر پروژه جدید یک بار ؟!)
-مشکل اصلی اینجاست که اومدم اجرا کنم دیدم رفته به glut.h گیر داده و 133 تا error , warning داده
درحالی که من از دیروز تا اون موقع هیچ دستکاری نکرده بودم
فایل اصلی رو جایگزین کردم باز هم جواب نداد
گزارش خطا ها + glut.h رو میذارم اینجا یه نگاه کنین ببینین این چی میگه
دیگه دارم قاطی میکنم![]()
لطفا کمک کنین
با تشکر
مشکل از opengl.h هستش. نه glut.h اول از همه opengl.h رو حذف کنید و سعی کنید برنامه رو کامپایل کنید. اگر نشدش کتابخونه glew.h رو بگیرید و از هدر اون به جای opengl.h استفاده کنید. من خودم هم بارها به این مشکل داخل ویژوال استادیو برخوردم و راه حل بهتری پیدا نکردم.
از کمکتون خیلی ممنون
1- سرچ کردم opengl.h اصلا ندارم
2- glew-1.5.6-win32 رو گرفتم و نصب کردم خدا رو شکر فعلا داره کار میکنه
واقعا ازتون سپاسگذارم![]()
بودم
شدم
باز هم ممنون
یه سوال دارم .
http://www.barnamenevis.org/sh...d.php?t=245673
دوستاني كه گرافيك دارند و دنبال سورس كد هاي تايپ شده كتاب مي گردند به اين لينك ها مراجعه كنند:
این صفحه را مرور کنید
http://www.cs.ukzn.ac.za/~satya/COMP712/
اینم لینک اصلی کد های کتاب
http://www.cs.ukzn.ac.za/~satya/COMP712/PROGS/Code.zip
اینم لینک اون جزوه انگلیسیه که می تونید باهاش غلطای کتابو پیدا و تصحیح
کنید
http://www.cs.ukzn.ac.za/~satya/COMP712/GRAPHICS_notes.pdf
اسلاید هاي كتاب رو اینجا دیدم جالب بود
http://www.cs.virginia.edu/~gfx/Courses/2004/Intro.Spring.04/
...........................
آموزش خارج از كتاب
http://nehe.gamedev.net/
سلام
برای کار با opengl در visual C++6 و visual C++2008 آیا کدهاشون با هم فرق داره؟؟؟؟؟؟
آیا می تونم از کدهای visual C++6 در visual C++2008 استفاده کنم؟؟؟؟؟؟؟؟؟؟؟
می تونم توی این تاپیک در مورد گرافیک در visual C++6 سوال بپرسم.
منتظر جواب هستم.
ممنون
نهبرای کار با opengl در visual C++6 و visual C++2008 آیا کدهاشون با هم فرق داره؟؟؟؟؟؟
بستگی داره اما توی 90 درصد موارد میشهآیا می تونم از کدهای visual C++6 در visual C++2008 استفاده کنم؟؟؟؟؟؟؟؟؟؟؟
می تونم توی این تاپیک در مورد گرافیک در visual C++6 سوال بپرسم.
تاپیک جدا باز کنی بهتره
سلام میشه لطف کنید برنامه کامل ساعت درopen gl برام بذارین.