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

NORMAL ماهو وكيف احسبه ..

مغلق
بدأه Abdullah.Alshammeri في 21 أكتوبر 2005 · 7 رد · 2,166 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

عندنا في GL الدالة glNormal ..

س - مامعنى normal .. كل ما اعرفه انه متجه .

انا درست المتجهات وفاهمها .. وعارفها كلها .. وقوانينها .

لكن المشكلة دراستنا بالمصطلحات والرموز العربية .. فلما تحولت للدروس الاجنبية وجدت مصطلحات اجنبية ما اعرفها .

يعني ماهو المصطلح الذي يقابل normal بالعربي.

وكيف احسب احداثيات normal لاي جسم .. مثلث مربع دائرة تضاريس معقدة التركيب ... الخ

وهل glNormal خاصة بالاضاءة فقط .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

الـ normal لأي سطح هو متجه متعامد على هذا السطح, يخرج منه.

#3

الاخ الكريم

ايجاد المتجه العمودى بصفة عامة يحدد المستوى التى تقع فيه نقطة او مجموعة نقاط

فكما تعرف المبدأ الاساسى للرسم بالحاسب. ان كل شئ يتم وصفه بنقاط. و بالتالى يعتبر الخط المستقيم و المستوى هما الوحدتين الاساسيتين لوصف اى شكل سواء فى بعدين او ثلاثة

لذلك يعتبر المتجه العمودى هو الاساس لتحديد الظاهر و الخفى. كذلك للقيام بالاسقاط الهندسى بشكل مناسب و اخيراً التعامل مع الأضاءة.

عموماً اذا كنت بصدد رسم كائن معروف مثل مكعب فالمتجهات عمودية على الاسطح السته .

يمكن تعميم ذلك لاشكال محدده مثل الاسطوانه او ما إلى ذلك

الى هنا و هذا كلام بسيط

اذا كان الشكل غير منتظم هندسياً او غير تقليدى تستطيع تقسيم السطح الى مجموعة مثلثات كل منها بطبيعة الحال ثلاث نقاط

يمكن ايجاد العمودى باستخدام الضرب الاتجاهى cross product

بالمثل للمجسمات فى الفراغ يتم التقسيم الى اهرام ثلاثية tetrahedron و منها تتعامل مع 4 مثلثات بالطريقة السابقة. تبقى مشكلة صغيرة هى هل اتجاه المتجه للداخل ام للخارج. و المطلوب عاده هو المتجه الخارج. طبعاً ممكن تحديد ذلك من العلاقة بين نقطة متوسط الهرم(الوسط الحسابى للأربع نقاط) و نقطة المتوسط للمثلث

ارجو ان تكون هذه الاجابة مفيدة لك

اذا اردت حدد اللغة التى تستخدمها وممكن اقدم لك الكود

بالتوفيق للجميع

#4

جزاكم الله خير .

اقتباس
يمكن ايجاد العمودى باستخدام الضرب الاتجاهى cross product
نضرب ماذا في ماذا . . .

هذه النقطة اللي اريدها ..

اللغة اللي استخدمها السي ,

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

ارفقت هنا برنامج صغير مع رسم توضيحى

الحقيقة حكاية الضرب الاتجاهى ممكن تجدها فى اى كتاب بيتعرض للمتجهات

النقطة الاساسية هنا هى تحديد المتجه داخل او خارج من السطح.

اتمنى ان يكون ردالسؤال واضح

#include<stdio.h>
#include<math.h>

#include<fstream.h>
#include<stdlib.h>
#include<cstring>

struct Vertex{
	double x;
	double y;
	double z;
};

Vertex CrossProduct( Vertex a, Vertex b);
Vertex Minus(Vertex a, Vertex b);
Vertex Plus(Vertex a, Vertex b);
Vertex Vector(Vertex a/*from*/, Vertex b/*to*/);
int Normalize(Vertex *a);
Vertex MidPoint(Vertex a, Vertex b, Vertex c);
double Abs(Vertex a);
void Reverse(Vertex *a);


