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

> Внимание!

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

> Трассировка лучей, OpenGl, C++
legat
сообщение 28.02.2010 18:37
Сообщение #1


Новичок
*

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

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


Необходимо реализовать трассировку лучей на OpenGl и C++, задача вроде проста, есть базовая сфера( радиус =1, центр в начале координат) необходимо ее отрисовать. У меня почти получилось, только вот точки пересечения не получается найти, по моему что-то с заданием направления луча. Может кто-то сталкивался с этим? Буду благодарен за код=)



void Reshape(int width, int height)
{if (width>height)
	glViewport((width-height)/2,0,height,height);
	else glViewport(0,(height-width)/2,width,width);
 //glEnable(GL_DEPTH_TEST);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluOrtho2D(-10,10,-10,10);
 glMatrixMode(GL_MODELVIEW);
}
void Display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	Ray myray;	
	myray.start.x=0;
	myray.start.y=0;
	myray.start.z=5;
	for(float i=0;i<200;i++)
		for(float j=0;j<200;j++)
		{
			Point t;
			t.x=-10+i/20;
			t.y=10-j/20;
			t.z=0;
			//FILE * f=fopen("output.txt","r");
			myray.dir.x=t.x-myray.start.x; //задаю направление луча, думаю ошибка где-то здесь, хотя //может неправильно перевожу экранные координаты
			myray.dir.y=t.y-myray.start.y;
			myray.dir.z=t.z-myray.start.z;
			//fprintf(f,"x=%f, y=%f, z=%f\n",myray.dir.x,myray.dir.y,myray.dir.z);
			float A=sqr(myray.dir,myray.dir);
			float B=sqr(myray.dir,myray.start);
			float C=sqr(myray.start,myray.start)-1;
			float D=B*B-4*A*C;
			if (D>0)
			printf("i=%d j=%d %f\n",i,j,D);
			if (D<0)
			{
				glColor3f(0,0,0);
				glRecti(i,j,i+1,j+1);						
			}
			else
			{
				//float t1,t2;
				//t1=(-B-sqrt(D))/(2*A);
				//t1=(-B+sqrt(D))/(2*A);
				glColor3f(1,1,1);
				glRecti(i,j,i+1,j+1);				
			}
			//glFlush();
		}	
 glFlush();
}



Может кто знает, где можно найти книгу Лорен Хейни "Построение изображений метод слежения луча"?

Сообщение отредактировано: Lapp - 3.03.2010 5:22
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
legat   Трассировка лучей, OpenGl, C++   28.02.2010 18:37
volvo   Чего ж ты не показал, что именно у тебя получилось...   28.02.2010 21:56
legat   Все добавил код   2.03.2010 20:57
volvo   Странно. В Reshape используешь функции из GLUT-а, ...   2.03.2010 22:18
legat   Так сферу конечно нарисовать мог, но мне именно на...   2.03.2010 23:30
volvo   Значит, смотри... Вот - основа: http://www.coderm...   3.03.2010 13:36
legat   Большое спасибо. Буду разбираться с кодом.   3.03.2010 15:37
Client   А где взять файлик glut.h ?   3.03.2010 17:11
volvo   Здесь: ftp://ftp.sgi.com/sgi/opengl/glut/ Там ест...   3.03.2010 17:54
Client   спасибо, скачал этот :) Сколько там файлов.... ес...   3.03.2010 18:33
volvo   Ну, и зачем тебе это все? Я ж говорил, что тебе на...   3.03.2010 19:22
legat   Не могу понять зачем нужна переменная level?   3.03.2010 19:33
volvo   А, это чтобы не затормаживать отрисовку сцены. Есл...   3.03.2010 19:39
legat   float temp = n * n; if (temp == 0.0f) break; t...   3.03.2010 21:14
volvo   Это нахождение нормали (направления отраженного лу...   4.03.2010 3:03
legat   Пишу трассировку лучей по книге "Программиров...   1.05.2010 23:49
volvo   Оно что у тебя, компилируется? Мне вот чего выдает...   5.05.2010 11:41
ttt   Может у кого-то есть книга "Лорен Хейни. Пост...   4.11.2011 13:30


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

 

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