<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEADRXs6cCp7ImA9WhRaFEg.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895</id><updated>2012-02-16T20:26:14.518-08:00</updated><category term="ActionScript" /><category term="Visual Studio" /><category term="ВКонтакте" /><category term="Blogger" /><category term="Boost" /><category term="GameDev Snnipets" /><title>Game [coder]</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.gamecoder.ru/" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Gamecoder" /><feedburner:info uri="gamecoder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEMMSHY7eSp7ImA9WhZQEkk.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-5985234894606302180</id><published>2011-04-19T12:48:00.000-07:00</published><updated>2011-04-19T12:48:09.801-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T12:48:09.801-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GameDev Snnipets" /><title>Координаты курсора в 3D</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KUZQniqLQo8Hbwwxrq2c15rUsuI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KUZQniqLQo8Hbwwxrq2c15rUsuI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KUZQniqLQo8Hbwwxrq2c15rUsuI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KUZQniqLQo8Hbwwxrq2c15rUsuI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;Задача:&lt;/b&gt; Определить координаты мыши в 3D пространстве и построить луч для&amp;nbsp;трассировки.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Решение:&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Часть 1 Определение координат мыши.&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;cursor_x, cursor_y&lt;/span&gt; - координаты мыши в пространстве окна.&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;width, height&lt;/span&gt; - высота и ширина окна.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;matProjection&lt;/span&gt; - матрица проекции.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;matView&lt;/span&gt; - матрица вида.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;matWorld&lt;/span&gt; - мировая матрица.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Теория:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Получаем координаты мыши в пространстве окна, переводим их в промежуток [-1; 1] затем масштабируем на&amp;nbsp;коэффициенты&amp;nbsp;по &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;х&lt;/span&gt; (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;matProjection._11&lt;/span&gt;) и &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;у&lt;/span&gt; (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;matProjection._22&lt;/span&gt;). &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;z&lt;/span&gt; устанавливаем в 1.0f (передняя плоскость отсечения равна 1.0f)&amp;nbsp;Для лучшего понимания процесса смотрите аксонометрические преобразования.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Код:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;float new_x = (-1.0f + 2.0f * cursor_x &amp;nbsp;/ width) / matProjection._11;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;float new_y = (1.0f - 2.0f * cursor_y / height) / matProjection._22;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;float new_z = 1.0f;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Часть 2 Строим луч.&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Теория:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;Переводим полученные координаты в пространство объекта, для этого получаем текущую видовую матрицу и мировую матрицу объекта. Перемножаем их, полученный результат инвертируем. Это и будет матрица трансформации точки в пространство объекта, который собираемся проверять на пересечение с лучом. Преобразуем вектор (new_x, new_y, new_z) с помощью инвертированной&amp;nbsp;матрицы, результат будет вектором направления луча. Точку начала луча установим в позицию х, y, z инвертированной матрицы.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Код:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;invMat = Inverse(matWorld * matView);&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.direction.x = new_x * invMat._11 +&amp;nbsp;new_y * invMat._21 +&amp;nbsp;new_z * invMat._31;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.direction.y =&amp;nbsp;new_x * invMat._12 +&amp;nbsp;new_y * invMat._22 +&amp;nbsp;new_z * invMat._32;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.direction.z =&amp;nbsp;new_x * invMat._13 +&amp;nbsp;new_y * invMat._23 +&amp;nbsp;new_z * invMat._33;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.x = invMat._41;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.y =&amp;nbsp;invMat._42;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.z =&amp;nbsp;invMat._43;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-5985234894606302180?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/uo6V7-QMBzs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/5985234894606302180/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/04/3d.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/5985234894606302180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/5985234894606302180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/uo6V7-QMBzs/3d.html" title="Координаты курсора в 3D" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/04/3d.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHR3k-cSp7ImA9WhZREEQ.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-4639562720962594386</id><published>2011-04-06T07:15:00.000-07:00</published><updated>2011-04-06T07:15:36.759-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T07:15:36.759-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GameDev Snnipets" /><title>Проверка пересечения 3D луча и 3D объектов</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aLw1pkyKUbNnIqC_nsScjpJRhPE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aLw1pkyKUbNnIqC_nsScjpJRhPE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aLw1pkyKUbNnIqC_nsScjpJRhPE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aLw1pkyKUbNnIqC_nsScjpJRhPE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;
Пересечение 3D луча и 3D плоскости.&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Теория:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляем скалярное произведение нормали плоскости с направлением луча (луч нормализован). Если произведение равно 0, то луч проходит перпендикулярно плоскости, следовательно пересечения нет. Плоскость задана каноническим уравнением вида:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nx * x + ny * y + nz * z + d = 0&lt;/span&gt;, где нормаль плоскости равна: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;plane.normal = (nx, ny, nz)&lt;/span&gt;. Луч задан начальной точкой и вектором направления: &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.start = (xs, ys, zs)&lt;/span&gt; и ray.direction = (xd, yd, zd). Координаты точек луча будут вычисляться по формулам: &lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;xp = xs + t * xd, yp = ys + t * yd,&amp;nbsp;zp = zs + t * zd.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Найдем точку пересечения луча и плоскости, для этого подставим в уравнение плоскости координаты точек луча:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nx * (xs + t * xd) + ny * (ys + t * yd) + nz * (zs + t * zd) + d = 0&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Выражая параметр &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, мы найдем формулу для поиска точки пересечения. dotProduct - скалярное произведение.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t = - (dotProduct(plane.normal, ray.start) + plane.d) /&amp;nbsp;&amp;nbsp;dotProduct(plane.normal, ray.direction);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;если &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t &amp;lt; 0&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, то луч не пересекает плоскость.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Код:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bool intersectPlane(const Plane&amp;amp; plane, const Ray&amp;amp; ray, float* result)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float alpha = dotProduct(plane.normal, ray.direction);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(alpha != 0.0f)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;*result = - dotProduct(plane.normal, ray.start) + plane.d;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;*result = *result / alpha;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (*result &amp;gt;= 0.0f);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; return false;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Пересечение 3D луча и сферы.&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Теория:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;Пусть нам дана сфера с координатами центра в точке (xc, yc, zc) и радиусом r, тогда сфера описывается формулой:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(x - xc)^2 + (y - yc)^2 + (z - zc)^2 = r^2&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;подставим сюда, формулы координат луча:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(xs + t * xd - xc)^2 + (ys + t * yd - yc)^2 + (zs + t * zd)^2 = r^2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Открываем скобки:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t^2 * (xd^2 + yd^2 + zd^2) + 2t * ((xs * xd + ys * yd + zs * zd)-(xc * xd + yc * yd + zc * zd)) + xs^2 + ys^2 + zs^2 + xc^2 + yc^2 + zc^2 - r^2&amp;nbsp;= 0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t^2*dotProduct(ray.direction, ray.direction)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;+ 2t * dotProduct(ray.direction, (ray.start - sphere.center)) +&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dotProduct(ray.start,&amp;nbsp;ray.start)- 2 *&amp;nbsp;dotProduct(ray.start, sphere.center) + dotProduct(sphere.center, sphere.center) - r^2 = 0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Приведем уравнение к виду:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;at^2 + bt + c = 0&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
a =&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dotProduct(ray.direction, ray.direction)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;b = 2*&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dotProduct(ray.direction, (ray.start - sphere.center))&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;c =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;dotProduct(ray.start,&amp;nbsp;ray.start)- 2 *&amp;nbsp;dotProduct(ray.start, sphere.center) + dotProduct(sphere.center, sphere.center) - r^2 = (ray.start - sphere.center)*(ray.start - sphere.center) - r^2&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Наименьший положительный корень этого уравнения определяет на луче&amp;nbsp;ближайшую точку пересечения луча со сферой. Направление луча&amp;nbsp;нормировано, поэтому a = 1.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Что бы проверить лежит ли начало луча в сфере:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;|ray.start - sphere.center| ^ 2 - sphere.radius^2 &amp;lt; 0&lt;/span&gt;, где |x| - длинна вектора.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Код:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bool intersectSphere (const Sphere&amp;amp; sphere, const Ray&amp;amp; ray, float* result)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; Vector3D vect(ray.start.x - sphere.center.x,&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ray.start.y - sphere.center.y,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ray.start.z - sphere.ceneter.z);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float c = sqr(vect.length) - sqr(sphere.radius);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(c &amp;lt; 0.0f)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; *result = 0.0f;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float b = dotProduct(vect, ray.direction);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float d = sqr(b) - c;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if (d &amp;lt; 0.0f)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (false);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float root1 =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;-b - sqrt(c);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float root2 = -b +&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sqrt(c);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(root1 &amp;gt;= root2)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;*result =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;root1;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;*result = root2;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; return (*result &amp;gt;= 0.0f);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;b&gt;Пересечение 3D луча и&amp;nbsp;параллелепипеда (AABB).&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;Теория:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Прямоугольный параллелепипед со сторонами, параллельными координатным&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;плоскостям, определяется двумя своими вершинами: &amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;A(&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.minX,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.minY,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.minZ) и&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;B&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.maxX,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.maxY,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rect.maxZ).&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Рассмотрим&amp;nbsp;сначала&amp;nbsp;плоскости параллельные осям &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yz&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. И начнем проверять с координатой &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.x&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; луча. Если&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.direction.x = 0&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, то значит луч параллелен этим плоскостям и, если&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.x&amp;nbsp;&amp;lt;&amp;nbsp;rect.minX&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; или&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ray.position.x&amp;nbsp;&amp;gt;&amp;nbsp;rect.maxX&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, то значит луч не пересекает параллелепипед. А если луч не параллелен этим плоскостям, то&amp;nbsp;&lt;/span&gt;рассчитываем отношения, когда луч пересечет ближнюю и дальнюю плоскости:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t1 = &amp;nbsp;(rect.minX - ray.position.x) /&amp;nbsp;ray.direction.x&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t2 = &amp;nbsp;(rect.maxX - ray.position.x) /&amp;nbsp;ray.direction.x&lt;/span&gt;&lt;br /&gt;
если &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t1 &amp;gt; t2&lt;/span&gt;, то&amp;nbsp;меняем&amp;nbsp;их местами. Заводим переменные &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_near = t1&lt;/span&gt; и &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_far = t2&lt;/span&gt; и дальше&amp;nbsp;рассчитываем аналогично другие две плоскости для &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Y:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t1 = &amp;nbsp;(rect.minY - ray.position.y) /&amp;nbsp;ray.direction.y&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t2 = &amp;nbsp;(rect.maxY - ray.position.y) /&amp;nbsp;ray.direction.y&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Если &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t1 &amp;gt; t_near&lt;/span&gt;, то &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_near = t1&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Если &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t2 &amp;lt; t_far&lt;/span&gt;, то &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_far = t2&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Если &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_near &amp;gt; t_far&lt;/span&gt; или &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_far &amp;lt; 0&lt;/span&gt;, то значит луч не пересекает&amp;nbsp;параллелепипед. Проведем аналогичные расчеты и для &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Z&lt;/span&gt;. И если в итоге после всех проведенных расчетов получим, что: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;0 &amp;lt; t_near &amp;lt; t_far&lt;/span&gt; или &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;0 &amp;lt; t_far&lt;/span&gt;, то значит луч пересечет&amp;nbsp;параллелепипед. В &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_near&lt;/span&gt;&amp;nbsp;будет параметр луча при котором луч войдет в&amp;nbsp;параллелепипед, а в &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;t_far&lt;/span&gt; параметр луча при выходе из параллелепипеда.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;Код:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bool intersectRectangle(const Rect&amp;amp; rect, const Ray&amp;amp; ray, float* result)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; //Проверим&amp;nbsp;если луч находится внутри параллелепипеда.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if (ray.position.x &amp;gt;= rect.minX&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; ray.posotion.x &amp;lt;= &amp;nbsp;rect.maxX&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; ray.positiont.y &amp;gt;= rect.minY&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; ray.position.y &amp;lt;= rect.maxY&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; ray.position.z &amp;gt;= rect.minZ&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; ray.position.z &amp;lt;= rect.maxZ)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;*result = 0.0f;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float t_near =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;"&gt;&lt;tt&gt;FLT_MIN&lt;/tt&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float t_far =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;"&gt;&lt;tt&gt;FLT_MAX;&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float t1;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float t2;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; float tmp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(ray.direction.x != 0.0f)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t1 = (rect.minX - ray.position.x) / ray.direction.x;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t2 = (rect.maxX - ray.position.x) / ray.direction.x;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tmp = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = tmp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t_near)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_near = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t2 &amp;lt; t_far)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_far = t2;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_near &amp;gt; t_far) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_far &amp;lt; 0) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(ray.direction.y != 0.0f)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t1 = (rect.minY - ray.position.y) / ray.direction.y;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t2 = (rect.maxY - ray.position.y) / ray.direction.y;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tmp = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = tmp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t_near)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_near = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t2 &amp;lt; t_far)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_far = t2;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_near &amp;gt; t_far) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_far &amp;lt; 0) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; if(ray.direction.z != 0.0f)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t1 = (rect.minY - ray.position.y) / ray.direction.y;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t2 = (rect.maxY - ray.position.y) / ray.direction.y;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tmp = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = tmp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t1 &amp;gt; t_near)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_near = t1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t2 &amp;lt; t_far)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t_far = t2;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_near &amp;gt;= t_far) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if(t_far &amp;lt; 0) return false;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; *result = t_near;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; return (*result &amp;lt; t_far &amp;amp;&amp;amp; *result &amp;gt;= 0);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-4639562720962594386?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/23LP8yKBLs0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/4639562720962594386/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/04/3d-3d.html#comment-form" title="Комментарии: 4" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/4639562720962594386?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/4639562720962594386?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/23LP8yKBLs0/3d-3d.html" title="Проверка пересечения 3D луча и 3D объектов" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/04/3d-3d.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNQnc-fSp7ImA9Wx9XGU4.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-2215111254247182809</id><published>2011-01-13T06:00:00.000-08:00</published><updated>2011-01-13T06:54:53.955-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-13T06:54:53.955-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Boost" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Boost Build в MS VS 2010</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DqbUvfE2TL7rqq5MjeakzgFMguw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DqbUvfE2TL7rqq5MjeakzgFMguw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DqbUvfE2TL7rqq5MjeakzgFMguw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DqbUvfE2TL7rqq5MjeakzgFMguw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;Библиотеки которые требуют сборки:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Boost.Filesystem&lt;/li&gt;
&lt;li&gt;Boost.GraphParallel&lt;/li&gt;
&lt;li&gt;Boost.IOStreams&lt;/li&gt;
&lt;li&gt;Boost.MPI&lt;/li&gt;
&lt;li&gt;Boost.ProgramOptions&lt;/li&gt;
&lt;li&gt;Boost.Python&lt;/li&gt;
&lt;li&gt;Boost.Regex&lt;/li&gt;
&lt;li&gt;Boost.Serialization&lt;/li&gt;
&lt;li&gt;Boost.Signals&lt;/li&gt;
&lt;li&gt;Boost.System&lt;/li&gt;
&lt;li&gt;Boost.Thread&lt;/li&gt;
&lt;li&gt;Boost.Wave&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Быстрая сборка большей части библиотек:&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Идете на сайт &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;boost.org&lt;/span&gt; в раздел &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;download&lt;/span&gt;, скачиваете последнюю версию библиотеки&lt;/li&gt;
&lt;li&gt;Распаковываете архив&lt;/li&gt;
&lt;li&gt;Заходим в паку с&amp;nbsp;распакованной&amp;nbsp;библиотекой, и запускаем  bootstrap.bat&lt;/li&gt;
&lt;li&gt;Сгенерируется&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bjam.exe&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Для Win32 запускаем:  &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bjam.exe --toolset=msvc-10.0 --build-type=complete&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Для Win64 запускаем:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bjam.exe --toolset=msvc-10.0 --build-type=complete&amp;nbsp;architecture=x86 address-model=64&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Собранные&amp;nbsp;lib файлы появятся в папке stage/lib&lt;/li&gt;
&lt;li&gt;PROFIT!!!&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Чтобы собрать:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Boost.Python&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;ol&gt;&lt;li style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"&gt;Скачиваем и устанавливаем python&lt;/li&gt;
&lt;li style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;Открываем блокнотом файл &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;project-config.jam&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;Если у вас 32 битная версия python, то добавляем следующую строчку в файл:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;using python : 2.6 : d:\\python\\python26\\python ;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: 'Courier New', Courier, monospace; font-size: 14px; line-height: 18px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;(обязательно пробел до и после ':')&lt;/li&gt;
&lt;li style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;Если у вас 64 битная версия python, то добавляем следующую строчку в файл:&lt;/span&gt;&lt;/li&gt;
&lt;li style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;using python : 2.6 : d:\\python\\python26-x64\\python ;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;(обязательно пробел до и после ':')&lt;/span&gt;&lt;/li&gt;
&lt;li style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;Запускаем &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;bjam.exe&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt; с требуемыми параметрами&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Boost.IOStreams с поддержкой bzip2 и zlib&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;По умолчанию для Windows платформы поддержка этих двух форматов отключена, для того что бы ее включить надо скачать библиотеки для работы с этими форматами. А затем указать в переменныx windows (Переменные среды, или через SET bat файла) пути к заголовочным файлам или к исходникам этих библиотек.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Для &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;bzip2&lt;/span&gt; создаем переменные:&lt;/div&gt;&lt;div&gt;&lt;b&gt;BZIP2_INCLUDE&lt;/b&gt; ="путь к заголовочным файлам (*.h)" если сборка из заголовочных файлов&lt;/div&gt;&lt;div&gt;&lt;b&gt;BZIP2_SOURCE&lt;/b&gt; ="путь к директории с bzip2" если сборка из исходников&lt;/div&gt;&lt;div&gt;&lt;div&gt;Для &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;zlib&lt;/span&gt;&amp;nbsp;создаем переменные:&lt;/div&gt;&lt;div&gt;&lt;b&gt;ZLIB_INCLUDE&lt;/b&gt; ="путь к заголовочным файлам (*.h)" если сборка из заголовочных файлов&lt;/div&gt;&lt;div&gt;&lt;b&gt;ZLIB_SOURCE&lt;/b&gt; ="путь к директории с zlib" если сборка из исходников&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Boost.MPI&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; font-weight: normal; line-height: 18px;"&gt;Скачиваем и устанавливаем одну из библиотек:&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Open MPI 1.0.x&lt;/li&gt;
&lt;li&gt;LAM/MPI 7.x&lt;/li&gt;
&lt;li&gt;MPICH 1.2.x&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;Открываем блокнотом файл&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;project-config.jam&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; и добавляем строку:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Courier New', Courier, monospace; font-size: small; line-height: normal;"&gt;&lt;b&gt;using mpi ;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 17px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: 'Courier New', Courier, monospace; font-size: small; line-height: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-weight: normal;"&gt;(обязательно пробел до ';')&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-2215111254247182809?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/Z4aLhQDe3rQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/2215111254247182809/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/01/boost-build-ms-vs-2010.html#comment-form" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/2215111254247182809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/2215111254247182809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/Z4aLhQDe3rQ/boost-build-ms-vs-2010.html" title="Boost Build в MS VS 2010" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/01/boost-build-ms-vs-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UDRnc5fSp7ImA9Wx9XFEw.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-4475552684741604196</id><published>2011-01-07T06:37:00.000-08:00</published><updated>2011-01-07T06:41:17.925-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-07T06:41:17.925-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="ВКонтакте" /><title>Виджет ВКонтакте “Мне нравится” в Blogger</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P7rw0g-LpjK24etoZmtBwkkHxTI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P7rw0g-LpjK24etoZmtBwkkHxTI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P7rw0g-LpjK24etoZmtBwkkHxTI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P7rw0g-LpjK24etoZmtBwkkHxTI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Этот пост посвящен тому, как добавить виджет ВКонтакте “Мне нравится” к постам в Blogger.&lt;br /&gt;
B итак первым шагом заходим на страницу ВКонтакте:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://vkontakte.ru/developers.php?o=-1&amp;amp;p=Like"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;http://vkontakte.ru/developers.php?o=-1&amp;amp;p=Like&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
И в форме “Подключение виджета к Вашему сайту” заполняем поля.&lt;br /&gt;
В поле “Cайт/приложение” должна быть выбрана опция “Подключить новый сайт”, когда заполните все поля нажимайте кнопку “Сохранить” и контакт вам сгенерирует JavaScript код, который мы и будем вставлять в наш шаблон Blogger-a.&lt;br /&gt;
Заходим в управление блогом и идем в “Дизайн -&amp;gt; Изменить HTML”, поставьте галочку “Расширить шаблоны виджета”.&lt;br /&gt;
Найдите в коде шаблона тег &lt;b&gt;&amp;lt;/head&amp;gt;&lt;/b&gt;  (используйте комбинации клавиш  для поиска текста в вашем браузере CTRL + F) и &lt;b&gt;ПЕРЕД&lt;/b&gt; ним вставьте часть кода, который сгенерировал контакт:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;!-- Put this script tag to the &amp;lt;head&amp;gt; of your page --&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;script type="text/javascript" src="http://userapi.com/js/api/openapi.js?20"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;VK.init({apiId:&lt;b&gt;YOU_API_ID&lt;/b&gt;,  onlyWidgets: true});&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;!-- Put this div tag to the place, where the Like block will be --&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Обратите внимание на &lt;b&gt;YOU_API_ID&lt;/b&gt;, вместо этой фразы у вас должен стоять Ваш apiId.&lt;br /&gt;
Дальше в шаблоне ищем такой вот кусок кода:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;div class='post-footer-line post-footer-line-2'&amp;gt;&amp;lt;span class='post-labels'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;b:if cond='data:post.labels'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;data:postLabelsLabel/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;b:loop values='data:post.labels' var='label'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;a expr:href='data:label.url' rel='tag'&amp;gt;&amp;lt;data:label.name/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;b:if cond='data:label.isLast != &amp;amp;quot;true&amp;amp;quot;'&amp;gt;,&amp;lt;/b:if&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/b:loop&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/b:if&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Легче найти по фразе &lt;b&gt;data:post.labels&lt;/b&gt;, &lt;b&gt;ПОСЛЕ &amp;lt;/span&amp;gt;&lt;/b&gt; мы вставляем вторую часть кода, который сгенерировал контакт, НО не в чистом виде, а мы его заключим в специальные теги блога:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;b:if cond='data:blog.pageType == “item”'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;!--  Здесь вставляем вторую часть кода --&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/b:if&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Должно получится такое:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;b:if cond='data:blog.pageType == “item”'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;!--  Здесь вставляем вторую часть кода --&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;div id='vk_like' style='margin-top:5px' &amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;script type='text/javascript'&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;VK.Widgets.Like(“vk_like”, {type:”mini”});&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/b:if&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
В &amp;lt;div id='vk_like' &amp;gt; я добавил атрибут style='margin-top:5px’ чтобы сделать маленький промежуток между ярлыками поста и кнопкой "Мне нравится".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-4475552684741604196?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/RQC_J4GHLWI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/4475552684741604196/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/01/blogger.html#comment-form" title="Комментарии: 12" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/4475552684741604196?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/4475552684741604196?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/RQC_J4GHLWI/blogger.html" title="Виджет ВКонтакте “Мне нравится” в Blogger" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>12</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/01/blogger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYMRX88fCp7ImA9Wx9XE0k.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-859541262753476911</id><published>2011-01-06T06:15:00.000-08:00</published><updated>2011-01-06T11:46:24.174-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T11:46:24.174-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ActionScript" /><title>AS  3.0 / HTTP / SOCKET часть 2</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c9RgNW60AENHMyV20PAPha7jZaA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c9RgNW60AENHMyV20PAPha7jZaA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c9RgNW60AENHMyV20PAPha7jZaA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c9RgNW60AENHMyV20PAPha7jZaA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Статья написана в качестве примера. Более подробное описание методов и событий классов смотрите в справке.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Создание HTTP запроса:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Нужные нам пакеты:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.events.Event;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.events.IOErrorEvent;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.net.URLLoader;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.net.URLLoaderDataFormat;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.net.URLRequest;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.net.URLVariables;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;import flash.net.URLRequestMethod;&lt;/span&gt;&lt;/blockquote&gt;и так для создания HTTP запроса нам надо:&lt;br /&gt;
1) Создать URLRequest&lt;br /&gt;
2) Создать URLLoader&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Создаем  URLRequest:&lt;/b&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;var request:URLRequest = new URLRequest(“http://somedomain.com/somescript.php”);&lt;/span&gt;&lt;/blockquote&gt;передадим на сервер параметры для обработки скриптом&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;request.data = new URLVariables();&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;request.data[‘param1’] = ‘value1’;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;request.data[‘param2’] = ‘value2’;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;request.data[‘param3’] = ‘value3’;&lt;/span&gt;&lt;/blockquote&gt;укажем, каким методом будем передавать POST или GET, мы передадим через GET&lt;br /&gt;
&lt;blockquote&gt;request.method = URLRequestMethod.GET;  (для POST будет URLRequestMethod.POST)&lt;/blockquote&gt;написанное аналогично запросу:&lt;br /&gt;
&lt;i&gt;http://somedomain.com/somescript.php?param1=value1&amp;amp;param2=value2&amp;amp;param3=value3&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;Создаем URLLoader:&lt;/b&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;var urlloader : URLLoader = new URLLoader();&lt;/span&gt;&lt;/blockquote&gt;установим тип данных, которые возвратит сервер двоичные (&lt;i&gt;URLLoaderDataFormat.BINARY&lt;/i&gt;) или текстовые (&lt;i&gt;URLLoaderDataFormat.TEXT&lt;/i&gt;)&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;urlloader.dataFormat = URLLoaderDataFormat.TEXT;&lt;/span&gt;&lt;/blockquote&gt;Теперь нам надо установить функции для 2 событий &lt;i&gt;Event.COMPLETE&lt;/i&gt; и &lt;i&gt;IOErrorEvent.IO_ERROR&lt;/i&gt; (все запросы происходят асинхронно, т. е. flash не ждет, пока закончится запрос и продолжает выполнение сценария ролика дальше).&lt;br /&gt;
&lt;br /&gt;
Событие &lt;i&gt;Event.COMPLETE&lt;/i&gt; вызывается, когда запрос был успешно произведен&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;urlloader.addEventListener(Event.COMPLETE, onRequestComplete);&lt;/span&gt;&lt;/blockquote&gt;напишем обработчик&lt;br /&gt;
&lt;blockquote&gt;function onRequestComplete(e:Event)&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;// Чтобы получить данные, которые прислал сервер нужно вызвать метод data класса&lt;/blockquote&gt;&lt;blockquote&gt;// URLLoader&lt;/blockquote&gt;&lt;blockquote&gt;var  data: * = (e.target as URLLoader).data;&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;Событие &lt;i&gt;IOErrorEvent.IO_ERROR&lt;/i&gt; вызывается, когда запрос не удался (к примеру, сайт не существует)&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;urlloader .addEventListener(IOErrorEvent.IO_ERROR, onRequestError);&lt;/span&gt;&lt;/blockquote&gt;А теперь отправляем сам запрос, не забудьте заключить его в try {} catch {} для обработки дополнительных ошибок:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;try&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;// Запрос&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;urlloader.load(request);&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;catch(err:Error)&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Ошибка&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;b&gt;PHP и сессия:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Что касается сохранения и возобновления сессии на стороне сервера, то я проверял в браузерах&lt;br /&gt;
Chrome и Interner Explorer сессия возобновлялась и сохранялась успешно. При создании *.exe из flash ролика все прекрасно работало тоже (flash использует Internet Explorer для хранения cookie).&lt;br /&gt;
НО я все-таки не доверяю Adobe :) и поэтому на стороне сервера у меня два скрипта один для авторизации, а другой собственно для работы. Скрипт авторизации возвращает в ответе id сессии,&lt;br /&gt;
А я уже затем дальше во всех запросах передаю в GET параметре&amp;nbsp;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: Verdana; font-size: 13px;"&gt;PHPSESSID&lt;/span&gt;&amp;nbsp;тот, самый id сессии, который вернул скрипт.&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;var request:URLRequest = new URLRequest(“http://somedomain.com/somescript.php?PHPSESSID=” + id_сессии);&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-859541262753476911?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/l3kVXV8Go2s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/859541262753476911/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/01/as-30-http-socket-2.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/859541262753476911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/859541262753476911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/l3kVXV8Go2s/as-30-http-socket-2.html" title="AS  3.0 / HTTP / SOCKET часть 2" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/01/as-30-http-socket-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGQX4_eip7ImA9Wx9XE0k.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-1418966485813173308</id><published>2011-01-04T05:27:00.000-08:00</published><updated>2011-01-06T11:45:20.042-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T11:45:20.042-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ActionScript" /><title>AS 3.0 / HTTP / SOCKET</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-1hZ2zh-_m4jJAkUZF8YZci88oQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-1hZ2zh-_m4jJAkUZF8YZci88oQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-1hZ2zh-_m4jJAkUZF8YZci88oQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-1hZ2zh-_m4jJAkUZF8YZci88oQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;ActionSctript 3.0 имеет множество средств для осуществления передачи данных между FLASH-роликом и внешними данными это к примеру поддержка HTTP протокола и сокетов, рассмотрим этот процесс подробнее.&lt;br /&gt;
Для того что бы иметь возможность подключаться к удаленному серверу из FLASH – ролика существует такое понятие как файл политики  crossdomain.xml.&lt;br /&gt;
Это специальный XML – файл, который содержит правила доступа к данным удаленного сервера. &lt;br /&gt;
Согласно документации от Adobe FLASH – плеер при подключении к HTTP по умолчанию ищет файл политики в корневом каталоге сервера, а при подключении к серверу на основе сокетов на 843 порту.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Файл политики имеет следующий формат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cross-domain-policy&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*.example.com" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*.example.org" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="adobe.com" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="192.0.34.166" /&amp;gt;  &lt;br /&gt;
&amp;lt;/cross-domain-policy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Между тегами &amp;lt;cross-domain-policy&amp;gt; идет перечисление ip адресов или доменов (* - в списке означает доступ для всех доменов) , которым предоставляется доступ к данным сервера. Если домена на с которого загружен SWF-файл нет в списке то доступ к данным сервера для данного ролика будет не возможен.&lt;br /&gt;
Файл политики для сокет серверов похож на файл политики для HTTP серверов. Все различие только в добавлении параметра to-ports где перечислены порты к которым разрешено подключение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cross-domain-policy&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*" to-ports="507" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*.example.com" to-ports="507,516" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="*.example.org" to-ports="516-523" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="adobe.com" to-ports="507,516-523" /&amp;gt;&lt;br /&gt;
&amp;lt;allow-access-from domain="192.0.34.166" to-ports="*" /&amp;gt;  &lt;br /&gt;
&amp;lt;/cross-domain-policy&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для загрузки или отправки данных через HTTP в ActionScrtipt 3.0 существуют два класса это &lt;b&gt;URLLoader&lt;/b&gt; и &lt;b&gt;URLVariables&lt;/b&gt;, а для работы с сокетами &lt;b&gt;Socket&lt;/b&gt; и &lt;b&gt;XMLSocket&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
О &lt;b&gt;URLLoader&lt;/b&gt; можно почитать тут:&lt;br /&gt;
&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/URLLoader.html"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/URLLoader.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
О &lt;b&gt;URLVariables&lt;/b&gt; читаем тут:&lt;br /&gt;
&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/URLVariables.html"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/URLVariables.html&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;cross-domain-policy&gt;&lt;br /&gt;
&lt;/cross-domain-policy&gt;&lt;br /&gt;
&lt;cross-domain-policy&gt;&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/URLVariables.html"&gt;&lt;/a&gt; О &lt;b&gt;Socket&lt;/b&gt; клик сюды:&lt;br /&gt;
&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/Socket.html"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/Socket.html&lt;/span&gt;&lt;/a&gt;&lt;/cross-domain-policy&gt;&lt;br /&gt;
&lt;cross-domain-policy&gt;&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/Socket.html"&gt;&lt;/a&gt;&lt;br /&gt;
О &lt;b&gt;XMLSocket&lt;/b&gt; тут:&lt;br /&gt;
&lt;a href="http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/XMLSocket.html"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/net/XMLSocket.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/cross-domain-policy&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-1418966485813173308?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/XLlqjxAWbEo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/1418966485813173308/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2011/01/as-30-http-socket.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/1418966485813173308?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/1418966485813173308?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/XLlqjxAWbEo/as-30-http-socket.html" title="AS 3.0 / HTTP / SOCKET" /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.gamecoder.ru/2011/01/as-30-http-socket.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQBQ3o8fSp7ImA9Wx9QFkw.&quot;"><id>tag:blogger.com,1999:blog-7882034532050683895.post-3004985513329278590</id><published>2010-12-29T02:25:00.001-08:00</published><updated>2010-12-29T02:25:52.475-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-29T02:25:52.475-08:00</app:edited><title>Первый нах.</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mi-D9I67NOvLiczOxiXpEofmwIs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mi-D9I67NOvLiczOxiXpEofmwIs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mi-D9I67NOvLiczOxiXpEofmwIs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mi-D9I67NOvLiczOxiXpEofmwIs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Первое сообщение в новом блоге ^_^. Да да да это не первый блог, и во всех других блогах дальше первой записи так и не ушло :D Но мне же все таки нужно место где бы я описывал все мои мысли, заметки и другие соображения... Как сказал бы Гагарин "Поехали!".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7882034532050683895-3004985513329278590?l=www.gamecoder.ru' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gamecoder/~4/BIa1EOvbkkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.gamecoder.ru/feeds/3004985513329278590/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.gamecoder.ru/2010/12/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/3004985513329278590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7882034532050683895/posts/default/3004985513329278590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gamecoder/~3/BIa1EOvbkkc/blog-post.html" title="Первый нах." /><author><name>Sergey Bolotaev</name><uri>https://profiles.google.com/101082671078689094974</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-eu0JXF1EquM/AAAAAAAAAAI/AAAAAAAAAAA/8kIJGjSNZsc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.gamecoder.ru/2010/12/blog-post.html</feedburner:origLink></entry></feed>

