opengl در مجیدآنلاین

saalek110

Well-Known Member
در این تاپیک قصد دارم هر چیزی مربوط به opengl است را بنویسم.
مانند نصب در کامپایلرهای مختلف یا تکنیک های opengl.
همچنین در محیط های دیگر مثل اندرویید یا در بروسر مثل webgl
کلا هرکجا opengl به کار رفته باشد در این تاپیک آورده می شود.
به همین خاطر فهرستی اول تاپیک اضافه می شود تا پیدا کردن مطالب آسان تر شود.

زبان تاپیک:
زبان تاپیک سی است.
C و در مورد برنامه اندرویدی جاوا Java است.
با زبان های سی شارپ #C و وی بی دات نت VB.net و سی CLR C کار نشده.
ولی بحث های مفهومی opengl قابل استفاده است.
 
آخرین ویرایش:

saalek110

Well-Known Member
همچنین از سایت های فارسی نقل هایی انجام خواهد شد.
این نقل ها گاهی امکان تست ندارند ولی خوب است در دسترس باشد تا به افراد کمک کند.
 

saalek110

Well-Known Member
همچنین فایلهایی برای دانلود قرار داده خواهد شد تا به افراد کمک کند تا سریع تر برنامه های خود را اجرا کنند.
 

saalek110

Well-Known Member
چند پست اول تاپیک با نوشتن این پست ها رزرو می کنم چون ممکن است بعدا نیاز شود. مثلا شاید نیاز شود چند لیست ایجاد شود چون مطالب تاپیک بسیار متنوع خواهد یود.
 

saalek110

Well-Known Member
راهنمایی: خیلی کدهای opengl در هر محیطی یکسان است پس توجهی نکنید در کدام محیط بحث می شود.

پس ما یک بحث خود opengl را داریم
و یک بحث نرم افزارهای مختلف.

البته opengl محیط اندروید ممکن است تفاوت عمده داشته باشد.
این محیط ها جدا بحث می شود.
 

saalek110

Well-Known Member
بعضی پستها با هم مرتبط هستند . این پستها به شکل گروهی لیست می شوند.
مثلا یک لیست آموزش کلی opengl داریم که در هر محیطی یکسان است.
اینها بحث های کلی جدا از محیط است. یک لیست کلی opengl خواهیم داشت.
لیست کلی بحث های opengl:
......
......
 

saalek110

Well-Known Member
لیست کل تاپیک:
معرفی بسته ها و کامپایلرهای مختلف
دانلود Dev c
دانلود کد بلوک
دانلود glut
دانلود freeglut
نصب glut بر Dev c
نصب freeglut بر code::blocks
برنامه opengl اندروید کار شده در در اکلیپس

سورس opengl

صفحه دوم پستهای 21 تا 40
opengl
صفحه دوم پستهای 41 تا 60
webgl
 
آخرین ویرایش:

saalek110

Well-Known Member
بنام خدا.
در محیط ویندوز بسته های مختلفی از opengl معرفی شده اند مثل glut یا freeglut و بسته های دیگر.
کامپایلرهای مختلفی هم برای کار موجود است.

معروف ترین محیط ویژوال سی است.
بعدی کدبلوک code::blocks
و بعدی Dev c
-------------
پس دقت کنید کدام بسته را داریم روی کدام کامپایلر نصب می کنیم.
 

saalek110

Well-Known Member
دانلود Dev c

به لینک زیر بروید و طبق راهنمایی این سایت Dev c را دانلود کنید:
How to install Dev-C++ and GLUT


در پست سوم تاپیک
نکات توابع سی و بعضی مهارتها

لینک دانلود این کامپایلر گذاشته شده.
به تالار سی مراجعه کنید. ولی بهتر است از سایت اصلی دانلود کنید. چون ممکن است کامپیوتر من ویروسی باشد.

توجه کنید ممکن است بسته opengl یی که ما کار می کنیم با ورژن های دیگر Dev c کار نکند. همچنین پروژه سی ساخته شده نه سی پلاس.
البته خودتان می توانید با ورژن های دیگر و ساختن پروژه سی پلاس امتحان کنید ولی در اینجا با این ورژن و پروژه سی کار شده.
 
آخرین ویرایش:

saalek110

Well-Known Member
دانلود کد بلوک:
s3.jpg

Download binary
w1.jpg
codeblocks-17.12mingw-setup.exe را دانلود کنید. دو تا لینک دانلود هست. اولی مشکل ندارد. دومی بحث تحریم و ... دارد.
 

saalek110

Well-Known Member
دانلود glut :
از این لینک دانلود کنید:
http://chortle.ccsu.edu/Bloodshed/glutming.zip
در این تاپیک آموزش نصب این بسته بر Dev c گفته می شود.


من بسته را ضمیمه می کنم ولی شما از سایت اصلی دانلود کنید. ممکن است کامپیوتر من ویروسی باشد.
 

