# مباحث متفرقه برنامه نویسی > طراحی و ساخت بازی‌های کامپیوتری >  برنامه ها و مثال های OpenGL

## amin1softco

این تاپیک برای این ایجاد شده که دوستان برنامه هایی که نوشتند چه مبتدی چه برنامه هایی که نکات جالبی داره را اینجا قرار بدند تا بقیه دوستان استفاده کنند. خلاصه بیشتر هدف آشنایی بیشتر با ابزار ها کتابخانه ها و نحوه استفاده از اون ها برای کاربران مبتدی تا حرفه ایی است. :تشویق:  و بیشتر جنبه تمرینی داره تا مهارت بچه هاسنجیده بشه.
برای شروع من خودم می خوام یک کلاس مثل glui طراحی کنم تا مثلاً تکست باکس و این قبیل کمپوننت ها رو شبیه سازی کنه. کسی هم نظری داشت بگه :تشویق:

----------


## Sepehr M

آقا خیلی خوبه...من با opengl موافقم...شدیدا  :لبخند گشاده!: 

یه مرجع کامل و قابل فهم و روان هم اگه واسه آموزشش داشته باشی که دیگه همه چی ردیفه...

ممنون...تاپیک خیلی خیلی خوبیه!!!

----------


## amin1softco

در این پست یکسری برنامه آموزشی قرار می دم که بدرد اساتید محترم می خوره برای آموزش توابع که در بیشتر اونها با کلیک کردن روی عدد تابع مورد نظر تغییراتش روی صحنه اعمال می شه و بیشتر توابع را هم توضیح داده :
fog.jpg
light&m.jpg
lightposition.jpg
projection.jpg
shap.jpg


بچه ها پست اسپم ندید برنامه بگذارید و نکته بگید بازم مرسی  :قلب:

----------


## amin1softco

texture.jpg
transformation.jpg
تمام این برنامه ها در فایل های ضمیمه سورسش هست مشکلی بود خبر بدین....

----------


## amin1softco

یکی از برنامه هایی که بر و بچ هوش با اون سر و کار دارند پازل هشت و نوع پیشرفته تر اون مکعب روبیکه که توابه هیورستیکش رو با absolver بدست آوردند. و یکی از کارهای جالب مایکروسافت اینه که یک برنامه داره که با openGL اومده حل کردن این مکعب رو به نمایش گذاشته اطلاعات بیشتر سورس در فایل ضمیمه....

----------


## amin1softco

اول بگم که برنامه قبلی ایرانی ! آقای علی رفیعی برنامه مکعب روبیک رو نوشتند...
خوب یکی از چیزایی که همه به اون نیاز دارند یک سرپناهه در این برنامه می خواهیم به شما نشون بدیم با توابع ساده openGL چطوری می شه یک خونه نقلی جور کرد دست خانم بچه ها رو گرفت و رفت داخلش و از زندگی لذت برد....

این برنامه با زبان سی شارپ نوشته شده و قبل از اجرا نیاز به TAO داره... منبع
*تمرین* : تبدیلش کنید به زبان سی++ :چشمک:

----------


## amin1softco

من می خوام یک برنامه طراحی کنم با سوکت ها (به قولی تحت شبکه) برای os ویندوز که مثلاً کنترلر یک توپ یکجا باشه و خودش در یک برنامه دیگه بعد این کنرلر بتونه توپ را کنترل کنه مثلاً باکلید های جهت نما بعد توپ در برنامه دیگه حرکت کنه البته این مثال بیشتر تریپش به برنامه های شبکه می خوره تا بازی ولی خوب باید چیزه جالبی در بیاد من از حالا شروع می کنم کسی خواست می تونه برنامه رو تحت لینوکس با سوکت های برکلی بنویسه :چشمک:  فکر کنم چیزه جالبی بشه :دیییی

یکسری مثال بدرد بخور :
http://nccastaff.bournemouth.ac.uk/j...ogramming.html

----------


## soroushp

دوستان اینم اولین تمرین من  :قهقهه: 
X^3.png

HW02.rar

----------


## soroushp

سلام-این برنامه دوم هست ، امیدوارم مفید باشه:
g.jpg
HW03.rar

----------


## amin1softco

خوب نزدیک عید نوروز هستیم یک برنامه خیلی جالب دیدم که با نهنگ و سال 91 بی ارتباط نیست گفتم بزارم شاید مفید واقع بشه 

C++‎ & glut در حالت تمام صفحه بهترین کیفیت رو داره
منبع : http://www.opengl.org/wiki/Code_Resources

----------


## amin1softco

یک مثال خیلی جالب دیدم در مورد قرار دادن یک قسمت فرم در mfc برای ترسیمات openGL که به نظرم خیلی خوبه 



به دومین آموزش اپن جی ال خوش آمدید من تصمیم گرفتم در مورد این موضوع بنویسم چون فکر می کردم جالبه و دیدم که خیلی از افراد منتظر انجام چنین کاری هستند
پس چرا معطل کنیم. اون به سادگی یک پنجره داخلی در یک دایلوگ نرمال است که می شه در اون اشکال OPENGL رو ترسیم کرد از یک طرف شما OPENGL رو دارید و از طرف دیگه کنترل های استاندارد ویندوز را 
اگر شما نمی تونید تصورش کنید به این پروژه من نگاه کنید.
بگذارید سریع تر در این موضوع هیجان انگیز شیرجه بزنیم. ;) 
نظریه کاملی در مورد صحبت کردن یک فرد وجود نداره. و خوبه... 
همه چیز با یک پروژه جدید mfc شروع می شه.
یک پروژه جدید با استفاده از Mfc application wizard ایجاد کنید. گزینه سوم را انتخاب کنید یک برنامه dialog-based در پنجره های(dialog) زیر؟(بعدی) شما می تونید هرچیزی رو که می خواهید عملاً فعال/غیرفعال کنید و در این مورد زیاد مهم نیست.
شما حالا  یک برنامه کوچیک mfc آماده باید داشته باشید. ما با چیزهای مهمه پروژه شما شروع می کنیم یک پنجره کوچیکOPENGL در گوشه.

*یک پنجره OPENGL داخلی*
اوکی شما الان پروژه کوچیک OPENGL خودتون رو دارید ولی ..بعدش چی؟ اول سریع ترین و راحت ترین چیز ;) ساخت dialog در dialog editor. وقتی پروژه ساخته شد این باید اولین چیزی باشه که شما در MSDEV می بینید. شما چطوری دایلوگ کوچیک خودتون رو می چینید بی ربطه.تنها چیزی که ما باید انجام بدیم ساخت یک تکست فیلده که در نگاه اول بی فایده به نظر می رسه. اما در واقع یک قالب برای پنجره OpenGL ما محسوب می شه. پنجره دقیقاً همان اندازه و موقعیت این کنترل استاتیک کوچک رو داره.
بعداً اگر شما بخواهید موقعیت یا اندازه پنجره را تغییر بدید شما نیازی به تغییر کد خودتون ندارید و فقط کافیه اندازه این تکست فیلد را تغییر بدید.

