<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775147</guid>
        <pubDate>Fri, 27 Jul 2018 01:08:32 +0000</pubDate>
        <title>Сбой буфера глубины?</title>
        <link>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775147</link>
        <description><![CDATA[ksvsvk: Отсутствующая грань колонны должна быть черной.]]></description>
        <author>ksvsvk</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775067</guid>
        <pubDate>Thu, 26 Jul 2018 09:45:11 +0000</pubDate>
        <title>Сбой буфера глубины?</title>
        <link>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775067</link>
        <description><![CDATA[OpenGL: Не совсем понял проблему. Что ожидается на втором рисунке? Отсутствие белой задней (по отношению к камере) грани паралелепипеда (т.е. её окраска в чёрный цвет)?]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775011</guid>
        <pubDate>Thu, 26 Jul 2018 05:47:30 +0000</pubDate>
        <title>Сбой буфера глубины?</title>
        <link>https://forum.sources.ru/index.php?showtopic=413283&amp;view=findpost&amp;p=3775011</link>
        <description><![CDATA[ksvsvk: Из-за сбоя предыдущей темы, повторяю.<br>
<br>
Есть процедура, строящая помещение с зеркалами. Для краткости освещение и текстуры я из нее убрал, а из 6-ти поверхностей оставил одну, т.к. их построения однотипны.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TGLForm.GenList;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;procedure CreateMirror(Level: Byte);</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;i, j: GLUint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pl: &nbsp; array [0..3] of GLDouble;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$REGION &#39;code&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 0 to High(Areas) do with Areas[i] do</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j := 0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Level &#60;= Surfaces[j].Mirror then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glPushMatrix;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case j of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Координаты отражений&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;0: &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glScalef(1, 1, -1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glTranslatef(0, 0, -2 * FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CreateMirror(Level + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glClear(GL_STENCIL_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glStencilFunc(GL_NEVER, 1, 255);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case j of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;0: &nbsp;{$REGION &#39;Зеркальный пол&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, &nbsp;FirstNode.Y, &nbsp;FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, &nbsp;SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, FirstNode.Y, &nbsp;FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Pl[0] := 0; Pl[1] := 0; Pl[2] := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Pl[3] := FirstNode.Z;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glClipPlane(GL_CLIP_PLANE0, @Pl);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glEnable(GL_CLIP_PLANE0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glCallList(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glDisable(GL_CLIP_PLANE0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;glPopMatrix;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;{$REGION &#39;var&#39;}</div><div class="code_line">&nbsp;&nbsp;i, j, k: &nbsp; &nbsp;GLUint;</div><div class="code_line">&nbsp;&nbsp;C: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TColor;</div><div class="code_line">&nbsp;&nbsp;Colors: &nbsp; &nbsp; array [0..3] of GLFloat;</div><div class="code_line">&nbsp;&nbsp;PosLamp: &nbsp; &nbsp;array [0..3] of GLFloat;</div><div class="code_line">&nbsp;&nbsp;DirLamp: &nbsp; &nbsp;array [0..2] of GLFloat;</div><div class="code_line">&nbsp;&nbsp;Coord: &nbsp; &nbsp; &nbsp;TDoubleRect;</div><div class="code_line">&nbsp;&nbsp;Surf: array of array [0..1] of Cardinal;</div><div class="code_line">&nbsp;&nbsp;{$ENDREGION}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;{$REGION &#39;code&#39;}</div><div class="code_line">&nbsp;&nbsp;glDeleteLists(1, 3);</div><div class="code_line">&nbsp;&nbsp;MaxCount.X := 0; MaxCount.Y := 0; MaxCount.Z := 0;</div><div class="code_line">&nbsp;&nbsp;MinCount.X := 0; MinCount.Y := 0; MinCount.Z := 0;</div><div class="code_line">&nbsp;&nbsp;glNewList(1, GL_COMPILE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$REGION &#39;Основной объем&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;Colors[3] := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLineWidth(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$REGION &#39;Глубина зеркал&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;glDrawBuffer(GL_NONE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for k := Low(Areas) to High(Areas) do with Areas[k] do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Surfaces[0].Mirror &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if MinCount.Z &#60; Surfaces[0].Mirror</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then MinCount.Z := Surfaces[0].Mirror;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, &nbsp;FirstNode.Y, &nbsp;FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, FirstNode.Y, &nbsp;FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, &nbsp;SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glEnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp;for k := Low(Areas) to High(Areas) do with Areas[k] do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{$REGION &#39;Пол&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glDrawBuffer(GL_NONE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Генерация карты перекрытия&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glStencilFunc(GL_LESS, 1, 255);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glDisable(GL_DEPTH_TEST);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Анулирование зоны перекрытия&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, FirstNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, FirstNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(SecondNode.X, SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X, SecondNode.Y, FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glStencilFunc(GL_EQUAL, 1, 255);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glStencilOp(GL_KEEP, GL_INCR, GL_INCR);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for i := Low(Areas) to High(Areas) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (i &#60;&#62; k)and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (((Areas[i].FirstNode.Z &#60; FirstNode.Z)and(Areas[i].SecondNode.Z &#62; FirstNode.Z)or</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Areas[i].SecondNode.Z = FirstNode.Z)or(Areas[i].FirstNode.Z = FirstNode.Z)and(i &#62; k))and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Areas[i].SecondNode.X &#62;= FirstNode.X)and(Areas[i].FirstNode.X &#60;= SecondNode.X)and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (Areas[i].SecondNode.Y &#62;= FirstNode.Y)and(Areas[i].FirstNode.Y &#60;= SecondNode.Y))then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(Areas[i].FirstNode.X, Areas[i].FirstNode.Y, Areas[k].FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(Areas[i].SecondNode.X, Areas[i].FirstNode.Y, Areas[k].FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(Areas[i].SecondNode.X, Areas[i].SecondNode.Y, Areas[k].FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(Areas[i].FirstNode.X, Areas[i].SecondNode.Y, Areas[k].FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnable(GL_DEPTH_TEST);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glDrawBuffer(GL_BACK);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Выбор цвета&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Цвет&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for j := 0 to 3 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C := Surfaces[0].Colors[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Colors[0] := (C and 255)/ 255;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C := C shr 8;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Colors[1] := (C and 255)/ 255;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C := C shr 8;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Colors[2] := (C and 255)/ 255;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case j of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0: glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, @Colors);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1: glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, @Colors);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2: glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, @Colors);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3: glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, @Colors);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if Surfaces[0].Mirror = 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$REGION &#39;Построение полигонов&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Coord.Left &nbsp; &nbsp;:= Surfaces[0].Left &nbsp; / Images[Surfaces[0].Tex - 1].Width;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Coord.Rigth &nbsp; := Surfaces[0].Right &nbsp;/ Images[Surfaces[0].Tex - 1].Width;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Coord.Bottom &nbsp;:= Surfaces[0].Top &nbsp; &nbsp;/ Images[Surfaces[0].Tex - 1].Height;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Coord.Top &nbsp; &nbsp; := Surfaces[0].Bottom / Images[Surfaces[0].Tex - 1].Height;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glNormal3f(0.0, 0.0, 1.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for i := 0 to Count.X - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for j := 0 to Count.Y - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X + i * Abs(FirstNode.X - SecondNode.X)/Count.X,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Y + j * Abs(FirstNode.Y - SecondNode.Y)/Count.Y,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X +(i + 1)* Abs(FirstNode.X - SecondNode.X)/Count.X,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Y + j * Abs(FirstNode.Y - SecondNode.Y)/Count.Y,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X +(i + 1)* Abs(FirstNode.X - SecondNode.X)/Count.X,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Y +(j + 1)* Abs(FirstNode.Y - SecondNode.Y)/Count.Y,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(FirstNode.X + i * Abs(FirstNode.X - SecondNode.X)/Count.X,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Y +(j + 1)* Abs(FirstNode.Y - SecondNode.Y)/Count.Y,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FirstNode.Z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp;glEndList;</div><div class="code_line">&nbsp;&nbsp;glNewList(2, GL_COMPILE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$REGION &#39;Зеркальные поверхности&#39;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;glClearStencil(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CreateMirror(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glClearStencil(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glClear(GL_STENCIL_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glCallList(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$ENDREGION}</div><div class="code_line">&nbsp;&nbsp;glEndList;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
</div></div><br>
<br>
В ней реализован следующий подход:<br>
<br>
1. Перед построением &quot;физического мира&quot; в списке glNewList(1) в буфер глубины прописываются поверхности зеркал. Это позволяет осечь все, что находится за зеркалом, оставив объекты между зеркалом и наблюдателем. Поверхности зеркал при этом выглядят как черные прямоугольники:<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><span class="b-attach" data-size="70700" data-hits="562" data-attach-id="58978" data-attach-post-id="3775011">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3775011&amp;attach_id=58978' title='Скачать файл' target='_blank'>1.png</a> (, : 562)
		</span></div></div><br>
<br>
Далее вызывается рекурсивная процедура CreateMirror, которая определяет положение отражения, переворачивает соответствующую координату, отсекает ту часть &quot;реального мира&quot;, которая расположена за зеркалом, и вызывает glCallList(1), в котором, как видно на предыдущем изображении, поверхность зеркала, попавшая в отражение, должна быть черной. Но вот в отражении эта &quot;черная заливка&quot; отсутствует:<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><span class="b-attach" data-size="68987" data-hits="591" data-attach-id="58979" data-attach-post-id="3775011">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3775011&amp;attach_id=58979' title='Скачать файл' target='_blank'>2.png</a> (, : 591)
		</span></div></div><br>
<br>
Почему? Как преобразование <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;glScalef(1, 1, -1);</div><div class="code_line">&nbsp;&nbsp;glTranslatef(0, 0, -2 * FirstNode.Z);</div></ol></div></div></div></div><br>
<br>
повлияло на буфер глубины?<br>
<br>
PS не получилось вставить изображения, только ссылки на них  :(]]></description>
        <author>ksvsvk</author>
        <category>Программирование графики</category>
      </item>
	
      </channel>
      </rss>
	