خوب میریم سراغ آموزش قسمت ششم OpenGL :
در این قسمت یاد میگیرین که دیسک رسم کنین و در ادامه نیز چگونگی چسباندن عکس به اشکال سه بعدی رو یاد میگیرین.
۱- رسم استوانه:
۲- رسم دیسک:
۳- رسم دیسک مجهول(مثلا دیسک نیم دایره)
برای رسم استوانه و دیسک و دایره ما از کلاس Quadric استفاده میکنیم.به طور کلی هر شئی که دایره در آن به کار رفته باشد وابسته به کلاس Quadric است.
۱ - رسم استوانه:
برای رسم استوانه ما ابتدا یک متغیر از نوع Variant تعریف می کنیم . سپس متغیر را برابر کلاس Quadric قرار میدهیم بعد از آن هم با توابع کتابخانه glu اشکال مورد نظر خود را رسم میکنیم.کدهای زیر رو در DrawGLScene (مکان رسم اشکال) بنویسید:
Public Xrot , Yrot , Zrot as GLfloat
Public Function DrawGLScene() as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,1,1,1
gluCylinder Q , 0.3 , 0.3 , 0.8 , 15 , 15
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
کدهایی که کمرنگ هستند تکراری هستند و فقط برای یادآوری بود که کدهای مربوط به رسم اشیا باید در این فانکشن نوشته شوند.
تحلیل کد برنامه: در خط اول ابتدا سه متغیر برای متحرک کردن شئ نوشتیم.در خط چهارم به کمک تابع glLoadIdentity شئ خود را ثابت و بدون حرکت کردیم تا حرکت را به عهده متغیر ها قرار دهیم. خط های ۸ و ۹ و ۱۰ و ۱۱ و ۱۲ را برای رسم استوانه نوشتیم. خط های ۱۳ و ۱۴ و ۱۵ هم برای متحرک کردن شئ است.
و اما شکل کلی تابع gluCylinder (تابع رسم استوانه): gluCylinder
خطوط عمودی , خطوط افقی , ارتفاع استوانه , شعاع دایره بالایی استوانه , شعاع دایره پایینی , متغیر
به همین سادگی شما یک استوانه رسم کردید.
--------------------------------------------------------------------------------
۲ - رسم دیسک : رسم دیسک نیز مانند رسم استوانه است با این تفاوت که به جای استفاده از تابع gluCylinder باید از تابع gluDisk استفاده کنیم. کدهای زیر رو در فانکشن DrawGLScene بنویسید:
Public Xrot , Yrot , Zrot as GLfloat
Public Function DrawGLScene () as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,0,0,1
gluDisk Q , 0.1 , 0.7 , 15 , 15
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
--------------------------------------------------------------------------------
۳ - رسم دیسک مجهول(مثل دیسک نیم دایره):
برای رسم دیسک مجهول به جای استفاده از تابع gluDisk باید از تابع gluPartialDisk استفاده کرد. کدهای زیر رو هم امتحان کنین.
Public Xrot , Yrot , Zrot as GLFloat
Public Function DrawGLScene() as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,0,0,1
gluPartialDisk Q , 0.1 , 0.7 , 15 , 15 , 0 , 250
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
شکل کلی تابع gluPartialDisk همانند تابع gluDisk است و فقط یک پارامتر بیشتر دارد(پارامتر آخر) و این پارامتر مشخص کننده مقدار مجهولی دیسک است.
به نظر من رسم دیسک های مجهول بسیار لذت بخش و جالبه