الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول Vertex Buufer Object

بدأه aziz nor في 29 يونيو 2009 · 7 رد · 1,186 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي بعض الاستفسارات

وكما هو ظاهر من العنوان الاستفسار الاول هو عن

vertex buffer object

والاسئلة هي كتالي

- كيف نستطيع رسم الاشكال بواسطة هذه الطريقة.

- قرات بعض المراجع لكن لم استوعب الطريقة جيدا ومن ظمن ما قراته انها متعلقة بكارت الشاشة والخصائص التي يدعما

يعني اذا يدعم هذه الخاصية تكون موجودة او اذا كان العكس فالعكس.

فهل هذا صحيح

ملاحظة هذه الطريقة هي التي ستكون معتمدة في

opengl 3.0

لرسم الاشكال

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#2

عليكم السلام ,

سؤال جميل , من زمان لم نرى أسئلة تدفعنا للأمام .

- نعم هذه طريقة جديدة ( ليست خاصة في OpenGL 3 ) , أتوقع أنها ظهرت في OpenGL 2.0 , طبعاً هنا أتكلّم عن اعتمادها رسمياً , أظن أنها خرجت كامتداد Extension قبل OpenGL 2.0 بفترة طويلة .

- طريقة عمل Vertex Buffer لا أظنها مهمّة كثيرة ( أقصد عملها الداخلي , ولماذا ينصحون بها ) .

- قبل أن تبدا في القراءة عن VBO ( اختصار Vertex Buffer Object ) , يجب أن تعرف ترسم بطريقة Vertex Arrays و Display List ( ستجد دروس في الفهرس المثبّت ) , طبعا لايجب أن تعرف كل شيء , بمعنى لايجب معرفة كل الدوال والثوابت وكيف تعمل ) .

- لم اشرح VBO حتى الان , أعرف ذلك ... حيث لم يحصل شرف التجربة بعد :D , الموضوع سهل ان شاء الله , لكن لا أحتاج الان الى VBO , لاني في الغالب أطوّر تطبيات ثنائية البعد , و تطبيقات ثلاثية البعد بسيطة , لا أحتاج فيها إلى VBO .

هذا مقال جميل :

http://www.songho.ca/opengl/gl_vbo.html

لكن أظن أنه قديم نوعاً ما .. أرى ARB موجودة !! ..

اضافة :

هذا رابط أفضل :

http://www.gamedev.net/reference/programming/features/fbo1/

يمكنك أخي أن تحاول وتجرب , لعلّنا نتحمّس معك :D .

تم تعديل هذه المشاركة بواسطة الشمري في 29 يونيو 2009 في 17:43

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

شكرا اخي الشمري علي الرد

بنسبة لل

vertex arrys

تباعتها من خلال مقال لك وهي سهلة وبسيطة

طبعا هذا راجع للشرح البسيط والمفيد

بصراخة انا توجهي لل

vbo

هو تماشيا مع تطورات الحديثة للمكتبة

وهي تقول انها ستعتمد هذه الطريقة للرسم

لذا اردت الاطلاع عليها

وانت جاوبت بطريقة مباشرة علي سؤال نسيت ان اطرحه وهو علي دعم

opengl 2.0

لل

vbo

ساوحاول مع الموضوع واي جديد ساطرحه هنا ان شاء الله

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#4

لايمكن استخدام VBO عموماً الا مع Vertex Array ( اللي فهتمته أن VBO تغيّر فقط طريقة تخزين وتحديث الرؤوس Vertexes اما طريقة الرسم والربط بين هذه الرؤوس فلم يتغيّر شيء , تستخدم Vertex Array ) .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

بما انك فتحت موضوع

vertex arry

عندي استفسار عن طريقة الرسم الجديدة في

opengl 3.0

نعلم انه في طريقة ال

vertex arry

كما في دروسك نستعمل الدالة

glEnableClientState

الت تفعل نوع المصفوفة

لكن المشكل ان الدالة هذه حذفت من قائمة الدوال المدعومة والمحدثة

يعني كيف سنستخدم

vbo

وهي تعتمد علي

vertex arry

كما ذكرت

ارجوا الرد علي هذا السؤال

هذا موقع يضم بعض من الوال التي تم الاستغناء عنها

الموقع هنا

اللهم صلي علي المصطفي محمد

صلي الله عليه وسلم

#6

انا مثلك واقف في مسألة ال vbo

مقتطفات من كتاب begining openGL طبعة 2009

تقوم تقنية vbo على تخزين البيانات في graphic card's memory المعروفة ب vram حيث ان عملية التصيير تصبح أسرع ..

وكما ذكر الأخ الشمري يجب ان تستخدمها على أنها vertex array.

لكن للأسف يبدوا ان هذه الخدمة تعتمد على المكتبة التي تبرمج عليها ال openGL بمعنى آخر ليست openGL من قامت ببرمجة دوالها انظر هذا المثال من كتاب  begining openGL الطبعة الاخيرة

#ifdef _WIN32
#include <windows.h>
#else
#include <GL/glx.h>
#include "glx/glxext.h"
#endif