پیوست ها

  • glut.rar
    165.1 کیلوبایت · بازدیدها: 2
آخرین ویرایش:

saalek110

Well-Known Member

پیوست ها

  • freeglut-MinGW-3.0.0-1.mp.zip
    446 کیلوبایت · بازدیدها: 0

saalek110

Well-Known Member
نصب glut بر Dev c

c2.jpg
منبع:
How to install Dev-C++ and GLUT
در پستهای قبلی در مورد دانلود Dev c صحبت کردیم.

. نکته : طبق آموزش سایت پوشه پروژه را در درایو سی بسازید.
ممکنه اگر جای پوشه عوض شود روش تنظیم این آموزش درست درنیاید.
نرم افزار هم در درایو سی نصب می شود.ورژنهای دیگر در پروگرام فایل ایکس86 نصب می شود

c11.png

پروژه هم از نوع سی باید می بود که سایت هم همین را گفته. من وقتی نوع سی پلاس (در شروع ساخت پروژه) انتخاب کردم برنامه دچار خطا شد.
آموزش آن سایت به طور خلاصه این میشه که
اول نرم افزار را دانلود و نصب کنید
دوم بسته مخصوص را از از پست قبل یا سایت آموزش دهنده دانلود کنید و
به تریتب زیر در جاهای خود بیاندازید.
اگر فایل موجود بود هم ریپلیس کنید چون ورژنش مهم است.
-----------------------
فایل
glut.h
به پوشه اینکلود
dev
و بعد داخل پوشه
GL
-------------------
فایل
libglut32.a
به پوشه
lib
از
dev
-------------------
فایل
glut32.dll
به پوشه سیستم 32
از ویندوز
system32
C:\Windows\System32
-------------------------
بعد یک پروژه سی خالی(طبق شکل زیر)

c14.jpg