اینجا شما دایلوگی که من درست کردم را می بینید. اون داره فقط دوتا تکست فیلد و دو تا باتن در پایین. اینها در نظر گرفته شده تا نمایش بدند چگونه پنجره openGL با کنترل های استاندارد با هم کار می کنند. تنها کنترل مهم تکست فیلد پایینه گوشه چپه. اون هیچ نوشته ایی نداره و در واقع پنهانه.اوکی سپس یک تکست فیلد به دایلوگ اضافه کنید و در جایی که می خواهید پنجره openGL نمایش داده شود قرار دهید. اسمش مهم نیست اما اونو با ID_STATIC as MSDEV پیش فرض فراخوانی نکنید.ما بعداً نمی توانیم موقعیت و اندازه اون رو بدست بیاریم؟!. من به سادگی فراخوانیش می کنم ID_OPENGL_WINDOW. اون یک جعبه است من انتخابش کردم روی تصویر طرف چپ . caption فیلد را پاک کنید و مطمئن شوید که اون نامرئیه (Under properties > Behaviour, تیک حصوصیت Visible را بردارید). 
بنابر این پس از این مرحله ساده ما  یک دایلوگ کامل داریم و می تونیم به سمت کد نویسی حرکت کنیم. و یکمی کار سخت تر می شه... اما وحشت نکنید هنوز هم خیلی سخت نیست.  کاری که ما باید اول انجام بدیم ساخت یک کلاس جدیده که از CWnd مشتق شده سپس پنجره کوچک openGL در پایین کادر خواهد بود. بنابراین یک کلاس جدید ایجاد کنید و COpenGLControl بنامیدش با CWnd به عنوان کلاس پایه .Click on Insert | New Class... , یا کاری شبیه این.
مراحل بعدی به این ترتیبه :
* Create the window * Create an OpenGL rendering context * Setup basic OGL things (viewport, state machine etc.) 
بگذارید کد نویسی را شروع کنیم! اولین چیزی که به انجام آن بسیار نیاز است اضافه کردن متغیر ها و اشیاء به COpenGLControl است.
برای ساخت یک مکان رندرمحتوی OPENGL ما از OpenGLDevice استفاده خواهیم کرداز قسمت کد ها شما می توانید از توابع خودتون برای ست کردن فرمت پیکسل ها یا کارهای دیگه استفاده کنید. اما من  از این کلاس استفاده می کنم چون بسیار ساده است. این سه متغیر عبارتند از : OpenGLDevice openGLDevice (فراموش نکنید هدر ها رو اضافه کنید!), CClientDC* dc محتوای پنجره است و float rotation برای چرخش مثلث که ما قراره در این پنجره کوچک ترسیم کنیم.
این کد سازنده و مخرب کلاسه :
COpenGLControl::COpenGLControl()
{
   dc = NULL;
   rotation = 0.0f;
} 
 
COpenGLControl::~COpenGLControl()
{
   if (dc) //Only delete dc when really allocated
   {
      delete dc;
   }
}
اولین مرحله بالا به سادگی انجام شد. اون انجام شده در Create(..) از COpenGLControl تابعی که ما الان ایجاد می کنیم. بنابراین اضافه کنید Create(CRect rect, CWnd* parent) به COpenGLControl. 
این کدشه :
void COpenGLControl::Create(CRect rect, CWnd *parent)
{
   //Register window class
   CString className = AfxRegisterWndClass(
      CS_HREDRAW | CS_VREDRAW | CS_OWNDC,
      NULL,
      (HBRUSH)GetStockObject(BLACK_BRUSH),
      NULL);
  
   //Finally create the window
   CreateEx(
      0,
      className,
      "OpenGL",
      WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
      rect,
      parent,
      0);
} 

در این تابع ما یک پنجره openGL کوچک ایجاد خواهیم کرد . آن دقیقاً همان اندازه مشخص شده با rect است. در ثانی اون یک کلاس فرزند از parent است که دایلوگ اصلی روی اونه. مرحله بعدی ساخت یک قسمت برای رندر کردن محتوی openGL است . این انجام می شه بوسیله دستگیره پیام message handler برای WM_CREATE . بنابراین دستگیره ایی برای این پیام اضافه می کنیم . و این کدشه :
int COpenGLControl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
   if (CWnd::OnCreate(lpCreateStruct) == -1)
      return -1;
   
   dc = new CClientDC(this); //Get device context of window
   openGLDevice.create(dc-&gt;m_hDC); //Create opengl rendering context
   InitGL();
 
   //DONE
   return 0;
}
سپس  یک دستگیره پیام اضافه می کنیم برای WM_SIZE در COpenGLControl. و ما OpenGL viewport را در اون تنظیم می کنیم. با این کد :
void COpenGLControl::OnSize(UINT nType, int cx, int cy) 
{
   CWnd::OnSize(nType, cx, cy);
 
   if (cy == 0) 
   {
      cy = 1; 
   }
   
   glViewport(0,0,cx,cy); 
   glMatrixMode(GL_PROJECTION); 
   glLoadIdentity(); 
 
   glOrtho(-1.0f,1.0f,-1.0f,1.0f,1.0f,-1.0f);
 
   glMatrixMode(GL_MODELVIEW); 
   glLoadIdentity();
}
اتفاق خاصی اینجا رخ نداده . viewport همانند یک پروجکشن متعامد(orthogonal projection) در نظر گرفته شده . اینم مثل تمام پروژه های OpenGL است.
تابع بعدی InitGL() است که وقتی پنجره ساخته شد فراخوانی می شه و این بهترین مکان برای آغازکردن چیزهای مرتبط با OpenGL است.شبیه نورها یا نگاشت بافت ها (texture mapping) .

  void InitGL() را اضافه کنید به COpenGLControl. 
کد:
void COpenGLControl::InitGL()
{
   glShadeModel(GL_SMOOTH);
   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
   glClearDepth(1.0f); 
   glEnable(GL_DEPTH_TEST); 
   glDepthFunc(GL_LEQUAL); 
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

یک کد خیلی ساده اینجاست. شما باید بدونید ما داریم  اینجا چه کار می کنیم یا شما با کمی اشتباه در این مکان هستید;-). تابع بعدی در واقع تابعی است که  سرانجام  چیزهایی را روی صفحه ترسیم می کنه. اسمش void DrawGLScene():  است. 
void COpenGLControl::DrawGLScene()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glLoadIdentity();
 
   //***************************
   // DRAWING CODE
   //***************************
   
   //Rotate the triagle
   glRotatef(rotation,0.0f,1.0f,0.0f);
 
   glBegin(GL_TRIANGLES);
      glColor3f(1.0f,0.0f,0.0f);
      glVertex3f(1.0f,-1.0f,0.0f);
      glColor3f(0.0f,1.0f,0.0f);
      glVertex3f(-1.0f,-1.0f,0.0f);
      glColor3f(0.0f,0.0f,1.0f);
      glVertex3f(0.0f,1.0f,0.0f);
   glEnd();
 
   SwapBuffers(dc-&gt;m_hDC);
}

این تابع یک مثلث رنگی چرخان بوسیله درجه rotation به سادگی ترسیم می کنه.اون فراخوانی می کنه تابع بعدی رو. اون یک دستگیره پیام برای WM_PAINT که پیام های پنجره است که هر زمان فراخوانی می شوند پنجره باید رفرش (دوباره ترسیم) شود.
  دستگیره  COpenGLControl را اضافه اضافه کنید و کاملش کنید در کدزیر :
