Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2012, 11:38   #1
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
Вопрос Свет в OpenGl (glut)

Подскажите где ошибся:

Код:
	glEnable(GL_LIGHTING);
	GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; // Значения фонового света 
	GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; // Значения диффузного света
	GLfloat LightPosition[]= { 1.0f, 0.0f, 2.0f, 1.0f };     // Позиция света
	  
	glLightfv(GL_LIGHT2, GL_AMBIENT, LightAmbient);    // Установка Фонового Света
	glLightfv(GL_LIGHT2, GL_DIFFUSE, LightDiffuse);    // Установка Диффузного Света
	glLightfv(GL_LIGHT2, GL_POSITION, LightPosition);   // Позиция света
	glEnable(GL_LIGHT2); // Разрешение источника света номер один
что со светом, что без, изображение одинаковое
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 24.01.2012, 16:36   #2
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Скрины прикрепи, со светом и без, взглянуть хочу.

Вот мой самовар со светом, все работает.
Код:
#include "freeglut.h"
#pragma comment (lib, "freeglut.lib")
#include <gl/GLU.h>

#define APPLICATION_TITLE "OpenGL Lighting"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600

void Keyboard( unsigned char cKey, int nMouseX, int nMouseY ) 
{
  switch ( cKey )
  {
  /* Если нажали Escape */
  case 27:
    glutLeaveMainLoop();
    break;
  }
}
/* Процедура для изменения области  */
void Reshape(int nWidth, int nHeight) 
{
  	glViewport ( 0, 0, (GLsizei) nWidth, (GLsizei) nHeight );
}

/* Процерура прорисовки сцены */
void Display() 
{
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    
    GLfloat fTime = (GLfloat) glutGet( GLUT_ELAPSED_TIME );
    glRotatef( fTime * 0.1, 1, 1, 0 );
    glutSolidTeapot(1);

    glFlush();
    glutSwapBuffers();
    Sleep(10);
}

/* Настройка сцены */
void InitScene() 
{
  glClearColor    ( 0.0f, 0.0f, 0.5f, 0 );
  glMatrixMode    ( GL_PROJECTION );
  glLoadIdentity  ();

  GLfloat aspect = WINDOW_WIDTH / WINDOW_HEIGHT;

  gluPerspective  (45.0f, 1.33, 0.1f, 100.0f);

  gluLookAt       ( 0, 0, 5, 0, 0, 0, 0, 1, 0 );
  glMatrixMode    ( GL_MODELVIEW );
  glLoadIdentity  ();

  /* Z-Buffer */
  glEnable			( GL_DEPTH_TEST );
  glDepthMask	  ( GL_TRUE );
  glDepthFunc	  ( GL_LEQUAL );
  glClearDepth	( 1.0f );

  glShadeModel  ( GL_SMOOTH );
  //glShadeModel  ( GL_FLAT);

  /* Свет */
  glEnable ( GL_LIGHTING );
  GLfloat fAmbientLight[] = {0.0f, 0.0f, 0.0f, 0.0f};
  GLfloat fDiffuseLight[] = {0.8f, 0.8f, 0.8f, 1.0f};
  GLfloat fSpecularLight[] = {1.0f, 1.0f, 1.0f, 1.0f};
  glLightfv (GL_LIGHT0, GL_AMBIENT, fAmbientLight );
  glLightfv (GL_LIGHT0, GL_DIFFUSE, fDiffuseLight );
  glLightfv (GL_LIGHT0, GL_SPECULAR, fSpecularLight );

  GLfloat fLightPosition[] = {-10.0f, 10.0f, 20.0f, 1.0f};
  glLightfv (GL_LIGHT0, GL_POSITION, fLightPosition);

  glEnable ( GL_LIGHT0 );

  /* Материал */
  GLfloat fMaterial[] = { 0.5f, 0.5f, 0.5f, 0.5f };
  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, fMaterial);
  glEnable( GL_COLOR_MATERIAL);
  glMaterialfv ( GL_FRONT, GL_SPECULAR, fSpecularLight);
  glMateriali ( GL_FRONT, GL_SHININESS, 128);

}

int main (  int argc, char** argv ) 
{
  glutInit( &argc, argv );
  glutInitWindowSize ( WINDOW_WIDTH, WINDOW_HEIGHT );
  glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH  );

  /*
  glutInitContextVersion ( 3, 3 );
  glutInitContextProfile( GLUT_CORE_PROFILE );
  */

  /* Заголовок окна*/
  glutCreateWindow ( APPLICATION_TITLE );
  glutSetOption( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION );

  /* Установка ф-й обратного вызова */
  glutDisplayFunc	  (	Display	); 
  glutReshapeFunc	  (	Reshape	);
  glutKeyboardFunc	(	Keyboard);
  glutIdleFunc      (	Display	);

  /* Настроим сцену */
  InitScene();
  /* Главный цикла программы*/
  glutMainLoop();
  
  return 0;
}
Warn вне форума Ответить с цитированием
Старый 24.01.2012, 18:36   #3
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

http://narod.ru/disk/38692152001/1.png.html
Одну кинул, т.к. вторая такая же(
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 24.01.2012, 22:20   #4
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Судя по картинке свет в сцене все-таки есть, поскольку уровень света на указанных мною фрагментах разный. Другое дело где находиться источник света по отношению к участку который мы видим, т.е с какой стороны он освещает объект. Есть ли нормали у объекта, нормированы ли они? И в какой системе координат находиться сам источник света. Почитай про последний параметр позиции в книжках по опен гл. Тем более тема уже всплывала, как мне помнится. Поройся в недавних темах - про свет и w компоненту позиции света.
Изображения
Тип файла: jpg h11.jpg (23.3 Кб, 145 просмотров)
Warn вне форума Ответить с цитированием
Старый 25.01.2012, 07:36   #5
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Свет я поставил сверху справа.
Нормали влияют на свет? Просто я свет учил по урокам NEHE и у него без них как то
То что ты указал это не свет) это текстура легла кривовато. Надо переписать
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 25.01.2012, 07:48   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
Нормали влияют на свет? Просто я свет учил по урокам NEHE и у него без них как то
Цитата:
glNormal3f новая функция в моих уроках. Нормаль - линия, берущая начало из середины полигона под 90 углом градусов. Когда Вы используете освещение, Вы должны задать нормали. Нормаль сообщает OpenGL, в каком направлении у полигона лицевая часть, какое направление верхнее. Если Вы не задали нормали, могут происходить сверхъестественные вещи. Грань, которая не освещена, будет освещена, неверная сторона полигона будет освещена, и т.д. Нормаль должна указывать вовне полигона.
http://pmg.org.ru/nehe/nehe07.htm
Kostia вне форума Ответить с цитированием
Старый 25.01.2012, 07:50   #7
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Блин, точно, код глазами пробегал не заметил
Спасибо большое
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 25.01.2012, 08:08   #8
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Всем спасибо, нашел косяк
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 25.01.2012, 08:44   #9
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

в импорте текстуры стояло
Код:
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
а надо было поставить
Код:
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GLUT [ OpenGl ] Coco_Jamboo Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 02.11.2017 22:02
Учение свет... DebianAmigo Помощь студентам 1 17.10.2011 00:40
Красный свет светофора: на сколько секунд ставить задержку? Blondy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.03.2011 10:58
Как в OpenGL сделать свет (прожектор) исходящий от объекта (сферы) Mindzor Общие вопросы C/C++ 3 19.09.2010 14:25
Будем ли мы скоро платить за свет на планете? Syltan Свободное общение 12 21.11.2009 09:43