IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> OpenGL Позиция света, Матрицы
ammaximus
сообщение 3.11.2009 1:17
Сообщение #1


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


Я сделал текстурированный ящик который прекрасно вращается. Но стоит включить свет... Свет не то что вращается вместе с ящиком он живет своей жизнью. Я пытался локализовать повороты сохраняя матрицы, но это не помогло.
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>		
#include <gl\glaux.h>	
#include <GL\glut.h>

static HGLRC hRC;		
static HDC hDC;			

BOOL	keys[256];		

GLfloat	xrot;			//
GLfloat	yrot;			// Y
GLfloat	zrot;			// Z

GLuint	texture[1];		/
GLvoid LoadGLTextures()
{
	// 
	AUX_RGBImageRec *texture1;
	texture1 = auxDIBImageLoad("space.bmp");
		// Ñîçäàíèå òåêñòóðû
	glGenTextures(1, &texture[0]);
	glBindTexture(GL_TEXTURE_2D, texture[0]);
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
}

GLvoid InitGL(GLsizei Width, GLsizei Height){
	LoadGLTextures();			// 
	glEnable(GL_TEXTURE_2D);		// 
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	glClearDepth(1.0);
	glDepthFunc(GL_LESS);
	glEnable(GL_DEPTH_TEST);
	glShadeModel(GL_SMOOTH);

	//LIGHT//
   GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 0.0 }; 
   GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; 
   GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; 
   GLfloat light_position[] = { 1.0, 0.0, 0.0, 0.0 }; 
 
   /*  */ 
   glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient); 
   glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); 
   glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular); 
   glLightfv (GL_LIGHT0, GL_POSITION, light_position); 
 
   /*  */   
 //  glEnable (GL_LIGHTING); 
  // glEnable (GL_LIGHT0); 
	///LIGHT////

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	gluPerspective(50.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);

	glMatrixMode(GL_MODELVIEW);
}

GLvoid DrawGLScene(GLvoid){
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glPushMatrix();///// <------
	glTranslatef(0.0f,0.0f,-5.0f);
	glRotatef(xrot,1.0f,0.0f,0.0f);		//  X
	glRotatef(yrot,0.0f,1.0f,0.0f);		//  Y
	glRotatef(zrot,0.0f,0.0f,1.0f);		// Z
	glBindTexture(GL_TEXTURE_2D, texture[0]);
	glBegin(GL_QUADS);

				// 
	glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// 

				// 
	glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// 

				// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// 
	
				// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	// 

				// Ïðàâàÿ ãðàíü
	glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);	// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);	// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);	// 
	glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	// 

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);	// 
	glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);	// 
	glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);	// 
	glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);	// 

	glEnd();
	glPopMatrix();///// <------
    glutSwapBuffers();
    glutPostRedisplay(); 
	xrot+=0.1f;			// X
	yrot+=0.1f;			// Y
	zrot+=0.1f;			// Z
	
}

int main (int argc, char** argv){

   glutInit(&argc, argv); 
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
   glutInitWindowSize (500, 500); 
   glutCreateWindow ("Tex"); 

   InitGL (30,30); 
   glutDisplayFunc (DrawGLScene); 

   glutMainLoop(); 
   return 0; 
return 0;
}


--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 7.08.2025 5:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"