void COpenGLControl::OnPaint() 
{
   rotation += 0.01f;
 
   if (rotation &gt;= 360.0f)
   {
      rotation -= 360.0f;
   }
 
   /** OpenGL section **/
   
   openGLDevice.makeCurrent();   

   DrawGLScene();

   CWnd::OnPaint(); 
}
ابتدا ما rotation را آپدیت می کنیم بنابر این مثلثمون در واقع چرخیده و سپس ما  DrawGLScene() را فراخوانی می کنیم که اون  اشکال کوچیک را ترسیم می کنه. چیزی که اینجا خیلی مهمه فراخوانی openGLDevice.makeCurrent() است. این تابع اطمینان میده که قبل از ترسیم در پنجره محتوی دستگاه openGL (OpenGL device context)صحیح انتخاب شده .شبیه این که امکان داره ما بیش از یک مکان ترسیمی روی پنجره برای openGL داشته باشیم.
آخرین و پر اهمیت ترین دستگیره پیام WM_ERASEBKGND که اطمینان میده که صف پیام های دایلوگ سرریز نشده است.
WM_ERASEBKGND همیشه وقتی که پس زمینه باید پاک بشه  فرستاده می شه به پنجره
 این دستگیره رو اضافه کنید به این پیام به COpenGLControl و در کد زیر :
BOOL COpenGLControl::OnEraseBkgnd(CDC* pDC) 
{
   //we've erased it - at least we do so
   return TRUE;
}

همه این ها برای COpenGLControl بود. کار این کلاس تمام شده. مرحله بعدی بروز رسانی کمی در کلاس پدرش (دایلوگ) است. اوکی بعدش آماده است.

*کلاس دایلوگ The Dialog Class*
چیزه زیادی برای انجام این کار باقی نمونده . فقط کمی کدنویسی و مقایسه با آخرین قسمت ,دشوارترین طاقت فرسا و کشنده, این یک باز کودکانه واقعی است... اول ما  یک نمونه از کلاس COpenGLControl را به دایلوگ خودمون اضافه می کنیم . این را انجام بدید از کلاس دایلوگ خودتون (من فراخوانیش کردم اینجا COpenGLDialogDlg با COpenGLDialogDlg.h به عنوان هدر)
در این قطعه کد :
//In COpenGLDialogDlg.h
//.. 
 
//Very important
#include "OpenGLControl.h"
 
class COpenGLDialogDlg : public CDialog
{
   //Other things..
   //..
protected:
   //Our instance of COpenGLControl
   COpenGLControl openGLControl;
 
   //..
};

حالا کلاس دایلوگ ما می شناسه نمونه را و ما می تونیم حر کت کنیم به سمت آخرین مرحله . این  در OnInitDialog() از COpenGLDialogDlg که باید بطور خودکار بوسیله Mfc wizard انجام بشه  .
اینجا ما پنجره OpenGL خودمون رو آماده کردیم و مکانی که در اون قرار میگیره رو مشخص کردیم.
آخرین قطعه کد برای امروز ... اینه:
BOOL COpenGLDialogDlg::OnInitDialog()
{
   CDialog::OnInitDialog();
   
   //.. OTHER THINGS ARE DONE ..
   SetIcon(m_hIcon, TRUE); 
   SetIcon(m_hIcon, FALSE);
 
   // TODO
 
   //Get Size and position of the template textfield we created
   //before in the dialog editor
   CRect rect;
   GetDlgItem(IDC_OPENGL_WINDOW)-&gt;GetWindowRect(rect);
 
   //Convert screen coordinates to client coordinates
   ScreenToClient(rect);
   //Create the OpenGL window using the size and set this dialog as parent
   openGLControl.Create(rect,this);
 
   return TRUE; 
}

تمام شد! در این قطعه کد کوچیک شما می بینید چرا تکست فیلدی که قبلاً ایجاد کردیم خیلی مفیده. ما window-rect اونو گرفتیم . اندازه و مکانش روی صفحه و فراخوانی کردیم COpenGLControl::Create(..) با اون به عنوان پارامتر هاش GetDlgItem(IDC_OPENGL_WINDOW) که بر می کردونه یک اشاره گر از CWnd به این کنترل IDC_OPENGL_WINDOW. اگر یادتون باشه ما به قالب تکست فیلد یک نام دادیم و با اون بدون ایجاد یک نمونه جدید می تونیم بهش مراجعه کنیم و اطلاعاتش را بدست بیاریم.
حالا همه چیز انجام شده! پروژتون رو کامپایل کنید و شما یک پنجره داخلی کوچک OpenGL در دایلوگ استانداردتون خواهید داشت  . بهترین چیز اینه که شما مجبور نیستید کدتون را بیشتر از این تغییر بدید  اگر شما بخواهید حرکت بدید یا تغییر اندازه بدید پنجره openGL را شما می تونید این برنامه رو گسترش بدید. شما می تونید  از این کد پایه برای ایجاد یک باکس اطلاعاتی تعاملی برای یکی از پروژه هاتون با یک لوگو پویا که بوسیله openGL ترسیم می شه استفاده کنید. بنابراین خیلی چیز ها ممکنه.
اگر شما سئوالات بیشتر یا نظر یا  مشکلی شبیه این داشتید می تونید به سادگی برای من میل بزنید یا سئوالتون را در انجمن مطرح کنید. من سعی می کنم به اون ها پاسخ بدم. خوشحال می شم شما رو در کد نویسی و آموزش بعدی ملاقات کنم.

منبع + توضیحات بیشتر + دانلود : http://steinsoft.net/index.php?site=.../opengl_dialog

----------


## soroushp

HW05.rar
اینم یه تمرینه دیگه  + جا داره از جناب amin1softco جهت راهنمایی  ؛ تشکر ویژه کنم

----------


## amin1softco

> HW05.rar
> اینم یه تمرینه دیگه  + جا داره از جناب amin1softco جهت راهنمایی  ؛ تشکر ویژه کنم


 من کمک خاصی نکردم ولی شما استعدادش رو دارید.
به نظرم می تونید خیلی پیشرفت کنید.

----------


## MMSHFE

با سلام، من هم چند تا مقاله درباره OpenGL نوشتم و توی سایتم گذاشتم که خوشحال میشم نظر دوستان متخصص رو بدونم. لینک دریافت مقالات:
*جلسه اول*
*جلسه دوم*
*جلسه سوم*
*جلسه چهارم*
*چلسه پنجم*
*جلسه ششم*
*جلسه هفتم*
موفق باشید.

----------


## soroushp

من ابتدای راه هستم اما به نظرم برای اونهایی که تاحالا برنامه نویسی opengl نکردند قابل فهم هست ، حداقل برای من که مفیده!

----------


## soroushp

robocup.jpg
robocup.rar
این با d می چرخه و حرکتش هم با timerfunction هست. :چشمک:

----------


## soroushp

اینم یک هلی کوپتر ساده که به کمک دوست عزیز amin و pouya طراحی شد

Attachments_2012_04_21.zip

----------


## soroushp

اینم یک برنامه از فرکتال ، هرچند ابتدایی :

Fractal.rar

as.jpg

----------


## marijo0o0n

سلام و خسته نباشید
من  درس گرافیک دارم درس راجع به مانیتورهای رنگی و ... بود حالا که به پایان ترم نزدیک شدیم استاد میگه  باید 
پروژه با opengl تحویل بدید :گریه: 
من با opengl کار نکردم یک هفته بیشتر هم مهلت ندارم  :گریه: 
تورو خدا اگه کسی میتونه کمکم کنه ممنون میشم ازتون 

یک  رسم دایره که در زمان اجرا حرکت کنه

----------


## neda_1367_sh