#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include "glext.h"
#include "example.h"

PFNGLGENBUFFERSARBPROC glGenBuffers = NULL;
PFNGLBINDBUFFERPROC glBindBuffer = NULL;
PFNGLBUFFERDATAPROC glBufferData = NULL;

Example::Example()
{
}

bool Example::init()
{
#ifdef _WIN32
	glGenBuffers = (PFNGLGENBUFFERSARBPROC)wglGetProcAddress("glGenBuffers");
	glBindBuffer = (PFNGLBINDBUFFERPROC)wglGetProcAddress("glBindBuffer");
	glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferData");
#else
	glGenBuffers = (PFNGLGENBUFFERSARBPROC)glXGetProcAddress((const GLubyte*)"glGenBuffers");
	glBindBuffer = (PFNGLBINDBUFFERPROC)glXGetProcAddress((const GLubyte*)"glBindBuffer");
	glBufferData = (PFNGLBUFFERDATAPROC)glXGetProcAddress((const GLubyte*)"glBufferData");
#endif
	if (!glGenBuffers || !glBindBuffer || !glBufferData)
	{
		std::cerr << "VBOs are not supported by your graphics card" << std::endl;
		return false;
	}

	glEnable(GL_DEPTH_TEST);
	glClearColor(0.5f, 0.5f, 0.5f, 0.5f);

	for (float point = -4.0f; point < 5.0; point+=0.5f)
	{
		m_vertices.push_back(point); //X
		m_vertices.push_back(0.0f);  //Y
		m_vertices.push_back(0.0f);  //Z
	}

	glGenBuffers(1, &m_vertexBuffer); //Generate a buffer for the vertices
	glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer); //Bind the vertex buffer
	glBufferData(GL_ARRAY_BUFFER, sizeof(float) * m_vertices.size(),
				 &m_vertices[0], GL_STATIC_DRAW); //Send the data to OpenGL

	//Return success
	return true;
}

void Example::prepare(float dt)
{

}

void Example::render()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	gluLookAt(0.0, 6.0, 0.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

	glEnableClientState(GL_VERTEX_ARRAY);
	glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
	glVertexPointer(3, GL_FLOAT, 0, 0);

	float pointSize = 0.5f;
	for (unsigned int i = 0; i < m_vertices.size() / 3; ++i)
	{
		glPointSize(pointSize);
		glDrawArrays(GL_POINTS, i, 1); //Draw the point at i
		pointSize += 1.0f;
	}
	glDisableClientState(GL_VERTEX_ARRAY);
}

void Example::shutdown()
{

}

void Example::onResize(int width, int height)
{
	glViewport(0, 0, width, height);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	gluPerspective(52.0f, float(width) / float(height), 1.0f, 100.0f);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

تم تعديل هذه المشاركة بواسطة مصفوفة في 6 أغسطس 2009 في 08:25

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#7
اقتباس
بما انك فتحت موضوع

vertex arry

عندي استفسار عن طريقة الرسم الجديدة في

opengl 3.0

نعلم انه في طريقة ال

vertex arry

كما في دروسك نستعمل الدالة

glEnableClientState

الت تفعل نوع المصفوفة

لكن المشكل ان الدالة هذه حذفت من قائمة الدوال المدعومة والمحدثة

يعني كيف سنستخدم

vbo

وهي تعتمد علي

vertex arry

كما ذكرت

ارجوا الرد علي هذا السؤال

المعذرة..لم انتبه لسؤالك

لا اعرف ...

لكن بقراءة الكتب الحديثة يمكن معرفة ذلك

من الكود الذي وضعه الاخ 'محمد ( or مصفوفة :) )' ... يبدو انه لاتوجد مشكلة

اقتباس
لكن للأسف يبدوا ان هذه الخدمة تعتمد على المكتبة التي تبرمج عليها ال openGL بمعنى آخر ليست openGL من قامت ببرمجة دوالها انظر هذا المثال من كتاب begining openGL الطبعة الاخيرة

لم افهم قصدك اخوي

OpenGL مجرد مواصفات .. الاعتماد كله على كرت شاشتك.

لذلك انت تستورد الدوال من ملف ما .. من الملفات التي جاءت مع تحديث برمجيات كرت الشاشة .

هناك مكتبات اخرى مثل GLee تقوم بهذه لمهمة المملة.

خطوة إلى الأمام .. بعيداً عن Opengl 1.1 .

احاول ان انهي العمل في الموضوع سريعا ان شاء الله

يبدو الكتاب جميل ... هل تنصح به :)

تم تعديل هذه المشاركة بواسطة الشمري في 7 أغسطس 2009 في 00:29

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

انتظر شرحك يا أستاذي

بالنسبة للكتاب هو عبارة عن 300 صفحة ويعطي مختصرات أنا انتظر ان يصلني الكتاب الأحمر 2009 أعتقد انه هو الكتاب الأفضل ولا بأس بتعدد المراجع .

وشكرا لك ...

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

مواضيع مشابهة