![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
![]()
В общем изучаю openGL по книге и приступил к освещению, однако у меня все освещение создается монолитно одним цветом по всей грани куба, а я хочу чтобы оно ложилось не равномерно, ну то есть если часть грани куба освещена лучше то та часть одной грани поярче, а у меня грани монолитно заливаются одним цветом.
Главный код (main.cpp) Код HTML:
... //параметры освещения GLfloat light[] = { 0.3f, 0.3f, 0.3f, 1.0f }; GLfloat defuzeLight[] = { 0.9f, 0.9f, 0.9f, 1.0f }; GLfloat blic[] = {1.0f,1.0f,1.0f,1.0f}; //координаты размещения GLfloat LIGHT_POSITION[] = {0.0f,0.0f,30.0f,0.0f}; //Создание главного окна WINDOW W001; //Функция рисования void Draw(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //включаем проверку буфера глубины glEnable(GL_DEPTH_TEST); //включааем свет glEnable(GL_LIGHTING); //все нормали от поверхностей единичные glEnable(GL_NORMALIZE); //освещение цветовое glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); //добавление свету параметров glLightfv(GL_LIGHT0,GL_AMBIENT, light); glLightfv(GL_LIGHT0, GL_DIFFUSE, light); glLightfv(GL_LIGHT0, GL_SPECULAR, light); //параметры бликового света glMaterialfv(GL_FRONT, GL_SPECULAR, blic); glMateriali(GL_FRONT, GL_SHININESS, 1); //включение и размещение glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, LIGHT_POSITION); ... Грани куба (Kubic.cpp) Код HTML:
#include <GL\glut.h>
struct Kubic
{
void Kubic_inicualeze(float x,float y,float z,float size){
GLfloat gray[] = { 0.75f, 0.75f, 0.75f, 1.0f };
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE,gray);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.9f, 0.1f);
glNormal3f(size*(x - 1), size*(y + 0), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 0));
glNormal3f(size*(x + 2), size*(y + 0), size*(z + 0));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 0));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 1));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 0));
glNormal3f(size*(x + 0), size*(y - 1), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 1));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 1));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 0));
glNormal3f(size*(x + 0), size*(y + 2), size*(z + 0));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 0));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 0));
//Низ
glNormal3f(size*(x + 0), size*(y + 0), size*(z - 1));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 0));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 0));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 0));
//Верх
glNormal3f(size*(x + 0), size*(y + 0), size*(z + 2));
glVertex3d(size*(x + 1), size*(y + 0), size*(z + 1));
glVertex3d(size*(x + 1), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 1), size*(z + 1));
glVertex3d(size*(x + 0), size*(y + 0), size*(z + 1));
glEnd();
}
};
ученик самоучка
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
![]()
Блин извиняюсь снова пришел к ответу сам.
![]() В общем надо было добавить больше нормалей на грань, каждой вершине своя нормаль. Участок кода верхней грани Код HTML:
glNormal3f(size*(x + 1), size*(y + 0), size*(z + 2)); glVertex3d(size*(x + 1), size*(y + 0), size*(z + 1)); glNormal3f(size*(x + 1), size*(y + 1), size*(z + 2)); glVertex3d(size*(x + 1), size*(y + 1), size*(z + 1)); glNormal3f(size*(x + 0), size*(y + 1), size*(z + 2)); glVertex3d(size*(x + 0), size*(y + 1), size*(z + 1)); glNormal3f(size*(x + 0), size*(y + 0), size*(z + 2)); glVertex3d(size*(x + 0), size*(y + 0), size*(z + 1));
ученик самоучка
Последний раз редактировалось koker_007; 14.08.2015 в 09:24. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
для справки. вы изучаете устаревшую версию OpenGL.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
![]()
А где я могу изучить новую? когда скачивал библиотеку она была версии 3.0.0
ученик самоучка
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
библиотеку это для компилятора имеете в виду?
там просто связь с тем что есть у вас, сам OGL зависит от дров видео. самое мощное обычно это брать GLEW/GLee для связки с библиотеками. вы изучаете версию порядка второй. начиная с третьей версии основной считаются шейдеры. современная версия это четверка. в смысле где? книги есть иные. правда на рус не знаю, уж извините. и дело более не в том какая версия, а в том что glBegin/glEnd и иже с ними, это устаревшее. ибо одна за вызов это мало, это неэффективно. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
koker_007, может вам пригодится эта статья по освещению на шейдерах.
Я по ней сделал два примера (вам пригодятся шейдеры - файлы с расширением .glsl): - diffuse освещение куба с текстурами. Текстуры накладывал в 3D редакторе Blender, экспортировал в obj файл, импортировал в программу с помощью библиотеки Assimp - diffuse+specular освещение сферы Последний раз редактировалось 8Observer8; 20.08.2015 в 17:25. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
![]()
Для изучения азов glBegin/glEnd самое то. Чуть позже попробуйте glCallList[s].
Понятно что развитие с тех пор не стояло на месте, но изучение лучше пройти с начала. |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
зачем? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#9 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Цитата:
только время понапрасну тратить. |
|
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 30.03.2015
Сообщений: 35
|
![]()
Приобрел книгу "Open GL 4. Язык шейдеров. Книга рецептов" она по библиотеке GLSL.
Думал что там будет все подробно объясняться для новичков но изучая даже не понял как библиотеки GLSL поставить на Visual Studio. Кто нибудь, дайте пожалуйста хорошие, подробные уроки по GLSL В GLUT продвинулся до того что на скрине, но очень хочется изучать GLSL а не GLUT. В интернете уроков GLSL не очень много, а в книге что купил предполагается что навык работы с GLSL уже хоть какой-то но есть. Разбираться в GLUT конечно интересно очень хочется в ногу с технологиями идти. Цитата:
ученик самоучка
Последний раз редактировалось koker_007; 29.08.2015 в 15:10. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OpenGl. (Delphi). Освещение | novicepro | Помощь студентам | 0 | 02.05.2012 21:03 |
Освещение в OpenGL | _PROGRAMM_ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 18 | 29.12.2011 17:29 |
OpenGL - освещение | Артэс | Общие вопросы C/C++ | 0 | 12.10.2011 20:46 |
как сделать такое освещение(opengl) ? | NiCola999 | Общие вопросы C/C++ | 3 | 20.11.2010 15:02 |
OpenGL, освещение | loozer | Мультимедиа в Delphi | 3 | 17.12.2008 19:09 |