> سلام و خسته نباشید
> من  درس گرافیک دارم درس راجع به مانیتورهای رنگی و ... بود حالا که به پایان ترم نزدیک شدیم استاد میگه  باید 
> پروژه با opengl تحویل بدید
> من با opengl کار نکردم یک هفته بیشتر هم مهلت ندارم 
> تورو خدا اگه کسی میتونه کمکم کنه ممنون میشم ازتون 
> 
> یک  رسم دایره که در زمان اجرا حرکت کنه


سلام نگران نباش خیلی سادس.
چون این چند روز خودم تحویل پروژه دارم فقط بگو تا کی وقت داری من حتما  انجامش میدم .

----------


## soroushp

> سلام و خسته نباشید
> من  درس گرافیک دارم درس راجع به مانیتورهای رنگی و ... بود حالا که به پایان ترم نزدیک شدیم استاد میگه  باید 
> پروژه با opengl تحویل بدید
> من با opengl کار نکردم یک هفته بیشتر هم مهلت ندارم 
> تورو خدا اگه کسی میتونه کمکم کنه ممنون میشم ازتون 
> 
> یک  رسم دایره که در زمان اجرا حرکت کنه


هدف این تاپیک هم همینه دیگه ، یکی از برنامه ها رو انتخاب کن و روش کار کن اگر سوالی داشتی بپرس

----------


## marijo0o0n

سلام ندا جون 
نمیدونی چقدر خوشحال شدم من 23 /3 امتحان گرافیک دارم  که باید تحویل بدم عزیزم
نمیدونم چجوری باید ازت تشکر کنم  :بوس:

----------


## marijo0o0n

> هدف این تاپیک هم همینه دیگه ، یکی از برنامه ها رو انتخاب کن و روش کار کن اگر سوالی داشتی بپرس


سلام این برنامه ها خیلی  به نظرم یچیده است من یه چیز ساده تر می خواستم که بتونم روش کار کنم نه این برنامه ها

----------


## marijo0o0n

سلام ندا جون 
نمیدونی چقدر خوشحال شدم من 23 /3 امتحان گرافیک دارم  که باید تحویل بدم عزیزم
نمیدونم چجوری باید ازت تشکر کنم  :بوس:

----------


## amin1softco

ب نظرم شما پیام نوری هستید!!! به تاپیک آموزش openGL مراجعه کنید این برنامه داخلش هست.صفحه 5 فک کنم.

----------


## marijo0o0n

سلام نه خیر پیام نوری نیستم .ممنون از راهنماییت

----------


## soroushp

تا اونجایی که سواده من می رسه تو opengl میشه با 2 راه دایره کشید : 1- معادله دایره 2- توابع آماده
کدام مدنظره شماست ؟

----------


## marijo0o0n

> تا اونجایی که سواده من می رسه تو opengl میشه با 2 راه دایره کشید : 1- معادله دایره 2- توابع آماده
> کدام مدنظره شماست ؟


بله با این دو راه  میشه دایره کشید .فرقی نمیکنه

----------


## soroushp

از اساتید محترم عذرخواهی می کنم ؛ برای حرکت دایره باید از تابع timerfuction استفاده کنی ، بقیه اش رو سعی کن خودت انجام بدی 

// circle.c
// OpenGL SuperBible
// Demonstrates point, line, and polygon smoothing
// Program by Richard S. Wright Jr.
	// System and OpenGL Stuff

#include <math.h>
#include <gl/glut.h>
#include <stdio.h>

#define SCREEN_X    800
#define SCREEN_Y    600
///////////////////////////////////////////////////
int edgeOnly=0; 
void DrawCircle(double radius, int numberOfSides);

GLUquadricObj *qobj;
// Called to draw scene
void RenderScene(void)
    {

    GLfloat x = 700.0f;     // Location and radius of moon
    GLfloat y = 500.0f;
    GLfloat r = 50.0f;
    GLfloat angle = 0.0f;   // looping variable
		        
    // Clear the window
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         
    // Everything is white
    glColor3f(1.0f, 1.0f, 1.0f);
       
    // Draw the "moon"
    glBegin(GL_TRIANGLE_FAN);
        glVertex2f(x, y);
        for(angle = 0; angle < 2.0f * 3.141592f; angle += 0.1f)
            glVertex2f(x + (float)cos(angle) * r, y + (float)sin(angle) * r);
            glVertex2f(x + r, y);
    glEnd();

//Draw the "ball"
   glPushMatrix();
   glTranslatef(390,117,0);
   glColor3f(1,0,0);
   edgeOnly=1;
   DrawCircle(20, 6);
   glPopMatrix();

//Draw the "sun"
   glPushMatrix();
   glTranslatef(100,500,0);
   glColor3f(1,1,0);
   edgeOnly=0;
   DrawCircle(100, 200);
   glPopMatrix();


    // Draw distant horizon
    glLineWidth(3.5);
    glBegin(GL_LINE_STRIP);
        glVertex2f(0.0f, 25.0f);
        glVertex2f(50.0f, 100.0f);
        glVertex2f(100.0f, 25.0f);
        glVertex2f(225.0f, 125.0f);
        glVertex2f(300.0f, 50.0f);
        glVertex2f(375.0f, 100.0f);
		glColor3f(1,1,1);
        glVertex2f(460.0f, 25.0f);
        glVertex2f(525.0f, 100.0f);
        glVertex2f(600.0f, 20.0f);
        glVertex2f(675.0f, 70.0f);
        glVertex2f(750.0f, 25.0f);
        glVertex2f(800.0f, 90.0f);    
    glEnd();

//glLineWidth(1.0);
//Draw the "minicircle1"
   glPushMatrix();
   glTranslatef(200,300,0);
   glColor3f(1,0,0);
   glutWireSphere(50,40,10);
   glPopMatrix();

//Draw the "minicircle2"
   glPushMatrix();
   glTranslatef(300,300,0);
   glColor3f(0.5,0,0);
   glutSolidSphere(40,80,8);// why?
   glPopMatrix();

//Draw the "minicircle3"
   glPushMatrix();
   glTranslatef(400,300,0);
   glColor3f(1,1,1);
   glutWireCone(30,20,8,10);
   glPopMatrix();

//Draw the "minicircle4"
   glPushMatrix();
   glTranslatef(500,300,0);
   glColor3f(1,1,1);
   glutSolidCone(35,20,8,10);
   glPopMatrix();

//Draw the "minicircle5"
   glPushMatrix();
   glTranslatef(600,300,0);
   glColor3f(0,1,0);
   glutWireTorus(0,40,10,6);
   glPopMatrix();

//Draw the "minicircle6"
   glPushMatrix();
   glTranslatef(700,300,0);
   glColor3f(1,1,0);
   glutSolidTorus(8,40,5,600);// How?
   glPopMatrix();

//Draw the "minicircle7"
   glPushMatrix();
   glTranslatef(200,200,0);
   glColor3f(0,0,1);
   qobj=gluNewQuadric();
   gluQuadricDrawStyle(qobj, GLU_POINT);
   gluSphere(qobj,45,80,10);
   glPopMatrix();

//Draw the "minicircle8"
   glPushMatrix();
   glTranslatef(300,200,0);
   glColor3f(0,0.5,0);
   qobj=gluNewQuadric();
   gluQuadricDrawStyle(qobj, GLU_LINE);
   gluCylinder(qobj,45,30,10,8,20);
   glPopMatrix();

//Draw the "minicircle9"
   glPushMatrix();
   glTranslatef(400,200,0);
   glColor3f(0,0,0.5);
   qobj=gluNewQuadric();
   gluQuadricDrawStyle(qobj, GLU_FILL);
   gluDisk(qobj,0,30,6,8);
   glPopMatrix();

//Draw the "minicircle10"
   glPushMatrix();
   glTranslatef(500,200,0);
   glColor3f(1,1,0.5);
   qobj=gluNewQuadric();
   gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
   gluPartialDisk(qobj,0,50,60,8,0,325);
   glPopMatrix();


    // Swap buffers
    glutSwapBuffers();
    }

  void DrawCircle(double radius, int numberOfSides) 
  { 
	int vertex;
    // if edge only, use line strips; otherwise , use polygons 
    if(edgeOnly) 
      glBegin(GL_LINE_STRIP); 
    else 
     glBegin(GL_POLYGON); 
   
   // calculate each vertex on the circle 
   for ( vertex =0;vertex<numberOfSides;vertex++) 
   { 
     // calculate the angle of current vertex 
     // ( vertex # * 2 * PI ) / # of sides 
     float angle_c = (float) vertex * 2.0 * 3.14159 / numberOfSides; 
          
     // draw the current vertex at the correct radius 
    glVertex2f(cos(angle_c)*radius, sin(angle_c)*radius);  
 
   } 
   
   // if drawing edge only, then need to complete the loop with first vertex 
   if(edgeOnly) 
      glVertex2f(radius, 0.0); 
   
   glEnd(); 
   
 } 
