Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Microsoft Visual C++2008 Express Edition
Статья по теме: 

В этой работе выполняется освещение фигуры при помощи основных функций Open GL

Код программы: 

#include <stdlib.h> // подключение библиотек 
#include <GL\glut.h> 
 
void look();
void square(){ // отстраивается одна грань кубика 
 
glBegin(GL_QUADS);  
glVertex3f(-1,-1,0); 
glVertex3f(1,-1,0); 
glVertex3f(1,1,0); 
glVertex3f(-1,1,0); 
glEnd(); 
glColor3b(0,0,0);
glBegin(GL_LINES);
glVertex3f(-0.4,1,0);
glVertex3f(-0.4,-1,0);
glVertex3f(0.4,-1,0);
glVertex3f(0.4,1,0);
 
glVertex3f(-1,0.4,0);
glVertex3f(1,0.4,0);
glVertex3f(-1,-0.4,0);
glVertex3f(1,-0.4,0);
glEnd();
 
} 
 
void cube(){ 
 
 
 
//glColor3ub(0xFF, 0x00, 0x00); //цвет грани (рисует три пары , с помощью смещения )
glPushMatrix(); 
 
glTranslatef(0, 0, -1); 
square();
//glColor3ub(0xFF, 0x00, 0x00);
glTranslatef(0, 0, 2); 
square(); 
glPopMatrix(); 
 
//glColor3ub(0x0, 0xff, 0x00); 
glPushMatrix(); 
glRotatef(90, 0, 1, 0); 
glTranslatef(0, 0, -1); 
square(); 
glTranslatef(0, 0, 2); 
//glColor3ub(0x0, 0xff, 0x00); 
square(); 
glPopMatrix(); 
 
//glColor3ub(0x00, 0x00, 0xff); 
glPushMatrix(); 
glRotatef(90, 1, 0, 0); 
glTranslatef(0, 0, -1); 
square(); 
glTranslatef(0, 0, 2); 
//glColor3ub(0x00, 0x00, 0xff); 
square(); 
glPopMatrix(); 
} 
 
float cangle = 0.02; // угол вращения 
 
void onRender(){ 
	glClearColor(100,0,1,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //очистка буферов (двойного и глубины )
glMatrixMode(GL_MODELVIEW);
 
glPushMatrix();
glLoadIdentity();
look();// работа с освещением 
float l_diffuse[] = {0.4, 0.7, 0.2};
float l_pos[] = {-1.5, -1.5, 1.5, 1};
float s_dir[] = {1, 1, 0, -1};
glLightfv(GL_LIGHT0, GL_DIFFUSE, l_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, l_pos);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.2);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.4);
glPopMatrix();
 
glRotatef(cangle, 0, 0, 1); // поворот
cube();
glutSwapBuffers(); // стандартная функция двойной буферизации , для измены буфера 
} 
 
 
void look(){
	glMatrixMode(GL_MODELVIEW);
gluLookAt(-4, -4, 2, // установление точки обзора 
0, 0, 0, 
0, 0, 1); 
}
void onReshape(int w, int h){ //вызывается когда происходит изменение окна 
glViewport(0, 0, w, h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(120, w/h, 1, 100); 
 
 // переключение на матрицу моделей 
look();
 
} 
 
void initScene(){ // создаёт глубину 
glEnable(GL_DEPTH_TEST); 
} 
 
 
 
int main(int argc, char **argv){ // стандартная функция 
 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); 
glutInitWindowPosition(100,100); //позиции 
glutInitWindowSize(500,500); //размер 
glutCreateWindow("Sqear"); //название 
 
initScene(); 
 
glutDisplayFunc( onRender); // функция отрисовки 
glutIdleFunc(onRender); //когда не событий 
glutReshapeFunc(onReshape); 
 
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
 
glDisable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
 
 
glutMainLoop(); //функция выполнения 
return 0; 
}