void main()
{
	Vertex Org, a,b,c;	// Three points
	Vertex nor, avg;  // Normal vector
	a.x =  1.0; a.y =  0.0;  a.z  =  0.0;
	b.x =  0.0; b.y =  1.0;  b.z  =  0.0;
	c.x =  0.0; c.y =  0.0;  c.z  =  1.0;
	Org.x= 0.0;Org.y=  0.0; Org.z =  0.0;

	nor = CrossProduct(Vector(b,a), Vector(b,c));
	//required to be away from origin
	Normalize(&nor);  
	avg = MidPoint(a,b,c);

	if(Abs(Vector(Org, Plus(avg, nor)))<Abs(Vector(Org, Minus(avg, nor)))){
  Reverse(&nor);
	}
	// Now nor is ready to be used in glNormal()

}

Vertex CrossProduct( Vertex a, Vertex b)
{	
	// The cross product is 
	//
	//       | i  j   k |	unit vector 
	// res=  |a.x	a.y  a.z|
	//   |b.x	b.y  b.z|

	Vertex res; 	 // The resultant normal vector
	res.x = a.y * b.z - a.z * b.y;
	res.y = a.z * b.x - a.x * b.z;
	res.z = a.x * b.y - a.y * b.x;

	return (res);
}

Vertex Minus(Vertex a, Vertex b)
{
	Vertex res;
	res.x = a.x - b.x;
	res.y = a.y - b.y;
	res.z = a.z - b.z;
	return (res);
}

Vertex Plus(Vertex a, Vertex b)
{
	Vertex res;
	res.x = b.x + a.x;
	res.y = b.y + a.y;
	res.z = b.z + a.z;
	return (res);
}

Vertex Vector(Vertex a/*from*/, Vertex b/*to*/)
{
	return (Minus(b,a));
}

double Abs(Vertex a)
{
	return(sqrt(a.x*a.x+a.y*a.y+a.z*a.z));
}

int Normalize(Vertex *a)
{
	double m;
	m = Abs(*a);
	if(m < 1E-10){    // too small
  return (0);	
	}
	a->x /=m;
	a->y /=m;
	a->z /=m;
	return(1);

}

Vertex MidPoint(Vertex a, Vertex b, Vertex c)
{
	Vertex res;
	res.x = (a.x + b.x + c.x)/3.0;
	res.y = (a.y + b.y + c.y)/3.0;
	res.z = (a.z + b.z + c.z)/3.0;
	return(res);
}

void Reverse(Vertex *a)
{
	a->x *=-1;
	a->y *=-1;
	a->z *=-1;
}

post-60380-1129995836_thumb.gif

#6

نضرب ماذا في ماذا .

لتكون مضلع ( مثلث ) يعني مستوي تقوم بضرب متجهين إتجاهين لتكوين مستوي A×B=C المتجه الناتج عمودي علي المتجهين و هو المتجه العمودي Normal Vector .

من خلال هذه الفكرة تستطيع تكوين متجهات الكاميرا و تستطيع تحديد الاضاءة ( الشدة ..إلخ من الصفات ) عن طريق المتجه العمودي لكل نقطة ، قد تسأل لماذا لكل نقطة يوجد لها متجه عمودي ؟ الفكرة رياضية فهذه النقطة سابحة في الفراغ ; فلتثبتها و تجعلها لا تتحرك تقوم بإنشاء عمود Normal عليها ، و تستطيع تحديد المجسم الذي يريد أن يواجه الكاميرا ( الذي سيظهر) نوع من التحسين Optimiz/sation لسرعة المحرك ، الذي يحتوي علي عمود خارج من كل نقطة علي كل مثلث إن كانت العوامد تواجه عمود الكاميرا ( باستخدام الضرب القياسي ) نستطيع كشف ذلك ، فارسم هذا الوجه أو المضلع لهذا الجسم ، أو المجسم نفسه ! .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#7

شمري, اسمع مني, لازم تدرس linear algebra علشان تفهم هاي الأمور .. لان التفاصيل الدقيقة في الرسم الثلاثي الابعاد تعتمد على الرياضيات بشكل كلي.

اذا ما درستها في الجامعة, على الأقل دور لك على كتاب زين و اقرة منه!

#8

جزاكم الله خير ..

احمد صالح ... PointerVC ( انت مكسب للمنتدى :) )

--

فهمت الفكرة العامة ... وفهمت الشيء الكثير ..

--

حسن / انا احاول اطبق اللي تعلمته ... اغلب القوانين اعرفها نظري لكن عملي ...... لا .

وايضا المصطلحات العربية × الاجنبية مشكلة .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

هذا الموضوع مغلق.

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