// This function does any needed initialization on the rendering
// context. 

void SetupRC()
    {
    //int i;
             
    // Black background
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f );

    // Set drawing color to white
    glColor3f(0.0f, 0.0f, 0.0f);
    }

void ChangeSize(int w, int h)
    {
    // Prevent a divide by zero
    if(h == 0)
        h = 1;

    // Set Viewport to window dimensions
    glViewport(0, 0, w, h);

    // Reset projection matrix stack
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // Establish clipping volume (left, right, bottom, top, near, far)
    gluOrtho2D(0.0, SCREEN_X, 0.0, SCREEN_Y);

    // Reset Model view matrix stack
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }

int main(int argc, char* argv[])
	{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(800, 600);
	glutCreateWindow("My Moon");
	glutReshapeFunc(ChangeSize);
	glutDisplayFunc(RenderScene);
	SetupRC();
	printf("This program represents some methods for circle drawing\n");

	glutMainLoop();

	return 0;
	}

این برنامه رو اجرا کن ببین ،

----------


## marijo0o0n

مسخره میکنی  :لبخند گشاده!:  من که اولش گفتم  بلد نیستم دیگه چرا ....

----------


## marijo0o0n

[Linker error] undefined reference to `WinMain@16' 
  ld returned 1 exit status 
 C:\Dev-Cpp\Makefile.win [Build Error]  [Project1.exe] Error 1 


ربطی به این برنامه نداره کلا هر برنامه ای داخلش اجرا میکنم این error ها رو میده؟برای چی هستش؟؟؟

----------


## soroushp

چند تا پست قبل جناب MMSHFE چند تا فایل آموزشی گذاشته  کل اش رو دانلود کن ، حتما متوجه میشی

----------


## neda_1367_sh

بالاخره چی شد؟
تونستی؟
من با 1 راه خیلی ساده مینویسم که خودتم متوجه بشی.
کاش استاد ما هم انقدر ساده میگرفت.
امروز پروژه Open gl خودم failed شد نمیدونم چیکار کنم؟ :گریه:  :گریه:  :گریه:

----------


## soroushp

> بالاخره چی شد؟
> تونستی؟
> من با 1 راه خیلی ساده مینویسم که خودتم متوجه بشی.
> کاش استاد ما هم انقدر ساده میگرفت.
> امروز پروژه Open gl خودم failed شد نمیدونم چیکار کنم؟


 میشه از پروژت عکس بگیری ببینیم چه کردی ؟

----------


## neda_1367_sh

> میشه از پروژت عکس بگیری ببینیم چه کردی ؟


پروژه خودمو میگی؟
میزارم تو پست بازی مسیر یابی با open gl

----------


## marijo0o0n

> بالاخره چی شد؟
> تونستی؟
> من با 1 راه خیلی ساده مینویسم که خودتم متوجه بشی.
> کاش استاد ما هم انقدر ساده میگرفت.
> امروز پروژه Open gl خودم failed شد نمیدونم چیکار کنم؟


اخی چرا؟
نه بابا من هر برنامه ای که اجرا می کنم ازم error میگیره حتی همین کد برنامه هایی که دوستان محبت کردن و برام ارسال کردن اجراشون میکنم خطا میگیره
ولی یه پروژه آماده که استاد خودش بهمون داد به عنوان نمونه اجرا میشه 
نمیدونم باید چکار کنم

----------


## neda_1367_sh

> اخی چرا؟
> نه بابا من هر برنامه ای که اجرا می کنم ازم error میگیره حتی همین کد برنامه هایی که دوستان محبت کردن و برام ارسال کردن اجراشون میکنم خطا میگیره
> ولی یه پروژه آماده که استاد خودش بهمون داد به عنوان نمونه اجرا میشه 
> نمیدونم باید چکار کنم


 ببخشید ولی شما فایل های glut رو در مسیرهای مربوطه paste کرده اید؟
console application انتخاب میکنید؟
شرمنده چون گفتی بلد نیستی این سوالا رو میپرسم.

----------


## amin1softco

http://s3.picofile.com/file/7394041826/dev.zip.html
این فایل رو دانلود کنید یک فایل آموزشی + برنامه کامل dev برای اجرای glut است. فکر کنم مشکلتون رو برطرف کنه.

----------


## marijo0o0n

> ببخشید ولی شما فایل های glut رو در مسیرهای مربوطه paste کرده اید؟
> console application انتخاب میکنید؟
> شرمنده چون گفتی بلد نیستی این سوالا رو میپرسم.


خواهش میکنم "اره به خدا تمام این کارا رو هم انجام دادم  اون 3 تا  فایل ها رو هم در درایو c مسیرهای خودشون کپی کردم 
از project option اون 3 فایل رو انتخاب کردم  :گریه:

----------


## neda_1367_sh

> خواهش میکنم "اره به خدا تمام این کارا رو هم انجام دادم  اون 3 تا  فایل ها رو هم در درایو c مسیرهای خودشون کپی کردم 
> از project option اون 3 فایل رو انتخاب کردم


 1 نمونه برات میفرستم ببین اجرا میشه.

----------


## marijo0o0n

> 1 نمونه برات میفرستم ببین اجرا میشه.


 ممنون باشه پروژه خودتون چی شد درستش کردی

----------


## neda_1367_sh

> ممنون باشه پروژه خودتون چی شد درستش کردی


نه بابا این جا هم هیچ کس نیست کمک کنه :گریه:

----------


## marijo0o0n

> http://s3.picofile.com/file/7394041826/dev.zip.html
> این فایل رو دانلود کنید یک فایل آموزشی + برنامه کامل dev برای اجرای glut است. فکر کنم مشکلتون رو برطرف کنه.


 خیلی  ممنون ولی من همه این کارا رو انجام میدم  ولی به قول شما این برای اجرای glut هست که من اونجا از console aplication استفاده میکنم

----------


## amin1softco

خوب حالا یک بار از glut استفاده کنید ببنید چی می شه امتحانش ضرری نداره 
کنسول برای ویزال استادیو است در ضمن باید همین dev-cpp نصب بشه

----------


## roza20

میشه ی نفر کمک کنه هیچکدوم از برنامه ها تو سیتم من اجرا نمیشه چیکار کنم؟

----------


## amin1softco

> میشه ی نفر کمک کنه هیچکدوم از برنامه ها تو سیتم من اجرا نمیشه چیکار کنم؟


به قسمت آموزش openGL مراجعه کنید .

robat.jpg

در این پست برنامه ربات بوسیله موتور فیزیک ODE و GLUT قرار میدهم که با این موتور می تونید تشخیص برخورد در حد خیلی خفن استفاده کنید در ضمن فایل های کامپایل شده .lib و .dll برای ویژوال اسادیو 2010 را از اینجا دریافت کنید. و طبق معمول به کامپایلر خودتون معرفیشون کنید :دی یا اگر تمایل به کامپایل دارید به اینجا و مراحل را دنبال کنید بعداً بوسیله ویژوال استادیو فایل را به 2010 بصورت اتومات می شه ارتقاء داد.
برنامه ضمیمه شد.

----------


## amin1softco

ایجاد پنجره های شفاف بوسیله glut که این برنامه با کمک seganX کامل شد خیلی ازش ممنونم.
این خروجی بوسیله glut ایجاد شده .
transparent.jpg
سورس برنامه ضمیمه شد...

----------


## samanegh

سلام دوستان من سوالی درباره بافت ها در opengl داشتم، من یک کد ساده نوشتم تا یک texture بر روی شکل کشیده شود و براساس کتاب و آنچه استادم گفته بودند پیش رفتم، برنام اجرا میشد اما هیچ بافتی بر روی چهارضلعی کشیده نمیشه؟ به نظر دوستان مشکل از کجای برنامه است؟void tarsim()
{
    GLbyte *pImage;
    GLint iWitdth,iHeight,iComponents;
    GLenum eFormat;

    /*GLfloat points[3]={{},{},{}
                       }*/
    glEnable (GL_DEPTH_TEST ); 
    glClear (GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT );
    glColor3f (0.5,0.5,0);
    pImage = gltReadTGABits ("texture_1340225762_001.tga",&iWitdth ,&iHeight ,&iComponents ,&eFormat );
    glTexImage2D (GL_TEXTURE_2D ,0,iComponents ,iWitdth ,iHeight ,0,eFormat ,GL_UNSIGNED_BYTE ,pImage );
    free (pImage );
    glTexParameteri (GL_TEXTURE_2D ,GL_TEXTURE_MIN_FILTER ,GL_LINEAR );
    glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER ,GL_LINEAR );
    glTexParameteri (GL_TEXTURE_2D , GL_TEXTURE_WRAP_S , GL_CLAMP_TO_EDGE );
    glTexParameteri (GL_TEXTURE_2D ,GL_TEXTURE_WRAP_T , GL_CLAMP_TO_EDGE );
    glTexEnvi (GL_TEXTURE_ENV ,GL_TEXTURE_ENV_MODE ,GL_MODULATE );
    glEnable (GL_TEXTURE_2D );
    glBegin (GL_QUADS);
    glTexCoord2d (1,0);
    glVertex2f(-5,-2);
    glTexCoord2d (0,0);
    glVertex2f(8,-2);
    glTexCoord2d (0,1);
    glVertex2f(5,-9);
    glTexCoord2d (1,1);
    glVertex2f(-9,-9);
    glEnd ();
    glColor3f (1.0,0.5,0.2);
    glRectd (3,6,0,3);
}

----------


## UfnCod3r

glGenTexture , glBindTexture که اصلا استفاده نکردی ! درضمن تو تابع ترسیم هر دفعه تکسچر لود نمی کنن !  :لبخند:

----------


## sanazy

سلام کسی میتونه کمک کنه چجوری یه ابر بیضی تو فضای 3 بعدی میشه رسم کرد؟
و اینکه چطور میشه یه عکس رو روی یه بزیه بندازیم ؟ مرسی

----------


## mahvand

> glGenTexture , glBindTexture که اصلا استفاده نکردی ! درضمن تو تابع ترسیم هر دفعه تکسچر لود نمی کنن !


سلام،منم همین مشکل رو دارم و از این توابع هم استفاده کردم!!!!!!خواهش میکنم بیشتر توضیح بــــــــــــــــــــــــ  ــــــــــده :افسرده:  :گریه:

----------


## amin1softco

آموزش شروع به کار با physx و openGL 
http://www.devkast.com/2013/02/24/ge...-3-2-1-opengl/

----------


## amin1softco

در این پست می خواهم یک برنامه خیلی کاربردی به شما معرفی کنم که کسانی که با GLSL یا زبان سایه زنی openGL کار میکنند خیلی بدردشون می خوره و خیلی ساده می تونند شیدر های خودشون را طراحی و استفاده کنند و  اگر خدا بخواهد آموزش های GLSL را در قسمت آموزش OpenGL قرار میدم این برنامه اسمش Shader Designer  است.

زبان سایه زنی اپن جی ال یک زبان سایه زنی سطح بالا است که بر اساس سینتکس زبان برنامه نویسی سی بنا شده است که بوسیله هئیت نظارت بر معماری اپن جی ال (ARB) متشکل از شرکت های 3Dlabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI ایجاد شده تا به توسعه دهندگان کنترل مستقیم بیشتری روی خط لوله( pipeline ) گرافیک بدهد بدون اجبار در استفاده زبان اسمبلی ARB یا زبان سخت افزاری-خاص باشد .
با پیشرفت در کارت های گرافیک خصوصیات جدیدی  برای افزایش انعطاف پذیری خط لوله رندر در سطح رأس [vertex] و قطعه [fragment]  اضافه شد. برنامه نویسی در این سطح  بوسیله استفاده از سایه زن های رأس [vertex] و قطعه [fragment] امکان پذیر شد. در اصل این قابلیت  بوسیله نوشتن سایه زن ها در زبان اسمبلی ARB یک کار پیچیده و خشک بدست آمده بود . OpenGL ARB  زبان سایه زنی اپن جی ال را  ایجاد کرد تا روش با حس تری برای برنامه نویسی پردازنده کارت گرافیک (GPU)  ایجاد نماید در عین حفظ مزیت استاندارد های باز که به openGL  در طول تارخچه آن دیکته شده بود.

نحوه کار این شیدر های اینجوریه که این برنامه شما کامپایل می شه و به پردازنده کارت گرافیک تحویل داده می شود و افکت ها و انیمیشن ها ایجاد می گردد.
   دانلود 

صفحه دانلود 

برای استفاده از شیدر در برنامه های خودتون می تونید GLee را include کنید .
لینک های مرتبط : 
http://www.opengl.org/sdk/docs/tutorials/TyphoonLabs/
http://www.opengl.org/documentation/glsl/
کتاب نارنجی برای این سطح مناسب است .
OpenGL Shading Language, 3rd edition. ISBN 0-321-63763-1

----------


## amin1softco

یک سوالی که شاید برای خیلی ها پیش بیاد اینه که چطوری باید از قابلیت ها ی کارت گرافیک و مشخصات فنی و توانش مطلع بشیم برای این کار من دو تا نرم افزار پیشنهاد می کنم اولیش :

http://s2.picofile.com/file/77007295..._17_2.zip.html
دومی هم GLview است :


http://www.realtech-vr.com/glview/

----------


## bloodymary

سلام
من چجوری می تونم یک عکس رو به یک سطح اضافه کنم؟!
مثلا بافت آجری بدم بهش؟!

----------


## elina.dr

سلام،دوستان من یه پروژه دارم تو همین مایه ها گفتن یه خونه و منظره رسم کنین با  C#‎ آشنایی ندارم کسی میتونه تبدیل شده ی این برنامه ب زبان C++‎ رو بنویسه؟ممنون

----------


## elina.dr

> اول بگم که برنامه قبلی ایرانی ! آقای علی رفیعی برنامه مکعب روبیک رو نوشتند...
> خوب یکی از چیزایی که همه به اون نیاز دارند یک سرپناهه در این برنامه می خواهیم به شما نشون بدیم با توابع ساده openGL چطوری می شه یک خونه نقلی جور کرد دست خانم بچه ها رو گرفت و رفت داخلش و از زندگی لذت برد....
> 
> این برنامه با زبان سی شارپ نوشته شده و قبل از اجرا نیاز به TAO داره... منبع
> *تمرین* : تبدیلش کنید به زبان سی++


سلام،دوستان من یه پروژه دارم تو همین مایه ها گفتن یه خونه و منظره رسم  کنین با  C#‎‎ آشنایی ندارم کسی میتونه تبدیل شده ی این برنامه ب زبان C++‎‎  رو بنویسه؟ممنون

----------


## karaj.designer

سلام
من توو محیط opengl میخوام یه دایره سه بعدی رسم کنم که توسط کلیدهای جهت دار کیبورد بالا پایین چپ راست بره.
2 روز دیگه باید تحویل بدم و هنوز هیچچچچچچچچچچچچچچ کاری نکردم.
دوستان و اساتید ،خواهش می کنم کمکم کنید :گریه:

----------


## xkapitanx

با سلام.
من میخواستم کدی بنویسم که توش بشه یک میز کاری رو طراحی کرد که کشاب داشته باشه و بشه تو محیط با کلید ها حرکت کرد.
کسی چنین مثالی داره؟
مثالی که بشه مدلشو با میز عوض کرد و بجاش یک مدل تو مثلا 3ds max یا maya  ساخت بعد با اون مدل عوضش کرد؟(اصلا میشه مدل ساخته شده به برنامه منتقل  کرد؟)
بنده وارد نیستم زیاد.
خواهشا راهنمایی کنید که چطور میتونم این کار رو بکنم؟؟
خواهشا اگر کسی اسکریپتی با این base داره بهم بده من فقط مدلشو عوض کنم؟
ممنون میشم اگر توضیح بدید

----------


## ahmaduse

من یه مربع کشیدم میخوام دور خودش بچرخه  (حول مرکز  ) اما نمیشه میشه راهنمایی کنین؟

----------


## poneh asadi

سلام بچه ها به کمک فوری نیاز دارم
اگه بخوایم یه شکل از یه سمت که ناپدید میشه طرف مقابلش بیاد بیرون چه کدی باید بنویسیم؟؟؟؟؟؟؟

----------


## samadblaj

با سلام ببخشید من نیاز به سورس پرچم ایران به زبان سی پلاس پلاس یا ائپن  جی ال دارم خواهش میکنم دوستان کمک کنند یه شیرینی کوچیکم هدیش  :چشمک:

----------


## samadblaj

دوستان عزیز کسی پروژه ای در این حد نداره ؟!

----------


## amin1softco

درس 11 nehe  و http://www.opengl.org/discussion_boa...lag-not-waving را ببنید ایشالا رستگار میشید ;)

----------


## samadblaj

ببخشید من نتونستم کاری کنم میشه خواهش کنم اگه امکانش هست یه پرچم ساده ایران رو فقط روی یه فرم opengl برام قرار بدید یه هدیه هم برای زحمتتون فقط امروزو فرست دارم مرسی

----------


## amin1softco

اینم پرچم ایران فقط زود برش دار تا پویا نیومده ;) پروژه ویزوال 2013 کردم مشکلی داشتی فایل irflag.cpp را باز کن و به پروژه خودت کپی پیست کن ...

----------


## pswin.pooya

> اینم پرچم ایران فقط زود برش دار تا پویا نیومده


??!!

داشتیم؟!

----------


## amin1softco

> ??!!
> 
> داشتیم؟!


 :تشویق:  :تشویق:  شواهد گویاست ;)

----------


## mg_ho2003

*چاپ مستطیل وفونت در opengl

با سلام در ++C با کمک opengl یک مستطیل چاپ کردم و فونت را با کمک تابع glbitmap-character جدا چاپ کردم حالا میخوام این 2 تا با هم در یک صفحه چاپ شود ولی بعد از ترکیب هر 2تا کد باهم فقط یکی چاپ میشود با هم در یک صفحه قرار نمیگیرد لطفا راهنمایی فرمایید .

*

----------


## الهام سیدنژادی

سلام 
من یکمی مبتدی هستم تو opengl و استادمون ازمون خواسته که یک screensaver تو opengl طراحی کنیم. من در نظر دارم که یک عکس روی فرمم اضافه کنم بعد کارای متحرک سازی رو روی عکس انجام بدم اما هرچی گشتم نتونستم یاد بگیرم که چطور عکس رو پس زمینه قرار بدم لطفا کمکم کنید. اگه امکان داره زود چون به پایان ترم کم مونده  :لبخند:

----------


## pswin.pooya

> من یکمی مبتدی هستم تو opengl و استادمون ازمون خواسته که یک screensaver  تو opengl طراحی کنیم. من در نظر دارم که یک عکس روی فرمم اضافه کنم بعد  کارای متحرک سازی رو روی عکس انجام بدم اما هرچی گشتم نتونستم یاد بگیرم که  چطور عکس رو پس زمینه قرار بدم لطفا کمکم کنید. اگه امکان داره زود چون به  پایان ترم کم مونده


سلام
می تونید از نکسچرها (Texture) استفاده کنید.

http://www.opengl-tutorial.org/begin...textured-cube/

----------


## الهام سیدنژادی

خیلی ممنون همشهری

----------


## الهام سیدنژادی

سلام
این برنامه من هستش که یک ستاره هایی رو ایجاد میکنه با اون برنامه transparency  که یکی از دوستان اینجا لود کرده بود قاطی کردم و این شد. حالا میخوام رنگ این ستارم هر دفعه تصادفی باشه و همچنین جاشونم عوضشه و تصادفی شه لطفا کمک کنید....
البته این فقط کد ترسیم یه ستارس اگه بگید چطور رنگ و جاشو تصادفی کنم تو بقیه هم اعمال میکنم 
1.jpg

----------


## الهام سیدنژادی

مرسی که هیشکی کمک نکرد  :لبخند گشاده!: 
خودم به کمک دوستم حلش کردیم

----------


## kaarman

سلام دوستان 
من تازه می خوام با openGL آشنا بشم...چنتا سوال داشتم... کسی هست جواب بده؟

----------


## sahar1394

با سلام

دوستان یه مورد فوری برام پیش اومده.اگه راهنماییم کنید ممنون باشم.
من می خوام شفافیت در opengl ایجاد کنم.من 2 تا 6 ضلعی رسم کردم.که قسمتی از این دو شکل مشترک است.یکی رنگ آبی و زیری رنگ سبز.
من می خواهم شکل رویی شفاف باشه تا شکل زیری مشخص شود.
با جست و جو هایی که کردم فهمیدم باید از glColor4f با آلفا کار کنم.
ولی هرچه قدر اعداد آلفا را تغییر می دم.تغییری نمی کند

----------


## UfnCod3r

> با سلام
> 
> دوستان یه مورد فوری برام پیش اومده.اگه راهنماییم کنید ممنون باشم.
> من می خوام شفافیت در opengl ایجاد کنم.من 2 تا 6 ضلعی رسم کردم.که قسمتی از این دو شکل مشترک است.یکی رنگ آبی و زیری رنگ سبز.
> من می خواهم شکل رویی شفاف باشه تا شکل زیری مشخص شود.
> با جست و جو هایی که کردم فهمیدم باید از glColor4f با آلفا کار کنم.
> ولی هرچه قدر اعداد آلفا را تغییر می دم.تغییری نمی کند


کسی ک می خواد جی ال کار کنه اول باید جسجو کردنو یاد بگیره
باید اول الفا و مدل بلند کردنو مشخص کنی

----------


## Rainpc

سلام دوستان
 خواهشن اگه کسی میتونه کمک کنه بهم خیلی نیاز به این برنامه دارم

برنامه اي بنويسيد که يک مکعب توليد کند سپس خاصيتي به آن اضافه کنيد که با زدن دکمه اينتر  جلوه  باز شدن مکعب اتفاق بيوفتد

----------


## CRbreeze

سلام دوستان 
وقت همگی بخیر من یه پروژه دارم واسه درس گرافیک طراحی این شکل که میبینید و من فقط در حال حاضر رسم دایره و کلا اشکال هندسی رو بلدم...میشه کمک کنید که بدونم از کجا باید شروع کنم؟ ممنون میشم

----------


## pswin.pooya

> وقت همگی بخیر من یه پروژه دارم واسه درس گرافیک طراحی این شکل که میبینید و  من فقط در حال حاضر رسم دایره و کلا اشکال هندسی رو بلدم...میشه کمک کنید  که بدونم از کجا باید شروع کنم؟ ممنون میشم


GL_POINTS با دستور glBegin به جای GL_LINES یا ....

----------


## CRbreeze

> GL_POINTS با دستور glBegin به جای GL_LINES یا ....


متشکرم  :لبخند:

----------


## Rainpc

دوستان برنامه نویس یعنی هیچکی نیست جواب سوال منو بده یا راهنمایی کنه

اقا پولم بخواین میدم فقط کمکم کنید

این آدرس ایمیل من: rainpc@ymail.com

----------


## 3pid71

سلام به همگی


دوستان ممنون میشم به این تاپیک سر بزنید.اگر کسی ایده ای داره خوشحال میشم بشنوم (مرتبط با OpenGL)


https://barnamenevis.org/showthread.p...=1#post2317717

----------


## خاطره گلی

سلام من یه تحقیق حداقل 30 صفحه ای راجع به پیاده سازی یک صحنه متحرک با استفاده از opengl در دلفی میخواستم تو رو خدا کمکم کنید

----------


## خاطره گلی

سلام من یه تحقیق حداقل 30 صفحه ای راجع به پیاده سازی یک صحنه متحرک با استفاده از opengl در دلفی میخواستم تو رو خدا کمکم کنید 						
اگه کسی داشته باشه واقعا لطف کرده در حقم برا استاد میخوام.این ایمیلمه دوستان کمک کنید

----------


## خاطره گلی

سلام من یه تحقیق حداقل 30 صفحه ای راجع به پیاده سازی یک صحنه متحرک با  استفاده از opengl در دلفی میخواستم تو رو خدا کمکم کنید 						
اگه کسی داشته باشه واقعا لطف کرده در حقم برا استاد میخوام.این ایمیلمه دوستان کمک کنید 						اینم جیمیلم khghiyasvand@gmail.com :گریه:  :گریه:

----------


## m.arash1360

سلام دوستان-من در داخل یک دایره دو تا ماهی برخلاف هم ترسیم کردم.حالا میخام که اینها برخلاف هم حرکت کنن و به هم برخورد و از هم عبور کنند و بالعکس.حرکتش رو نمیدونم.کسی اگر بلده راهنمایی م کنه اینم ایمیل من (moarash2004@yahoo.com).ممنون.اینم کدی که من نوشتم

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <math.h>

int Height = 400, Width = 400;
#define edgeOnly 0
void DrawCircle(double radius, int numberOfSides)
{
    // if edge only, use line strips; otherwise , use polygons
    if (edgeOnly)
        glBegin(GL_LINE_STRIP);
    else
        glBegin(GL_POLYGON);
    // calculate each vertex on the circle
    for (int vertex = 0; vertex < numberOfSides; vertex++)
    {
        // calculate the angle of current vertex
        // ( vertex # * 2 * PI ) / # of sides
        float angle_c = (float)vertex * 2.0 * 3.14159 / numberOfSides;
        glColor3f(0, 0, 1); // Blue Color
                            // draw the current vertex at the correct radius
        glVertex2f(cosf(angle_c)*radius, sinf(angle_c)*radius);
    }
    // if drawing edge only, then need to complete the loop with first vertex
    if (edgeOnly)
        glVertex2f(radius, 0.0);
    glEnd();
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    DrawCircle(1.0, 1000);
    glColor3f(1, 1, 0);
    glBegin(GL_POLYGON);
    glVertex2f(0.8, 0.15);
    glVertex2f(0.85, 0.2);
    glVertex2f(0.95, 0.15);
    glVertex2f(0.85, 0.10);
    glEnd();
    glBegin(GL_TRIANGLES);
    glColor3f(0.8, 0.5, 0.0);
    glVertex2f(0.93, 0.15);
    glVertex2f(0.98, 0.19);
    glVertex2f(0.98, 0.11);
    glEnd();
    glBegin(GL_TRIANGLES);
    glColor3f(0.8, 0.5, 0.0);
    glVertex2f(0.855, 0.2);
    glVertex2f(0.925, 0.25);
    glVertex2f(0.87, 0.15);
    glEnd();
    glBegin(GL_TRIANGLES);
    glColor3f(0.8, 0.5, 0.0);
    glVertex2f(0.857, 0.1);
    glVertex2f(0.925, 0.05);
    glVertex2f(0.87, 0.15);
    glEnd();

    glColor3f(0.0, 0.0, 0.0);
    glPointSize(4.0);
    glBegin(GL_POINTS);
    glVertex2f(0.83, 0.165);
    glEnd();
    ///
    glColor3f(0.0, 1.0, 0.0);// fish left
    glBegin(GL_POLYGON);
    glVertex2f(-0.8, 0.15);
    glVertex2f(-0.85, 0.2);
    glVertex2f(-0.95, 0.15);
    glVertex2f(-0.85, 0.10);
    glEnd();
    glBegin(GL_TRIANGLES);
    glVertex2f(-0.93, 0.15);
    glVertex2f(-0.98, 0.19);
    glVertex2f(-0.98, 0.11);
    glEnd();


    glBegin(GL_TRIANGLES);
    glColor3f(0.8, 0.5, 0.0);
    glVertex2f(-0.855, 0.2);
    glVertex2f(-0.925, 0.25);
    glVertex2f(-0.87, 0.15);
    glEnd();

    glBegin(GL_TRIANGLES);
    glColor3f(0.8, 0.5, 0.0);
    glVertex2f(-0.857, 0.1);
    glVertex2f(-0.925, 0.05);
    glVertex2f(-0.87, 0.15);
    glEnd();

    glColor3f(0.0, 0.0, 0.0);
    glPointSize(4.0);
    glBegin(GL_POINTS);
    glVertex2f(-0.83, 0.165);
    glEnd();

    glutSwapBuffers();
}
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutInitWindowSize(Width, Height);
    glutCreateWindow("Fish");
    glutDisplayFunc(display);
    glutMainLoop();
}

----------