فایل سورسی اضافه کنید(از منوی پروجکت و بعد
new file
پروژه و کدها داخل آن درج
و اجرا
------------------------------------------------
طبق دستور سایت فایلهای زیر را از پوشه های نرم افزار پیدا کنید و به آپشن پروژه اضافه کنید.
در منوی پروژه می توانید آپشن پروژه را پیدا کنید و بروید به پارامترها.
libopengl32.a
libglu32.a
libglut32.a
c18.png c20.png c21.png
PHP:
#include <GL/glut.h>

const int   A = 500;  /* length of a side of the monitor window */
const float B = 500;  /* length of a side of the clipping rectangle */
const float C = 200;  /* length of a side of the square the program draws */

void myinit(void)
{
  glClearColor(0.7, 0.7, 0.7, 0.0); /* gray background */
  glMatrixMode(GL_PROJECTION);      /* In World coordinates: */
  glLoadIdentity();                 /* position the "clipping rectangle" */
  gluOrtho2D( -B/2, B/2, -B/2, B/2);/* at -B/2, its right edge at +B/2, its bottom */
  glMatrixMode(GL_MODELVIEW);       /* edge at -B/2 and its top edge at +B/2 */
}

void display( void )
{
                               
  glClear(GL_COLOR_BUFFER_BIT);     /* clear the window */
  glMatrixMode(GL_MODELVIEW);       /* The following coordinates are expressed */
  glLoadIdentity();                 /* in terms of World coordinates */

  glBegin(GL_POLYGON) ;             /* draw a filled polygon */
      glColor3f ( 1.0, 0.3, 0.2);       /* draw in light red */
      glVertex2f( -C/2, -C/2 );         /* (x,y) */
      glVertex2f(  C/2, -C/2 );         /* (x,y) */
      glVertex2f(  C/2,  C/2 );         /* (x,y) */
      glVertex2f( -C/2,  C/2 );         /* (x,y) */
  glEnd();

  glFlush();                        /* send all commands */
}
int main(int argc, char** argv)
{
  glutInit(&argc,argv);
  glutInitWindowSize( A, A );       /* A x A pixel screen window  */

  glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
  glutCreateWindow("My Rectangle"); /* window title                   */
  glutDisplayFunc(display);         /* tell OpenGL main loop what     */
  myinit();                         /* set attributes                 */

  glutMainLoop();                   /* pass control to the main loop  */
}
نتیجه اجرا:

d1.jpg

فایل
dll
را هم کنار فایل اجرایی قرار دادم تا اجرا بشه.
در پوشه سیستم 32 انداختیم ولی گویا پیدا نکرده بود. کنارش انداختم.
 
آخرین ویرایش:

saalek110

Well-Known Member
نصب freeglut بر code::blocks:
محتویات دانلود freeglut را بریزید روی پوشه
C:\Program Files (x86)\CodeBlocks\mingw
ریپلیس کنید اگر موجود بود.
freeglut.dll
را از همین پوشه های که ریختید پیدا کنید و یک کپی بریزید در
C:\Windows


بعد دو تا فایل است باید پیدا کنید و چند خطش را عوض کنید.
======================
فایل اول در مسیر
C:\Program Files (x86)\CodeBlocks\share\CodeBlocks\templates\wizard\glut
به نام
wizard.script
----------------------------------
This line "project.AddLinkLib(_T("Glut32"));" should now say "project.AddLinkLib(_T("freeglut"));"

Also, this line "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" should now say "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return false;"
--------------------------------------
فایل دوم در مسیر
C:\Program Files (x86)\CodeBlocks\share\CodeBlocks\templates
به نام
glut.cbp
---------------------------------------------------
See this line "<Add library="Glut32" />" should now say "<Add library="freeglut" />"
===============================
فایل را نمی توانید بعدش سیو کنید. اول در یک درایو دیگه سیو کنید و بعد
move
کنید سرجاش.
move and replace
----------------------------------------------------
بعد یک پروژه از نوع
Glut
بسازید و کار تمام است.

e1.jpg


اون جایی که مسیر
Glut
می خواهد
پوشه
mingw
خود نرم افزار کد بلوک را بدهید.

e2.jpg

نتیجه اجرای کد این پروژه این است:

e3.jpg

شکلهای هندسی نورپردازی شده در حال چرخش.
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه opengl اندروید در اکلیپس
منبع

کد سایت:
PHP:
/* GraphicGlDemoActivity.java
* Author: Yong Bakos
* Since: 11/26/2012
* Thanks to:
* Cube: http://intransitione.com/blog/create-a-spinning-cube-with-opengl-es-and-android/
* OpenGL Boilerplate: http://www.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/
*/
package com.humanoriented.sudoku;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class GraphicGlDemoActivity extends Activity {
public class DemoRenderer implements Renderer {
private Cube cube = new Cube();
private float rotation;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
// Depth buffer setup.
gl.glClearDepthf(1.0f);
// Enables depth testing.
gl.glEnable(GL10.GL_DEPTH_TEST);
// The type of depth testing to do.
gl.glDepthFunc(GL10.GL_LEQUAL);
// Really nice perspective calculations.
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// Sets the current view port to the new size.
gl.glViewport(0, 0, width, height);
// Select the projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
// Reset the projection matrix
gl.glLoadIdentity();
// Calculate the aspect ratio of the window
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
// Select the modelview matrix
gl.glMatrixMode(GL10.GL_MODELVIEW);
// Reset the modelview matrix
gl.glLoadIdentity();
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
gl.glRotatef(rotation, 1.0f, 1.0f, 1.0f);
cube.draw(gl);
gl.glLoadIdentity();
rotation -= 0.15f;
}
}
class Cube {
private FloatBuffer mVertexBuffer;
private FloatBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;
private float vertices[] = {
-1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f
};
private float colors[] = {
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.5f, 0.0f, 1.0f,
1.0f, 0.5f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f,
1.0f, 0.0f, 1.0f, 1.0f
};
private byte indices[] = {
0, 4, 5, 0, 5, 1,
1, 5, 6, 1, 6, 2,
2, 6, 7, 2, 7, 3,
3, 7, 4, 3, 4, 0,
4, 7, 6, 4, 6, 5,
3, 0, 1, 3, 1, 2
};
public Cube() {
ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
mVertexBuffer = byteBuf.asFloatBuffer();
mVertexBuffer.put(vertices);
mVertexBuffer.position(0);
byteBuf = ByteBuffer.allocateDirect(colors.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
mColorBuffer = byteBuf.asFloatBuffer();
mColorBuffer.put(colors);
mColorBuffer.position(0);
mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
mIndexBuffer.put(indices);
mIndexBuffer.position(0);
}
public void draw(GL10 gl) {
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE,
mIndexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
}
}
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
GLSurfaceView view = new GLSurfaceView(this);
view.setRenderer(new DemoRenderer());
setContentView(view);
}
}

تغییرات:
اول اینکه : این خطش را استفاده نکنید و کد پروژه خودتان را استفاده کنید:
PHP:
package com.humanoriented.sudoku;

دوم : بروید انتهای کد ببینید تابع onCreate را چطور تغییر داده. همان تغییرات را اعمال کنید.
سوم : دو کلاس DemoRenderer و Cube که داخل کلاس MainActivity اضافه کرده اضافه کنید.
جهارم: ایمپورت ها را هم اضافه کنید.
نتیجه اجرا: یک مکعب رنگی در حال چرخش.

a1.png
 
آخرین ویرایش:

saalek110

Well-Known Member
یکی از کامپایلرهای معروف هم ویژوال سی است که من فعلا چون نصب ندارم نمی توانم روش کار در آن را پست بزنم ولی از معروف ترین هاست و با سرچ سریع پیدا می کنید.

c1.jpg
 

جدیدترین ارسال ها

بالا