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

كيف ارسم كائنين في نفس السكربت؟؟!

بدأه مدمن ++C في 13 أكتوبر 2009 · 5 رد · 870 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السلام عليكــم ورحمـة الله وبركاتــه ،،

كيف حالك إن شاء الله دائمــاً بخير ؟

أنا حاولت أرسم كائنين في نفس السكربت... لكن الكائن الاول اقدر احركة بالاسهم والكائن الثاني ثابت لا يتحرك

حاولت عدة مرات وتجارب قد شعر الراس لكن كلها أخفقت

ساعدوني رجاءً

وهذا هو الكود نفسه

# pragma comment (lib, "opengl32.lib")

# pragma comment (lib, "glu32.lib") //المكتبات

# pragma comment (lib, "glaux.lib")

#include <windows.h>

#include <stdio.h>

#include <gl\gl.h> //استدعاء المكتبات

#include <gl\glu.h>

#include <gl\glut.h>

#include "in.h"

void moraba3(float x1, float y1, float x2, float y2)//النقاط

{

glBegin(GL_QUADS);

glVertex2f(x1,y1);

glVertex2f(x2,y1); //تحديد النقاط

glVertex2f(x2,y2);

glVertex2f(x1,y2);

glEnd();

}

int DrawGLScene(GLvoid)

{

static float x,y,z = 0.0f;

if (keys[VK_LEFT])

{

x -= 0.1f;

}

if (keys[VK_RIGHT])

{

x += 0.1f;

}

if (keys[VK_UP])

{

y += 0.1f;

}

if (keys[VK_DOWN])

{

y -= 0.1f;

}

if (keys[VK_CONTROL])

{

z -= 0.1f;

}

if (keys[VK_SHIFT])

{

z += 0.1f;

}

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(x,y,z);

glColor3f(0.1f,2.0f,1.1f); //لون المربع

moraba3(-0.1f,-0.1f,0.1f,0.1f); //رسم المربع

return TRUE;

}

void moraba3a(float x1, float y1, float x2, float y2)//النقاط

{

glBegin(GL_QUADS);

glVertex2f(x1,y1);

glVertex2f(x2,y1); //تحديد النقاط

glVertex2f(x2,y2);

glVertex2f(x1,y2);

glEnd();

}

int DrawGLScene2(GLvoid)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(0.1f,0.1f,1.1f);

glColor3f(0.1f,2.0f,1.1f); //لون المربع

moraba3a(-0.1f,-0.1f,0.1f,0.1f); //رسم المربع

return TRUE;

}

//الدالة الرئيسية

int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

char NAME_WINDOW[]="Ali Alyas";

int X_WINDOW=640,Y_WINDOW=480,T=16;

MSG msg;

BOOL done=FALSE;

//if(MessageBox(NULL,"FULL?","SBR",MB_YESNO|MB_ICONQUESTION)==IDNO)

// {

fullscreen=FALSE;

// }

if (!CreateGLWindow(NAME_WINDOW,X_WINDOW,Y_WINDOW,T,fullscreen))

{

return 0;

}

while(!done)

{

if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

{

if (msg.message==WM_QUIT)

{

done=TRUE;

}

else

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

else

{

if ((active && !DrawGLScene()) || keys[VK_ESCAPE])

{

done=TRUE;

}

else

{

SwapBuffers(hDC);

}

if (keys[VK_F1])

{

keys[VK_F1]=FALSE;

KillGLWindow();

fullscreen=!fullscreen;

if (!CreateGLWindow(NAME_WINDOW,X_WINDOW,Y_WINDOW,T,fullscreen))

{

return 0;

}

}

}

}

KillGLWindow();

return (msg.wParam);

}

تم تعديل هذه المشاركة بواسطة مدمن ++C في 13 أكتوبر 2009 في 08:48

#2

لو تحاول تكتب الكود بأستخدام ال CODE من اجل ان نستطيع قرائته

#3

اوكي بحاول...

# pragma comment (lib, "opengl32.lib")   
# pragma comment (lib, "glu32.lib")	  //المكتبات
# pragma comment (lib, "glaux.lib")

#include <windows.h> 
#include <stdio.h>
#include <gl\gl.h>   //استدعاء المكتبات
#include <gl\glu.h>	
#include <gl\glut.h>
#include "in.h"


void moraba3(float x1, float y1, float x2, float y2)//النقاط
{
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);		 //تحديد النقاط
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}

int DrawGLScene(GLvoid)
{
	static float x,y,z = 0.0f;
	if (keys[VK_LEFT])
	{
	  x -= 0.1f;
	}
	if (keys[VK_RIGHT])
	{
		x += 0.1f;
	}
	if (keys[VK_UP])
	{
		y += 0.1f;
	}
	if (keys[VK_DOWN])
	{
		y -= 0.1f;
	}
	if (keys[VK_CONTROL])
	{
		z -= 0.1f;
	}
	if (keys[VK_SHIFT])
	{
		z += 0.1f;
	}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(x,y,z);
glColor3f(0.1f,2.0f,1.1f);			//لون المربع
moraba3(-0.1f,-0.1f,0.1f,0.1f); //رسم المربع
return TRUE;
}

void moraba3a(float x1, float y1, float x2, float y2)//النقاط
{
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);		 //تحديد النقاط
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
}

int DrawGLScene2(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-2.0f);
glColor3f(0.1f,2.0f,1.1f);			//لون المربع
moraba3a(-0.1f,-0.1f,0.1f,0.1f); //رسم المربع
return TRUE;
}
									   //الدالة الرئيسية
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
char NAME_WINDOW[]="Ali Alyas";
int X_WINDOW=640,Y_WINDOW=480,T=16;
MSG  msg;
BOOL done=FALSE;
//if(MessageBox(NULL,"FULL?","SBR",MB_YESNO|MB_ICONQUESTION)==IDNO)
// {
  fullscreen=FALSE;
// }
if (!CreateGLWindow(NAME_WINDOW,X_WINDOW,Y_WINDOW,T,fullscreen))
{
  return 0;
}
while(!done)
{
  if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
   if (msg.message==WM_QUIT)
   {
	done=TRUE;
   }
   else
   {
	TranslateMessage(&msg);
	DispatchMessage(&msg);
   }
  }
  else		
  {
  if ((active && !DrawGLScene()) || keys[VK_ESCAPE]) 
   {
	done=TRUE;
   }
   else 
   {
	SwapBuffers(hDC);
   }
   if (keys[VK_F1])
   {
	keys[VK_F1]=FALSE; 
	KillGLWindow(); 
	fullscreen=!fullscreen;  
if (!CreateGLWindow(NAME_WINDOW,X_WINDOW,Y_WINDOW,T,fullscreen))
	{
	 return 0;
	}
   }
  }
}
KillGLWindow();
return (msg.wParam);
}
#4

جرب احذف gltranslate من الدالة التي ترسم المربع الثاني . ماني متأكد بس اقتراح

#5

لازم اخلي الدالة gltranslate لأنها الدالة الي احدد فيها عمق الكائن...

:(

على العموم انا جربت وفشلت...

#6

خلاص انسوا السالفة

كرهت الOpenGl ولا أبي أرد له><

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