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

تغيير الألوان وقت التنفيذ .. أرجو المساعدة :(

مغلق
بدأه عصفورة في 29 مارس 2007 · 2 رد · 1,180 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

أخواني/ أخواتي أريد منكم مساعدتي عاجلا .. وسأكون لكم شاكرة ومقدرة

لدي سؤال في openGl :

في البرنامج المطلوب مني رسم مثلث ومضلع ، وفيه قائمة يحدد منها المستخدم التالي :

تغيير لون المثلث ، أو تغيير لون المضلع ..

وهنا المشكلة ، لم أستطع تغيير اللون وقت التنفيذ :(

أرجو منكم يامن لديكم خبرة في openGl أن لا تبخلوا على أختكم ..

وجزيتم خيرا مقدما ..

(( ملاحظة .. ساعدوني أرجوكم ، البرنامج لم يتبقى على تسليمه إلا ساعات :(

#2

هل تستخدمون المكتبة glut ..

اذا كان الامر كذلك .. فالجواب :

بعد أن تغير القيم اللي يدخلها المستخدم .. تستدعي glutPostRedisplay لتقوم بتحديث النافذة .. ( اذا لم تكن تستخدم glutIdleFunc )

هذا مثال يوضح الفكرة ( أصله من موقع أجنبي لا اذكر اسمه الان ( على ما اظن light3d او شيء زي كذا )

فقط قمت بتعديله لاستخدام glutPostRedisplay ..

انقر على الزر الايمن .. وتظهر قائمة بالالوان .. وتغيرها وقت التنفيذ .

لا تقم بالنسخ واللصق .. قم باخذ ما يناسبك منه .. لانه يتسخدم القوائم .. وهذا اللي يطول الكود .

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


#define RED 11
#define GREEN 12
#define BLUE 13
#define WHITE 14
#define CHANGE_TO_1 15
#define CHANGE_TO_2 16


float angle = 0.0;
float red=1.0, blue=1.0, green=1.0;
int menu1,menu2,menu,flag;

void changeSize(int w, int h) {

	// Prevent a divide by zero, when window is too short
	// (you cant make a window of zero width).
	if(h == 0)
		h = 1;

	float ratio = 1.0* w / h;

	// Reset the coordinate system before modifying
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	// Set the viewport to be the entire window
	glViewport(0, 0, w, h);

	// Set the correct perspective.
	gluPerspective(45,ratio,1,1000);
	gluLookAt(0.0,0.0,5.0, 
			  0.0,0.0,-1.0,
			  0.0f,1.0f,0.0f);
	glMatrixMode(GL_MODELVIEW);


}


void renderScene(void) {
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glRotatef(angle,0.0,1.0,0.0);

	glColor3f(red,green,blue);

	glBegin(GL_TRIANGLES);
		glVertex3f(-0.5,-0.5,0.0);
		glVertex3f(0.5,0.0,0.0);
		glVertex3f(0.0,0.5,0.0);
	glEnd();
	angle++;
	glutSwapBuffers();
}



void processMenuEvents(int option) {

	red = 0.0;
	green = 0.0;
	blue = 0.0;
	switch (option) {
		case RED : red = 1.0;
			glutPostRedisplay();
		 break;
		case GREEN : green = 1.0;
			glutPostRedisplay();
			break;
		case BLUE : blue = 1.0;	
			glutPostRedisplay();
			 break;
		case WHITE : red = 1.0; 
				green = 1.0; 
				blue = 1.0; 	
				glutPostRedisplay();
			break;

	}
}

void processSpecialKeys(int c, int x, int y) {

	if (!flag) {
		if (c == GLUT_KEY_F1) {
			int x = glutGetMenu();
			if (x == menu1)
				glutSetMenu(menu2);
			else
				glutSetMenu(menu1);
			glutAttachMenu(GLUT_RIGHT_BUTTON);
		}
	}
}

void createGLUTMenus() {

	menu2 = glutCreateMenu(processMenuEvents);
	glutAddMenuEntry("Blue",BLUE);
	glutAddMenuEntry("Green",GREEN);
	glutAddMenuEntry("Red",RED);

	menu1 = glutCreateMenu(processMenuEvents);
	glutAddMenuEntry("Red",RED);
	glutAddMenuEntry("Green",GREEN);
	glutAddMenuEntry("Blue",BLUE);
	glutAttachMenu(GLUT_RIGHT_BUTTON);
}

void processMenuStatus(int status, int x, int y) {

	if (status == GLUT_MENU_IN_USE)
		flag = 1;
	else
		flag = 0;
}

void main(int argc, char **argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(320,320);
	glutCreateWindow("arabteam2000-forum.com");
	glutDisplayFunc(renderScene);
	//glutIdleFunc(renderScene);
	glutReshapeFunc(changeSize);


	createGLUTMenus();

	glutMenuStatusFunc(processMenuStatus);

	glutSpecialFunc(processSpecialKeys);

	glutMainLoop();
}

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

أخي الشمري ..

عااااااااااااجزة عن شكرك .. بارك الله في علمك ونفع بك وجزاك المولى كل خير

وفرج همك ويسر كربك ونفس عنك ..

وكثر من أمثالك ..

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

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