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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 07:31   #1
Mindzor
 
Регистрация: 18.09.2010
Сообщений: 6
По умолчанию Как в OpenGL сделать свет (прожектор) исходящий от объекта (сферы)

У меня есть сфера (light.png) надо бы сделать так чтобы от нее как от прожектора шел желтый свет (угол 90 градусов). Причем этот свет должен постепенно рассеиваться (на рисунке я забыл это показать). Как это сделать средствами OpenGL на C++
Изображения
Тип файла: png light.png (16.4 Кб, 51 просмотров)
Mindzor вне форума Ответить с цитированием
Старый 18.09.2010, 11:14   #2
blob
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 34
По умолчанию

думаю это сможет помочь. Выдрал кусок из класса
Код:
OGLlibLight::OGLlibLight(){
	_nLight=-1;_position[1]=0;_position[2]=0;_position[3]=0;_position[0]=0;
}
void OGLlibLight::on(){
	if(_nLight<0) return;
	_state=true;
	glEnable(0x4000+_nLight);

}
void OGLlibLight::off(){
	if(_nLight<0) return;
	_state=false;
	glDisable(0x4000+_nLight);
}
void OGLlibLight::setPosition(OGLlibVector3D v){
	if(_nLight<0) return;
	_position[0]=v[0];_position[1]=v[1];_position[2]=v[2];_position[3]=_posDir;
	glLightfv(0x4000+_nLight,GL_POSITION, &_position[0]);
}
void OGLlibLight::positional(){
	if(_nLight<0) return;
	_posDir=1.0;
	_position[3]=_posDir;
	glLightfv(0x4000+_nLight,GL_POSITION, &_position[0]);
}
void OGLlibLight::directional(){
	if(_nLight<0) return;
	_posDir=0.0;
	_position[3]=_posDir;
	glLightfv(0x4000+_nLight,GL_POSITION, &_position[0]);
}
void OGLlibLight::setDirection(OGLlibVector4D v){
	if(_nLight<0) return;
	_spotDirection=v;
	glLightfv(0x4000+_nLight,GL_SPOT_DIRECTION, &_spotDirection[0]);
}
void OGLlibLight::setDiffuse(OGLlibVector4D v){
	if(_nLight<0) return;
	_diffuse=v;
	glLightfv(0x4000+_nLight,GL_DIFFUSE, &_diffuse[0]);
}
void OGLlibLight::setSpecular(OGLlibVector4D v){
	if(_nLight<0) return;
	_specular=v;
	glLightfv(0x4000+_nLight,GL_SPECULAR, &_specular[0]);
}
void OGLlibLight::setAmbient(OGLlibVector4D> v){
	if(_nLight<0) return;
	_ambient=v;
	glLightfv(0x4000+_nLight,GL_AMBIENT, &_ambient[0]);
}
void OGLlibLight::setSpotExponent(float e){
	if(_nLight<0) return;
	_spotExp=e;
	glLightf(0x4000+_nLight,GL_SPOT_EXPONENT, _spotExp);
}
void OGLlibLight::setSpotCutOff(float c){
	if(_nLight<0) return;
	_spotCutOff=c;
	glLightf(0x4000+_nLight,GL_SPOT_CUTOFF, _spotCutOff);
}
void OGLlibLight::setConstantAttenuation(float a){
	if(_nLight<0) return;
	_constAttenuation=a;
	glLightf(0x4000+_nLight,GL_CONSTANT_ATTENUATION, _constAttenuation);
}
void OGLlibLight::setLinearAttenuation(float a){
	if(_nLight<0) return;
	_linearAttenuation=a;
	glLightf(0x4000+_nLight,GL_LINEAR_ATTENUATION, _linearAttenuation);
}
void OGLlibLight::setQuadraticAttenuation(float a){
	if(_nLight<0) return;
	_quadAttenuation=a;
	glLightf(0x4000+_nLight,GL_QUADRATIC_ATTENUATION, _quadAttenuation);
}
blob вне форума Ответить с цитированием
Старый 19.09.2010, 14:01   #3
Mindzor
 
Регистрация: 18.09.2010
Сообщений: 6
По умолчанию

А что это такое?
Mindzor вне форума Ответить с цитированием
Старый 19.09.2010, 14:25   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

использование источников света в GL, супер книгу по OpenGL читайте, там есть примеры.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка объекта OpenGL? spamer Мультимедиа в Delphi 6 05.10.2009 18:13
Как сделать столкновение объекта с формой yakimchukav Помощь студентам 2 23.09.2009 19:31
Движение объекта по точкам(OpenGl).Подскажите. spamer Общие вопросы Delphi 12 10.04.2009 17:06
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene DomKr@t Мультимедиа в Delphi 0 14.12.2008 01:52
Как изменить размер пакетов чтобы уменьшить исходящий трафик lubopit Операционные системы общие вопросы 1 21.02.2008 18:09