<?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=311741&amp;view=findpost&amp;p=2700430</guid>
        <pubDate>Sat, 18 Sep 2010 17:53:03 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2700430</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2700146'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-09-18T15:33:11+04:00">18.09.10, 11:33</time></span><div class='quote '>т.е. если понимать дословно то количество имен в стеке = 0</div></div><br>
Именно так. Можешь кстати трассировать по шагам само рисование, наблюдая при этом за буфером, чтобы узнать, когда в него записываются эти данные.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2700146'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-09-18T11:33:11+00:00">18.09.10, 11:33</time></span><div class='quote '>Тогда в моем случае надо пропускать первые ([0][1][2]) значения? </div></div><br>
Зачем? Я ведь сказал что они означают. Поэтому пока не кончились записи берешь количество объектов, пропускаешь z, идешь по объектам. Просто и универсально.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2700146'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-09-18T11:33:11+00:00">18.09.10, 11:33</time></span><div class='quote '>Если значения ([0][1][2]) пропускать (как информацию о предидущем попадании) тогда вообще – засада, куда ни щелкать – принимаеся решение, что щелкнули по кубу&#33;</div></div><br>
Странно. В части кода из твоего прошлого сообщения вроде все верно, должно работать.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2700146'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-09-18T11:33:11+00:00">18.09.10, 11:33</time></span><div class='quote '>И еще такой вопрос, как правильнее производить выбор тех же самых вершин:<br>
</div></div><br>
Если нужен выбор вершин, то первый способ, т.к. количество имен ограничено.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2700146</guid>
        <pubDate>Sat, 18 Sep 2010 11:33:11 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2700146</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Ну вот хоть убейте… <br>
Не могу догнать…  :( <br>
Всякий раз при нажатии левой кнопки мышки вызывается этот метод (FindObject(int x, int y)) который в свою очередь вызывает отрисовку сцены в буфер:<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">void CObjectContainer::Draw()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;glInitNames(); &nbsp;// уничтожаем все OpenGL имена (ID)</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPushName(0); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_it _First &nbsp;= m_Objs.begin();</div><div class="code_line">&nbsp;&nbsp; &nbsp;_it _Last &nbsp; = m_Objs.end();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(; _First != _Last; ++_First)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glLoadName((*_First)-&#62;GetID());</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (*_First)-&#62;Draw();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
И в котром производится очистка имен. И добавляется сначала нулевой, затем с именем 101 (в моем примере). Тогда как понять &lt;количество имен в стеке на момент регистрации попадания&gt;? Т.е. это первое значение = 0… т.е. если понимать дословно то количество имен в стеке = 0… ну не понимаю я… Это первый вопрос, а второй – не зависимо от того куда я щелкаю мышкой (или в мой куб с именем 101 или в пустоту) значения в этом стеке одни и те же кроме значений глубин. <br>
<br>
Зачем тогда устанавливать: <br>
<br>
gluPickMatrix(x, viewportCoords[3] - y, 2, 2, viewportCoords);<br>
<br>
Если щелкая в разные места сцены получаем 2 объекта?<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">//...</div><div class="code_line">if (objectsFound &#62; 0) // objectsFound Всегда равно 2!</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; //...</div><div class="code_line">}</div></ol></div></div></div></div><br>
 <br>
Т.е. даже если объект не попал в это окошко (нажали в произвольном месте, а не на куб с именем 101) то в буфере он все же присутствует&#33; (значения [3]-[6]) меняются лишь его значения в плях [4][5].<br>
<br>
Тогда в моем случае надо пропускать первые ([0][1][2]) значения? И работать со стальными? И именно по значению глубины делать выбор (находить имя объекта) тогда я не понимаю с чем сравнивать? Если у меня один объект с именем 101 с чем сравнивать его значения глубины? Или всетаки их сравнивать со значениями [1][2]?<br>
<br>
Если значения  ([0][1][2]) пропускать (как информацию о предидущем попадании) тогда вообще – засада, куда ни щелкать – принимаеся решение, что щелкнули по кубу&#33; Но ведь это не так&#33; Если у других все работает – значит где-то ошибаюсь я, или просто не догоняю как работать с этим буфером…  :) <br>
<br>
И еще такой вопрос, как правильнее производить выбор тех же самых вершин:<br>
<br>
Вариант 1:<br>
Переводить координаты мыши, а дальше проход по всем вершинам объектов и сравнивать их и принимать решение о выбранной, короче говоря – считать все математикой.<br>
<br>
Вариант 2:<br>
Вершинам каждого объекта присваивать имена (glLoadName())и производить выбор при помощи OpenGL – буфера выбора. (Но тогда, наверное, прийдется в каждой вершине рисовоть OpenGL точку.)<br>
<br>
Короче говоря, поставил перед собой задачу: необходимо реализовать выбор объетов, выбор грани объета, выбор ребер объекта, выбор вершин объекта.<br>
И хотелось бы какого то универсального способа применимого ко всему. Возможно ли такое? Или выбор объектов осуществлять, к примеру, буфером выбора, а вершины – по первому варианту (математикой)?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2697164</guid>
        <pubDate>Wed, 15 Sep 2010 07:37:03 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2697164</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2696951'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-09-14T19:23:47+00:00">14.09.10, 19:23</time></span><div class='quote '>Все вроде как работает, но везде написанно, что:<br>
Первое поле - количество объектов под курсором на момент нажатия. <br>
Второе поле - минимальная Z глубина объекта (экранная Z координата). <br>
Третье поле - максимальная Z глубина объекта (экранная Z координата). <br>
Четвертое поле - идентификатор объекта.</div></div><br>
Не совсем так. <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>www.opengl.org</span><div class='quote '>The hit record consists of the number of names in the name stack at the time of the event, followed by the minimum and maximum depth values of all vertices that hit since the previous event, followed by the name stack contents, bottom name first.</div></div><br>
То есть первое значение содержит количество имен в стеке на момент регистрации попадания, дальше z-depth а затем сам стек. Получается, в приведенном тобой примере все верно - сначала идет инфо о том, что 0 имен, затем z, а затем стек в количестве 0 записей :D. Ну и дальше аналогично инфа о втором попадании. По-идее это может происходить если ты рисуешь что-либо в момент когда еще не загружено ни одно имя - попадания в этом случае тоже регистрируются как обычно.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696951</guid>
        <pubDate>Tue, 14 Sep 2010 19:23:47 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696951</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Короче говоря код передернут  :) <br>
<br>
Все вроде как работает, но везде написанно, что:<br>
Первое поле - количество объектов под курсором на момент нажатия. <br>
Второе поле - минимальная Z глубина объекта (экранная Z координата). <br>
Третье поле - максимальная Z глубина объекта (экранная Z координата). <br>
Четвертое поле - идентификатор объекта.<br>
Поэтому размер буфера задается так: (4 * КоличествоОбъектов).<br>
Хорошо… Но почему я получаю такие результаты как на картинке? <br>
[0] = 0<br>
[1] = 4286679300<br>
[2] = 4286928132<br>
[3] = 1<br>
[4] = 101238216<br>
[5] = 4286845700<br>
[6] = 101		// вот ID&#33;<br>
[7] = 0<br>
[8]…[31] = 0<br>
И соответственно приведенные в примерах функции дают неправильный результат т.е. они возвращают [7] = 0. Если считать с <br>
[3] = 1 		// Первое поле - количество объектов под курсором на момент нажатия. <br>
[4] = 101238216	// Второе поле - минимальная Z глубина объекта (экранная Z координата). <br>
[5] = 4286845700	// Третье поле - максимальная Z глубина объекта (экранная Z координата).<br>
[6] = 101		// Четвертое поле - идентификатор объекта<br>
<br>
То все правильно, но опять же что то уже не так… откуда берутся значения [0]…[2]?<br>
Или это происходит при glPushName(0); ?<br>
<br>
<span class="b-attach" data-size="105423" data-hits="608" data-attach-id="2061" data-attach-post-id="2696951">
			<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=2696951&amp;attach_id=2061' title='Скачать файл' target='_blank'>Pic.jpg</a> (, : 608)
		</span>]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696949</guid>
        <pubDate>Tue, 14 Sep 2010 19:21:14 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696949</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: За glOrtho() - спасибо&#33;<br>
<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">void CObjectContainer::Draw()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; glInitNames(); // уничтожаем все OpenGL имена (ID)</div><div class="code_line">&nbsp;&nbsp; &nbsp; glPushName(0); &nbsp; &nbsp; // вставляем «нулевой» объект</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_it _First &nbsp;= m_Objs.begin();</div><div class="code_line">&nbsp;&nbsp; &nbsp;_it _Last &nbsp; = m_Objs.end();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(; _First != _Last; ++_First)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLoadName((*_First)-&#62;GetID()); // устанавливаем имя (рисуется только один объект с ID = 101</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (*_First)-&#62;Draw(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // выводим</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><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">DWORD CObjectSelector::FindObject(int x, int y)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int objectsFound = 0; &nbsp; // Общее количество кликнутых обьектов</div><div class="code_line">&nbsp;&nbsp; &nbsp;int viewportCoords[4] = {0}; &nbsp; &nbsp;// Массив для хранения экранных координат</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Переменная для хранения ID обьектов, на которые мы кликнули.</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Мы делаем массив в 32 элемента, т.к. OpenGL также сохраняет другую</div><div class="code_line">&nbsp;&nbsp; &nbsp;// информацию, которая нам сейчас не нужна. Для каждого обьекта нужно</div><div class="code_line">&nbsp;&nbsp; &nbsp;// 4 слота.</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned int selectBuffer[32] = {0};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// glSelectBuffer регистрирует массив как буфер выбора обьектов. Первый параметр - размер</div><div class="code_line">&nbsp;&nbsp; &nbsp;// массива. Второй - сам массив для хранения информации.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glSelectBuffer(32, selectBuffer); &nbsp; // Регистрируем буфер для хранения выбранных обьектов</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Эта функция возвращает информацию о многих вещах в OpenGL. Мы передаём GL_VIEWPOR,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// чтобы получить координаты экрана. Функция сохранит их в переданном вторым параметром массиве</div><div class="code_line">&nbsp;&nbsp; &nbsp;// в виде top,left,bottom,right.</div><div class="code_line">&nbsp;&nbsp; &nbsp;glGetIntegerv(GL_VIEWPORT, viewportCoords); // Получаем текущие координаты экрана</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Теперь выходим из матрицы GL_MODELVIEW и переходим в матрицу GL_PROJECTION.</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Это даёт возможность использовать X и Y координаты вместо 3D.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_PROJECTION); &nbsp; &nbsp;// Переходим в матрицу проекции</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPushMatrix(); &nbsp; &nbsp; &nbsp; &nbsp; // Переходим в новые экранные координаты</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Эта функция делает так, что фреймбуфер не изменяется при рендере в него, вместо этого</div><div class="code_line">&nbsp;&nbsp; &nbsp;// происходит запись имён (ID) примитивов, которые были бы отрисованы при режиме</div><div class="code_line">&nbsp;&nbsp; &nbsp;// GL_RENDER. Информация помещается в selectBuffer.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRenderMode(GL_SELECT); &nbsp; &nbsp;// Позволяет рендерить обьекты без изменения фреймбуфера</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLoadIdentity(); &nbsp; &nbsp; &nbsp; // Сбросим матрицу проекции</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// gluPickMatrix позволяет создавать матрицу проекции около нашего курсора. Проще говоря,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// рендерится только область, которую мы укажем (вокруг курсора). Если обьект рендерится</div><div class="code_line">&nbsp;&nbsp; &nbsp;// в этой области, его ID сохраняется (Вот он, смысл всей функции).</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Первые 2 параметра - X и Y координаты начала, следующие 2 - ширина и высота области</div><div class="code_line">&nbsp;&nbsp; &nbsp;// отрисовки. Последний параметр - экранные координаты. Заметьте, мы вычитаем &#39;y&#39; из</div><div class="code_line">&nbsp;&nbsp; &nbsp;// НИЖНЕЙ экранной координаты. Мы сделали это, чтобы перевернуть Y координаты. </div><div class="code_line">&nbsp;&nbsp; &nbsp;// В 3д-пространстве нулевые y-координаты начинаются внизу, а в экранных координатах</div><div class="code_line">&nbsp;&nbsp; &nbsp;// 0 по y находится вверху. Также передаём регион 2 на 2 пиксела для поиска в нём обьекта. </div><div class="code_line">&nbsp;&nbsp; &nbsp;// Это может быть изменено как вам удобнее.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;gluPickMatrix(x, viewportCoords[3] - y, 2, 2, viewportCoords);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Далее просто вызываем нашу нормальную функцию gluPerspective, точно так же, как</div><div class="code_line">&nbsp;&nbsp; &nbsp;// делали при инициализации.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_pViewManager-&#62;RecoveryView(); </div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_MODELVIEW); // Возвращаемся в матрицу GL_MODELVIEW</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m_pViewManager-&#62;Update();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//RenderScene(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Если мы вернёмся в нормальный режим рендеринга из режима выбора, glRenderMode</div><div class="code_line">&nbsp;&nbsp; &nbsp;// возвратит число обьектов, найденных в указанном регионе (в gluPickMatrix()).</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;objectsFound = glRenderMode(GL_RENDER); // Вернемся в режим отрисовки и получим число обьектов</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_PROJECTION); &nbsp; &nbsp;// Вернемся в привычную матрицу проекции</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopMatrix(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Выходим из матрицы</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_MODELVIEW); &nbsp; &nbsp; // Вернемся в матрицу GL_MODELVIEW</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// УФФ! Это было немного сложно. Теперь нам нужно выяснить ID выбранных обьектов.</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Если они есть - objectsFound должно быть как минимум 1.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (objectsFound &#62; 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Если мы нашли более 1 обьекта, нужно проверить значения глубины всех</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// выбоанных обьектов. Обьект с МЕНЬШИМ значением глубины - ближайший</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// к нам обьект, значит и щелкнули мы на него. В зависимости от того, что</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// мы программируем, нам могут понадобится и ВСЕ выбранные обьекты (если</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// некоторые были за ближайшим), но в этом уроке мы позаботимся только о</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// переднем обьекте. Итак, как нам получить значение глубины? Оно сохранено</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// в буфере выбора (selectionBuffer). Для каждого обьекта в нем 4 значения.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Первое - &quot;число имен в массиве имен на момент события, далее минимум и</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// максимум значений глубины для всех вершин, которые были выбраны при прошлом</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// событии, далее по содержимое массива имен, нижнее имя - первое;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// (&quot;the number of names in the name stack at the time of the event, followed</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// by the minimum and maximum depth values of all vertices that hit since the</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// previous event, then followed by the name stack contents, bottom name first.&quot;) - MSDN.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Единстве, что нам нужно - минимальное значение глубины (второе значение) и</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ID обьекта, переданного в glLoadName() (четвертое значение).</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Итак, [0-3] - данные первого обьекта, [4-7] - второго, и т.д...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Будте осторожны, так как если вы отображаете на экране 2Д текст, он будет </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// всегда находится как ближайший обьект. Так что убедитесь, что отключили вывод</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// текста при рендеринге в режиме GL_SELECT. Я для этого использую флаг, передаваемый</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// в RenderScene(). Итак, получим обьект с минимальной глубиной!</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// При старте установим ближайшую глубину как глубину первого обьекта.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// 1 - это минимальное Z-значение первого обьекта.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;unsigned int lowestDepth = selectBuffer[1];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Установим выбранный обьект как первый при старте.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// 3 - ID первого обьекта, переданный в glLoadName().</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int selectedObject = selectBuffer[3];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Проходим через все найденные обьекты, начиная со второго (значения первого</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// мы присвоили изначально).</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for(int i = 1; i &#60; objectsFound; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Проверяем, не ниже ли значение глубины текущего обьекта, чем предидущего.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Заметьте, мы умножаем i на 4 (4 значения на каждый обьект) и прибавляем 1 для глубины.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(selectBuffer[(i * 4) + 1] &#60; lowestDepth)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Установим новое низшее значение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lowestDepth = selectBuffer[(i * 4) + 1];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Установим текущий ID обьекта</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;selectedObject = selectBuffer[(i * 4) + 3];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Вернем выбранный обьект</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return selectedObject;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Если не щелкнули ни на 1 обьект, вернём 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696302</guid>
        <pubDate>Mon, 13 Sep 2010 18:49:43 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696302</link>
        <description><![CDATA[OpenGL: Просто задавай размеры паралелепипеда в параметрах glOrtho пропорциональными размеру окна:<br><br> glOrtho( -m_szView.cx*fSideAspect, m_szView.cx*fSideAspect, -m_szView.cy*fSideAspect, m_szView.cy*fSideAspect, - 1000, 1000)<br><br>Ну и еще нужно не забыть про glViewport(0,0,_szView.cx,_szView.cy)]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696030</guid>
        <pubDate>Mon, 13 Sep 2010 13:07:53 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2696030</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Все дальше и дальше… Вот с проекцией вроде как разобрался все крутится, вертится, масштабируется. Но возник вопрос такого плана необходимо масштабировать при виде сверху в glOrtho()… Вот и приехали данный способ уже не работает…<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">//…</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_PROJECTION);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLoadIdentity();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;float fSideAspect = abs(m_ViewParams.Position.z); // m_ViewParams.Position.z - изменяется при движении колеса мыши (масштаб)</div><div class="code_line">&nbsp;&nbsp; &nbsp;POINT ptVieport;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// m_szView - размеры окна</div><div class="code_line">&nbsp;&nbsp; &nbsp;int nMinSide = min(m_szView.cx, m_szView.cy);</div><div class="code_line">&nbsp;&nbsp; &nbsp;int nMaxSide = max(m_szView.cx, m_szView.cy);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; if(m_szView.cy &#62; m_szView.cx)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ptVieport.x = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ptVieport.y = m_szView.cy / 2 - m_szView.cx / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ptVieport.x = m_szView.cx / 2 - m_szView.cy / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ptVieport.y = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glViewport(ptVieport.x, ptVieport.y, nMinSide, nMinSide);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;float cx2 = fSideAspect / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;float cy2 = fSideAspect / 2;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glOrtho( -cx2, cx2, -cy2, cy2, - 1000, 1000);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_MODELVIEW);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLoadIdentity();</div><div class="code_line">&nbsp;</div><div class="code_line">//…</div></ol></div></div></div></div><br>
<br>
Но получается что Vieport всегда квадратный со стороной равной меньшему размеру окна, и когда окно больше по Height то в центре окна отрисовка проходит в небольшом квадрате со стороной Width и наоборот, а возможно ли как-то масштабировать при режиме glOrtho() без изменения размеров Vieport – а (Вращать не надо т.к. используется только вид сверху или сбоку)? И как это сделать чтобы в режиме glOrtho сцена заполняла все окно, да же если оно ну очень непропорциональное?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694343</guid>
        <pubDate>Sat, 11 Sep 2010 06:18:52 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694343</link>
        <description><![CDATA[OpenGL: Пусть у тебя есть несколько точек. Тогда одна грань будет, например, из 1, 2, 3 точки, вторая - 1,3,4 и т.д.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694271</guid>
        <pubDate>Fri, 10 Sep 2010 21:29:27 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694271</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Не совсем понял с ссылками я пока реализовал так: Объект это вектор граней, грань это вектор точек т.е. вершин грани, в класс объект добавил метод вставки грани, а в класс грани метод вставки точки (x, y, z) т.е. вершины грани, но не объекта. Так у кого (какого класса) должны быть ссылки? Пока у меня получается действительно так, что точки при создании объекта (того же куба) дублируются…<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">CParallelepiped::CParallelepiped(POINT3D pos, float cx, float cy, float cz)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//....</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;float cx2 = cx/2; float cy2 = cy/2; float cz2 = cz/2;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// создание вершин (точек)</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v0(pos.x - cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v1(pos.x - cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v2(pos.x - cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v3(pos.x - cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v4(pos.x + cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v5(pos.x + cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v6(pos.x + cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v7(pos.x + cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v8(pos.x - cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v9(pos.x + cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v10(pos.x + cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v11(pos.x - cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v12(pos.x - cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v13(pos.x - cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v14(pos.x + cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v15(pos.x + cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v16(pos.x - cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v17(pos.x - cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v18(pos.x + cx2, pos.y - cy2, pos.z + cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v19(pos.x + cx2, pos.y + cy2, pos.z + cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v20(pos.x - cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v21(pos.x + cx2, pos.y + cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v22(pos.x + cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;CVertex v23(pos.x - cx2, pos.y - cy2, pos.z - cz2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CFace f0, f1, f2, f3, f4, f5; // грани</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// вставляем вершины (3D точки) в грани (они живут в векторе грани) std::vector&#60;CVertex&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;f0.InsertVertex(v0); &nbsp; &nbsp;f0.InsertVertex(v1); &nbsp; &nbsp;f0.InsertVertex(v2); &nbsp; &nbsp;f0.InsertVertex(v3);</div><div class="code_line">&nbsp;&nbsp; &nbsp;f1.InsertVertex(v4); &nbsp; &nbsp;f1.InsertVertex(v5); &nbsp; &nbsp;f1.InsertVertex(v6); &nbsp; &nbsp;f1.InsertVertex(v7);</div><div class="code_line">&nbsp;&nbsp; &nbsp;f2.InsertVertex(v8); &nbsp; &nbsp;f2.InsertVertex(v9); &nbsp; &nbsp;f2.InsertVertex(v10); &nbsp; f2.InsertVertex(v11);</div><div class="code_line">&nbsp;&nbsp; &nbsp;f3.InsertVertex(v12); &nbsp; f3.InsertVertex(v13); &nbsp; f3.InsertVertex(v14); &nbsp; f3.InsertVertex(v15);</div><div class="code_line">&nbsp;&nbsp; &nbsp;f4.InsertVertex(v16); &nbsp; f4.InsertVertex(v17); &nbsp; f4.InsertVertex(v18); &nbsp; f4.InsertVertex(v19);</div><div class="code_line">&nbsp;&nbsp; &nbsp;f5.InsertVertex(v20); &nbsp; f5.InsertVertex(v21); &nbsp; f5.InsertVertex(v22); &nbsp; f5.InsertVertex(v23);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// вставляем грани в объект (они живут в векторе объекта) std::vector&#60;CFace&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f0); </div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f3);</div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f4);</div><div class="code_line">&nbsp;&nbsp; &nbsp;InsertFace(f5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//....</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694199</guid>
        <pubDate>Fri, 10 Sep 2010 18:09:18 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694199</link>
        <description><![CDATA[OpenGL: Разумеется, лучше хранить не сами вершины, а ссылки на них - зачем дублировать лишние данные?]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694187</guid>
        <pubDate>Fri, 10 Sep 2010 17:37:30 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2694187</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: To OpenGL: <br>Нет, Вы меня неправильно поняли, я имел виду, что точек с одинаковыми координатами образуется несколько. Т.е. если я правильно понял, предложенную  Вами объектную модель то Объект это совокупность граней, грани - совокупность точек (вершин грани, но не куба). Тогда, допустим,  куб, состоит из 4-х граней каждая из которых содержит по 4-е точки, следовательно в вершине куба сходятся 3 грани (которые видимы), но точек будет 3-и (для каждой грани образующих вершину, и которые будут иметь абсолютно одинаковые координаты). Так вот, пользователь хочет отредактировать одну вершину (вершину куба) -&gt; проходим по всем граням -&gt; у каждой грани проходим по ее точкам -&gt; делаем тест попадания (можно с каким-либо небольшим отклонением) так вот точек которые пройдут тест окажется в результате 3-и, повторюсь, они будут принадлежать разным граням,  т.е. эти 3-и точки будут находится в вершине куба…<br><br>Или аналогично… Пользователь хочет изменить размер куба путем выбора грани (т.е. оттащить выбранную грань что бы получился параллелепипед) он тащит одну грань, но если я правильно все понял, то менять координаты надо не только тем 4-м точкам которые образуют грань, но и еще надо изменить размеры соседних 4-х граней т.е. по мимо 4-х точек передвигаемой грани нужно еще изменить позицию 8-ми точек принадлежащих соседним? Или это можно реализовать как-то по-другому?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2693447</guid>
        <pubDate>Thu, 09 Sep 2010 17:12:53 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2693447</link>
        <description><![CDATA[OpenGL: По первому вопросу - ты не сможешь повернуть куб так, чтобы ты смог выбрать три точки :) А если серьезно, то в таких случаях берут точку, ближайшую к наблюдателю. А по второму - можно сохранить матрицу вида перед рисованием осей, &quot;обнулить&quot; ее и вернуть все обратно после.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2693329</guid>
        <pubDate>Thu, 09 Sep 2010 14:04:14 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2693329</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: День (вечер) добрый&#33;<br><br>Возник еще вопрос, если необходимо выбрать вершину… допустим есть куб, прошли по его вершинам, проверили тест попадания – вершин которые прошли тест окажется 3 штуки принадлежащие разным граням… тогда получается, что при редактировании вершины куба необходимо передвинуть 3 vertex – а? Тогда, при редактировании вершины объекта любой сложности необходимо проходиться по всем граням, по всем vertex-ам и выбирать для редактирования прошедшие тест?<br><br>И еще… Если перед каждым рисованием &quot;обнулять&quot; матрицу вызовом glLoadIdentity то тогда оси (векторы осей рисуются неправильно)… как сделать так чтобы и вершины можно было выбирать и оси рисовались правильно?<br><br>А то получается что если делать Push/PopMatrix то оси рисутся правильно, но неправильно работает gluProject(), елси делать glLoadIdentity то gluProject() – работает, а оси не рисуются, вернее рисуются но неправильно…]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687298</guid>
        <pubDate>Fri, 03 Sep 2010 13:23:09 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687298</link>
        <description><![CDATA[OpenGL: Проще перед каждым рисованием &quot;обнулять&quot; матрицу вызовом glLoadIdentity, вместо Push/PopMatrix. Тогда после рисования все преобразования будут сохраняться.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687266</guid>
        <pubDate>Fri, 03 Sep 2010 13:06:56 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687266</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Понял, спасибо, чувствую долго придется сидеть с миллиметровкой  :D , функция действительно работает правда, зараза, по X выдает правильно, а по Y делает ошибку в 4 пиксела&#33; Причем, действительно, ее надо вызывать в renderScene (в моем случае) после преобразований, а я ее вызывал в обработке WM_MOUSEMOVE, так, пришлось при каждом перемещении мыши делать отрисовку, а иначе как? запоминать матрицы при перерисовке, а в WM_MOUSEMOVE работать с ними?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687242</guid>
        <pubDate>Fri, 03 Sep 2010 12:53:49 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687242</link>
        <description><![CDATA[OpenGL: Таких примеров не видел. Могу посоветовать только попробовать подыскать подходящий шрифт.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687074</guid>
        <pubDate>Fri, 03 Sep 2010 11:31:04 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2687074</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: То OpenGL так спасибо, огромное, буду разбираться, тут возникла еще задача, никоим образом не связанная с координатами, но решил новую тему не создавать, задача выводить в OpenGL шрифт, примеров достаточно, но все они рисуются либо контурами, либо полигонами, а надо один простой чертежный шрифт, т.е. к примеру буква A или О<br>это не набор 2-х контуров, а один, т.е. буква А должна выводится всего 3-мя линиями, буква О к примеру 8-ю (со скошенными углами) и т.д. ищу, но пока ничего не найду. Конечно можно высчитывать координаты в ручную, но это - время, а есть ли что нибудь готовое?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686884</guid>
        <pubDate>Fri, 03 Sep 2010 09:36:03 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686884</link>
        <description><![CDATA[OpenGL: Этот код должен работать правильно. А где ты вызываешь эту функцию? Если не внутри RenderScene и код не менял, то причина возможно в том, что transform у тебя вызывается после или до renderScene, в которой у тебя задается матрица вида, и в конце которой она возвращается назад (glPopMatrix). А насчет примера - на том же gamedev (где ты по-видимому и брал код :) ) все расписано достаточно подробно. Ну вот еще можно глянуть <a class='tag-url' href='http://xprogramming.narod.ru/books/Opengl/Chapter6/1.htm' target='_blank'>тут</a>.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686815</guid>
        <pubDate>Fri, 03 Sep 2010 08:26:00 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686815</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Так, хорошо вот набросал такую функцию:<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;void _Transform(POINT3D ptObject, POINT3D&amp; ptScreen)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp;viewport[4]; &nbsp; &nbsp;// параметры viewport-a.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GLdouble projection[16]; // матрица проекции.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GLdouble modelview[16]; &nbsp;// видовая матрица.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GLdouble vx, vy, vz; &nbsp; &nbsp; // координаты курсора мыши в системе координат viewport-a.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GLdouble wx, wy, wz; &nbsp; &nbsp; // возвращаемые мировые координаты.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glGetIntegerv(GL_VIEWPORT, viewport); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// узнаём параметры viewport-a.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glGetDoublev(GL_PROJECTION_MATRIX, projection); &nbsp;// узнаём матрицу проекции.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glGetDoublev(GL_MODELVIEW_MATRIX, modelview); &nbsp; &nbsp;// узнаём видовую матрицу.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;gluProject(ptObject.x, ptObject.y, ptObject.z, modelview, projection, viewport, &amp;ptScreen.x, &amp;ptScreen.y, &amp;ptScreen.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
Есть объект (куб) который рисуется в центре сцены (основание = 0) с гранью = 10, если координаты вершины -5, -5, 10<br>
то данный метод возвращает 839, 676 (размер окна 940х656), естественно вершина находится в другом месте, причем вроде как работает...<br>
координаты вершин - это получается чередование значений -5(5), -5(5), 10(0) так и на выходе череда значений 839(100), 676(-63) но как применить<br>
результат я пока не знаю. Так как когда мышь над вершинами (смотрим сбоку) то координаты 389,304 - 389,141(левая грань) и 551,304 - 551,141 (правая грань).<br>
<br>
Это раз. +Если развернуть сцену, то координаты возвращаются такие же.<br>
Короче говоря где можно посмотреть рабочий пример выбора вершин, или хотя бы подробные действия что и как делать, что бы мне разобраться раз и навсегда, да и возможно другим будет интересно.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686681</guid>
        <pubDate>Fri, 03 Sep 2010 06:14:17 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686681</link>
        <description><![CDATA[OpenGL: Третий параметр gluUnProject - значение z - буфера (ну или глубина сцены). И она должна идти от 0 до 1. Вообще, ИМХО, для выбора лучше использовать gluProject - вычисляешь оконные координаты каждой вершины и смотришь расстояние до координат мыши.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686447</guid>
        <pubDate>Thu, 02 Sep 2010 18:54:34 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2686447</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот и еще вопрос... ковырялся, googlil, но... Кроче говоря объектную модель сделал, все рисуется, все замечательно вершины упоковал в вектор и т.д. т.е. могу ходить по вершинам, по граням, по объектам, но теперь возник вопрос о выборе вершины мышью... нашел такой код:<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">class CVector3</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;float x,y,z;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">void calc_select_line(int mouse_x, int mouse_y, CVector3&amp; p1, CVector3&amp; p2)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;// mouse_x, mouse_y &nbsp;- оконные координаты курсора мыши.</div><div class="code_line">&nbsp;&nbsp;// p1, p2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- возвращаемые параметры - концы селектирующего отрезка,</div><div class="code_line">&nbsp;&nbsp;// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; лежащие соответственно на ближней и дальней плоскостях</div><div class="code_line">&nbsp;&nbsp;// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; отсечения.</div><div class="code_line">&nbsp;&nbsp;GLint &nbsp; &nbsp;viewport[4]; &nbsp; &nbsp;// параметры viewport-a.</div><div class="code_line">&nbsp;&nbsp;GLdouble projection[16]; // матрица проекции.</div><div class="code_line">&nbsp;&nbsp;GLdouble modelview[16]; &nbsp;// видовая матрица.</div><div class="code_line">&nbsp;&nbsp;GLdouble vx,vy,vz; &nbsp; &nbsp; &nbsp; // координаты курсора мыши в системе координат viewport-a.</div><div class="code_line">&nbsp;&nbsp;GLdouble wx,wy,wz; &nbsp; &nbsp; &nbsp; // возвращаемые мировые координаты.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;glGetIntegerv(GL_VIEWPORT,viewport); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // узнаём параметры viewport-a.</div><div class="code_line">&nbsp;&nbsp;glGetDoublev(GL_PROJECTION_MATRIX,projection); // узнаём матрицу проекции.</div><div class="code_line">&nbsp;&nbsp;glGetDoublev(GL_MODELVIEW_MATRIX,modelview); &nbsp; // узнаём видовую матрицу.</div><div class="code_line">&nbsp;&nbsp;// переводим оконные координаты курсора в систему координат viewport-a.</div><div class="code_line">&nbsp;&nbsp;vx = mouse_x;</div><div class="code_line">&nbsp;&nbsp;vy = height - mouse_y - 1; // где height - текущая высота окна.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// вычисляем ближний конец селектирующего отрезка.</div><div class="code_line">&nbsp;&nbsp;vz = -1;</div><div class="code_line">&nbsp;&nbsp;gluUnProject(vx, vy, vz, modelview, projection, viewport, &amp;wx, &amp;wy, &amp;wz);</div><div class="code_line">&nbsp;&nbsp;p1 = CVector3(wx,wy,wz);</div><div class="code_line">&nbsp;&nbsp;// вычисляем дальний конец селектирующего отрезка.</div><div class="code_line">&nbsp;&nbsp;vz = 1;</div><div class="code_line">&nbsp;&nbsp;gluUnProject(vx, vy, vz, modelview, projection, viewport, &amp;wx, &amp;wy, &amp;wz);</div><div class="code_line">&nbsp;&nbsp;p2 = CVector3(wx,wy,wz);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Но решил проверить что же все таки получиться... и начал его отрисовывать (полученный отрезок)... или я чего-то не понимаю... или луч рисуется от края экрана в центр сцены, т.к. при любом положении курсора p1 - по всем координатам около нуля, да и орезок как то не связан с координатами курсора (x, y). Так вот собственно и вопрос как правильно выбирать (тест поподания) при данной реализации кода (см. выше)?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683500</guid>
        <pubDate>Tue, 31 Aug 2010 05:09:02 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683500</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот, вот&#33;&#33;&#33; Нет, 3ds max здесь действительно не к месту, согласен, это я так для примера, а вот за массив граней и т.д. спасибо&#33; Буду копать в этом направлении.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683350</guid>
        <pubDate>Mon, 30 Aug 2010 19:16:32 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683350</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2683033'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-08-30T12:56:29+00:00">30.08.10, 12:56</time></span><div class='quote '>Видел много реализаций 3d объектов (реализаций на C++), но все расчитаны под 3ds max</div></div><br>
При чем здесь 3d max?  Библиотеки содержат инструменты, необходимые для загрузки, отображения и пр. дествий с 3D объектами. <br>
Самое простое (и довольно универсальное решение) сделать так: объект - массив граней + информация о его повороте и положении, грань - массив вершин, вершина - координаты, цвет и нормаль.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683033</guid>
        <pubDate>Mon, 30 Aug 2010 12:56:29 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2683033</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот спасибо&#33; Ну и еще, последний вопрос, дальше буду сам разбираться...<br>Видел много реализаций 3d объектов (реализаций на C++), но все расчитаны под 3ds max и т.д. А мне бы для начало что-нибудь попроще (что бы вникнуть), как правильно хранить вершины, ребра, плоскости. Так что бы в дальнейшем можно было осуществять их выбор и редактирование, пусть хотя бы только редактирование вершин...<br><br>Где такое можно подсмотреть?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681601</guid>
        <pubDate>Sat, 28 Aug 2010 13:24:36 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681601</link>
        <description><![CDATA[OpenGL: У меня не рисуются оси твоей функцией :) Я ее немного поправил:<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">void CRender::DrawAxis(HWND hWnd)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;RECT rcClient;</div><div class="code_line">&nbsp;&nbsp; &nbsp;::GetClientRect(hWnd, &amp;rcClient);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int nSize = 50;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SIZE szViewPort;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;szViewPort.cx = nSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;szViewPort.cy = nSize;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glViewport(0, 0, szViewPort.cx, szViewPort.cy);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPushAttrib(GL_ENABLE_BIT);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glDisable(GL_DEPTH_TEST);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glDisable(GL_LIGHTING);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLineWidth(1.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_PROJECTION);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPushMatrix();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLoadIdentity();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glOrtho(-1.0, 1.0, -1.0, 1.0, -1, 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//----------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;float fLength = 1.0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;POINT3D pt(0.0, 0.0, 0.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glColor3f(0,0,1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x + fLength, pt.y, pt.z);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y + fLength, pt.z);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z + fLength);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//----------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopMatrix();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glMatrixMode(GL_MODELVIEW);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopAttrib();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glViewport(0,0, rcClient.right, rcClient.bottom);</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681296</guid>
        <pubDate>Fri, 27 Aug 2010 19:51:43 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681296</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Спасибо, но возник еще вопрос, задумал я отрисовать в левом нижнем углу вектора направления осей (X, Y, Z) вот (в одном из примеров &quot;нарыл&quot;):<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">void CRender::DrawAxis(HWND hWnd)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;RECT rcClient;</div><div class="code_line">&nbsp;&nbsp; &nbsp;::GetClientRect(hWnd, &amp;rcClient);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;float aspect = (float)(rcClient.right - rcClient.left) / (float)(rcClient.bottom - rcClient.top);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int nSize = 50;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SIZE szViewPort;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (aspect &#62; 1) // width &#62; height</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;szViewPort.cx = nSize * aspect;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;szViewPort.cy = nSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;szViewPort.cx = nSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;szViewPort.cy = nSize / aspect;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glViewport(0, 0, szViewPort.cx, szViewPort.cy);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPushAttrib(GL_ENABLE_BIT);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glDisable(GL_DEPTH_TEST);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glDisable(GL_LIGHTING);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glLineWidth(1.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//glOrtho(-1.0, 1.0, -1.0, 1.0, 0.5, 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;//----------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;float fLength = 10.0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;POINT3D pt(0.0, 0.0, 0.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x + fLength, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y + fLength, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glVertex3f(pt.x, pt.y, pt.z + fLength);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//----------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopAttrib();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glViewport(0,0, rcClient.right, rcClient.bottom);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Вот пока так примитивно, но возник вопрос следующего плана, при установке нового glViewport() его размеры должны быть с таким же соотношением сторон, как и<br>
у окна, иначе они (вектора осей) рисуются неверно, но в таком случае этот новый вьюпорт постоянно ползает (меняет размеры) в соответствии с размерами окна и графика в нем (в данном случае это три отрезка) маштабируются. Вопрос возможно ли сделать эту зону статической и квадратной к примеру 50х50 у.е. и уже в ней рисовать вектора осей или... <br>
<br>
P.S. Этот метод можно запихнуть в исходники выше, только надо пердать HWND окна.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681215</guid>
        <pubDate>Fri, 27 Aug 2010 18:38:01 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2681215</link>
        <description><![CDATA[OpenGL: У тебя во многих местах вызывается hDC=GetDC(...); Скорей всего, проблема в этом - у меня сначала вылезали непонятные баги, но после удаления этих строк все стало нормально. На всякий случай прикладываю архив того, что у меня получилось. <br>
<span class="b-attach" data-size="10842" data-hits="215" data-attach-id="959" data-attach-post-id="2681215">
			<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=2681215&amp;attach_id=959' title='Скачать файл' target='_blank'>MFC_Project.rar</a> (, : 215)
		</span><br>
]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680663</guid>
        <pubDate>Fri, 27 Aug 2010 10:25:42 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680663</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот еще рисунок на 1-м красная плоскость намного выше зеленной, но ее часть закрашивается зеленым (мерцает при повороте).<br>
На втором красная плоскость (квадрат) находится за зеленной&#33; Но она также мерцает т.е. прокрашивается... при поворотах.<br>
<br>
<span class="b-attach" data-size="78969" data-hits="754" data-attach-id="913" data-attach-post-id="2680663">
			<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=2680663&amp;attach_id=913' title='Скачать файл' target='_blank'>Рис2.jpg</a> (, : 754)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-27T10:32:20+00:00">27.08.10, 10:32</time></span></span><br>
что то с depth test т.к. если вызвать glDisable(GL_DEPTH_TEST); между отрисовками плоскостей то мерцание исчезает, правда рисуется нормально только на первый взглад... до поворота на 180...]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680625</guid>
        <pubDate>Fri, 27 Aug 2010 10:00:16 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680625</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Пробавл на 3-х, правда, на всех Windows 7. Но скорее всего причина в другом...]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680427</guid>
        <pubDate>Fri, 27 Aug 2010 06:55:18 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680427</link>
        <description><![CDATA[OpenGL: Скриншот выглядит довольно загадочно :unsure: Такой эффект повторяется на многих компах? <br>Сейчас на работе, смогу запустить код только дома.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680382</guid>
        <pubDate>Fri, 27 Aug 2010 04:56:29 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680382</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот картинка...<br>
<br>
<span class="b-attach" data-size="87215" data-hits="888" data-attach-id="909" data-attach-post-id="2680382">
			<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=2680382&amp;attach_id=909' title='Скачать файл' target='_blank'>Рис.jpg</a> (, : 888)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-27T04:57:40+00:00">27.08.10, 04:57</time></span></span><br>
Исходники те же, только разные цвета для сетки и куба. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-27T05:18:37+00:00">27.08.10, 05:18</time></span></span><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">void _DrawPlane(POINT3D pos, float cx, float cy)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_POLYGON);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(pos.x - cx / 2, pos.y + cy / 2, pos.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(pos.x + cx / 2, pos.y + cy / 2, pos.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(pos.x + cx / 2, pos.y - cy / 2, pos.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(pos.x - cx / 2, pos.y - cy / 2, pos.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
плоскость лежит сверху на приличной высоте над сеткой, но при вращении эффект тот же, части сетки (линии) мерцают при вращении т.е. отрисовываются поверх плоскости.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680262</guid>
        <pubDate>Thu, 26 Aug 2010 19:03:57 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680262</link>
        <description><![CDATA[OpenGL: Видна именно та часть сетки, которая должна быть внутри куба, или лежащая на его гранях? Если второе, то так и должно быть.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680247</guid>
        <pubDate>Thu, 26 Aug 2010 18:33:22 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680247</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Проблема была не с OpenGL а с видеокартой, (на работе встроеная) дома - все OK. Но про мерцание сетки не понял... У меня это выглядит так, как будто куб - частично прозрачный т.е. в зависимости от поворота через него видно сетку или ее часть.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680207</guid>
        <pubDate>Thu, 26 Aug 2010 17:54:43 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2680207</link>
        <description><![CDATA[OpenGL: Мерцание сетки вызвано тем, что она идет точь-в-точь по грани и в тех местах из-за погрешностей получается больше то одна величина, то другая. А с первой проблемой не понял - у меня все рисуется как надо.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679931</guid>
        <pubDate>Thu, 26 Aug 2010 12:45:44 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679931</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Вот что-то в этом роде, за качество кода извините, но суть думаю будет понятна...<br>
<br>
<span class="b-attach" data-size="60165" data-hits="335" data-attach-id="878" data-attach-post-id="2679931">
			<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=2679931&amp;attach_id=878' title='Скачать файл' target='_blank'>MFC_Project_3D_Camera_Scene.rar</a> (, : 335)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-26T13:37:09+00:00">26.08.10, 13:37</time></span></span><br>
Ну, с этим ладно, в принципе работает да и ладно, но возник еще один вопрос, изначально выводится сетка, затем куб, когда оно серое то особо не заметно, но когда установил различные цвета (для сетки и для куба) то происходит мерцание сетки на кубе при вращении как с этим бороться или это уже зависит от видеокарты?]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679767</guid>
        <pubDate>Thu, 26 Aug 2010 11:20:31 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679767</link>
        <description><![CDATA[OpenGL: Может лучше исходники выложишь? Здесь у меня MSVCR80.dll не установлена :)]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679634</guid>
        <pubDate>Thu, 26 Aug 2010 10:28:50 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679634</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Пробую прикрепить файл...<br>
<br>
<span class="b-attach" data-size="19667" data-hits="275" data-attach-id="877" data-attach-post-id="2679634">
			<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=2679634&amp;attach_id=877' title='Скачать файл' target='_blank'>MFC_Project.rar</a> (, : 275)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-26T10:31:18+00:00">26.08.10, 10:31</time></span></span><br>
Прикрепил&#33;  :D]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679600</guid>
        <pubDate>Thu, 26 Aug 2010 10:06:02 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679600</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2679523'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-08-26T09:11:38+00:00">26.08.10, 09:11</time></span><div class='quote '>Про Прикрепление файла... все равно не могу... не крепит и всё тут... ни .jpeg ни .rar файл выбирается, но как его крепить? <br>
Если после выбора делать предпросмотр, то файла нет, если нажать на [attach] то в сообщении появляетя [attach=#0][/attach]...<br>
а файла нет.</div></div><br>
Тег attach выполняет несколько другую функцию, он позволяет указать, в каком месте поста его выводить, а так же позволяет задать свое пояснение<br>
Что бы прикрепить файл, его достаточно просто выбрать, и нажать &quot;Отправить&quot;]]></description>
        <author>B.V.</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679597</guid>
        <pubDate>Thu, 26 Aug 2010 10:04:02 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679597</link>
        <description><![CDATA[OpenGL: <br>
То есть, куб <span class="tag-color tag-color-named" data-value="red" style="color: red">всегда</span> у тебя рисуется выше/впереди сетки?]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679561</guid>
        <pubDate>Thu, 26 Aug 2010 09:45:00 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679561</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: поменял, но все один к одному... возможно если двигать камеру то все было бы в порядке, но многие пишут, что разницы между (изменением положения камеры относительно сцены и изменением положения сцены относительно камеры) принципиальной нет. Вот просто представьте себе куб на плоскости (в центре) когда мы смотрим сверху то все нормально, но мы начинаем вращать пусть даже по одной оси, к примеру, от себя (пока сетка(плоскость) не станет одной линией) куб как бы должен сдвигаться назад к центру сетки(плоскости), а он рисуется, хотя и тоже вращается вместе с сеткой, в центре экрана, а не в центре сетки... Извините, но лучше объяснить у меня не получается.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679540</guid>
        <pubDate>Thu, 26 Aug 2010 09:21:38 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679540</link>
        <description><![CDATA[OpenGL: Все-таки что-то мне подсказывает что дело в depth test :) Попробуй поменять вызов рисования сетки и куба местами и посмотри что получится.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679523</guid>
        <pubDate>Thu, 26 Aug 2010 09:11:38 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679523</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Про Прикрепление файла... все равно не могу... не крепит и всё тут... ни .jpeg ни .rar файл выбирается, но как его крепить? <br>
Если после выбора делать предпросмотр, то файла нет, если нажать на [attach] то в сообщении появляетя [attach=#0][/attach]...<br>
а файла нет. А так я бы и код выложил и .exe в .rar и картинки... на счет кода то он разбит по классам, но принцип такой при обработке перемещения мыши изменяются<br>
<br>
m_RenderParams.Position (три float x, y, z), а также аналогично m_RenderParams.Rotation (x, y, z) далее, до начала отрисовки:<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; &nbsp; &nbsp; &nbsp;// ....</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glPushMatrix();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// далее позиция и поворот меняются мышью...</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTranslated(0.0, 0.0, m_RenderParams.Position.z); // колесо мыши ближе/дальше</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.x, 1, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.y, 0, 1, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.z, 0, 0, 1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_DrawGrid(50.0, 50.0, 5.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;_DrawCube(10.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopMatrix();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glFlush();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ....</div></ol></div></div></div></div><br>
<br>
код отрисовки куба и сетки выше... рисуются они с центром в 0,0,0. Но я так думал, что glTranslated() и glRotatef() должны действовать на все одинаково, т.е. и на сетку и на куб, отрисовываются они действительно в центре, но при вращении сцены создается впечатление что куб &quot;гуляет&quot; <br>
сетке... т.е. они не выглядят как сцена в том же 3DS Max, вроде они вращаются, маштабируются но как бы это сказать... каждый по свойму... нет ощущения единой сцены...]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679472</guid>
        <pubDate>Thu, 26 Aug 2010 08:38:39 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679472</link>
        <description><![CDATA[OpenGL: <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body"><br>
Читаем <a class='tag-url' href='http&#58;//forum.sources.ru/index.php?showtopic=50223&view=findpost&p=1229166' target='_blank'>Прикрепление файла</a><br>
</div></div><br>
Может тогда весь код покажешь?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2679443'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-08-26T08:24:02+00:00">26.08.10, 08:24</time></span><div class='quote '>такое впечатление, что куб должен маштабироваться отдельно...</div></div><br>
При чем здесь масштабирование, мы же вроде о вращении говорили...<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=311741&view=findpost&p=2679443'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Sergey Bogoyavlenskiy &#064; <time class="tag-quote__quoted-time" datetime="2010-08-26T08:24:02+00:00">26.08.10, 08:24</time></span><div class='quote '>где посмотреть исходник самого простого 3D редактора?</div></div><br>
Дома был, вечером возможно выложу.]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679443</guid>
        <pubDate>Thu, 26 Aug 2010 08:24:02 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679443</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Во... даже .rar не прикрепляется (c .exe). Попробую объяснить на пальцах... короче говоря куб при вращении сцены как будто ползает по сетке, а должен быть как монолит, т.е. жестко привязан к координатам сетки... <br>
<br>
Как это реализовать или где посмотреть исходник самого простого 3D редактора? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-08-26T08:27:14+00:00">26.08.10, 08:27</time></span></span><br>
glEnable(GL_DEPTH_TEST) - есть такое дело... дело не в этом... такое впечатление, что куб должен маштабироваться отдельно...]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679432</guid>
        <pubDate>Thu, 26 Aug 2010 08:20:26 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679432</link>
        <description><![CDATA[OpenGL: Картинку не увидел, но по описанию похоже что ты не включил depth test. Попробуй:<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">//при инициализации</div><div class="code_line">glEnable(GL_DEPTH_TEST);</div><div class="code_line">&nbsp;</div><div class="code_line">//при рисовании</div><div class="code_line">glClear(GL_DEPTH_BUFFER_BIT);</div></ol></div></div></div></div>]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679423</guid>
        <pubDate>Thu, 26 Aug 2010 08:12:06 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679423</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: To OpenGL, нет, наоборот так чтобы сетка и куб вращались вместе т.е. куб должен быть в координатах сетки (вершины куба), а сей час..., хотя сетка и куб рисуются с координатами центра 0,0,0 но при вращении куб ведет себя как бы отдельно...<br>
<br>
На рисунке видно, что (1) вид сбоку - нормально, (2) вид сверху - нормально, но при вращении (3) - как будто он (куб) выше сетки (а он должен быть на половину выше (т.к. центры у них совпадают), на (4) - как будто он на краю сетки, хотя он должен быть в центре...<br>
<br>
Т.е. куб при вращении ползает по сетке, а должен быть в заданной позиции (в данном случае в центре).[attach=#0][/attach]]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679326</guid>
        <pubDate>Thu, 26 Aug 2010 07:19:59 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679326</link>
        <description><![CDATA[OpenGL: Не понял, в чем вопрос? Как сделать чтобы сетк вращалась отдельно? Если так, то сделай примерно так:<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; glTranslated(0.0, 0.0, m_RenderParams.Position.z);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; glPushMatrix(); &nbsp; </div><div class="code_line">&nbsp;&nbsp; glRotatef(gridRotation.x, 1, 0, 0);</div><div class="code_line">&nbsp;&nbsp; glRotatef(gridRotation.y, 0, 1, 0);</div><div class="code_line">&nbsp;&nbsp; glRotatef(gridRotation.z, 0, 0, 1);</div><div class="code_line">&nbsp;&nbsp; _DrawGrid(50.0, 50.0, 0.0);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; glPopMatrix();</div><div class="code_line">&nbsp;&nbsp; glPushMatrix();</div><div class="code_line">&nbsp;&nbsp; glRotatef(cubeRotation.x, 1, 0, 0);</div><div class="code_line">&nbsp;&nbsp; glRotatef(cubeRotation.y, 0, 1, 0);</div><div class="code_line">&nbsp;&nbsp; glRotatef(cubeRotation.z, 0, 0, 1);</div><div class="code_line">&nbsp;&nbsp; _DrawCube(50.0);</div><div class="code_line">&nbsp;&nbsp; glPopMatrix();</div></ol></div></div></div></div>]]></description>
        <author>OpenGL</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679126</guid>
        <pubDate>Wed, 25 Aug 2010 19:12:11 +0000</pubDate>
        <title>Реализация координатной сетки OpenGL</title>
        <link>https://forum.sources.ru/index.php?showtopic=311741&amp;view=findpost&amp;p=2679126</link>
        <description><![CDATA[Sergey Bogoyavlenskiy: Доброго времени суток&#33; <br>
<br>
Начал изучать OpenGL...<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">void _DrawGrid(float cx, float cy, float step)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;float _cx = cx / 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;float _cy = cy / 2;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for(float x = -_cx; x &#60;= _cx; x += step)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(x, _cy, 0.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(x, -_cy, 0.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for(float y = -_cy; y &#60;= _cy; y += step)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_LINES);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(_cx, y, 0.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glVertex3f(-_cx, y, 0.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
Или что-то в этом роде центр сетки 0,0,0<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">void _DrawCube(GLfloat size) </div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// левая грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, -size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, &nbsp;size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, &nbsp;size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// правая грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, -size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, &nbsp;size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, &nbsp;size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// нижняя грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, -size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// верхняя грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, size / 2, -size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// задняя грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, -size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, &nbsp;size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, &nbsp;size / 2, -size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// передняя грань</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, -size / 2, &nbsp;size / 2); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, -size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( &nbsp;size / 2, &nbsp;size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex3f( -size / 2, &nbsp;size / 2, &nbsp;size / 2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glEnd();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
центр куба тоже 0,0,0<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; &nbsp; &nbsp; &nbsp;// ....</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glPushMatrix();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// далее позиция и поворот меняются мышью...</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTranslated(0.0, 0.0, m_RenderParams.Position.z);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.x, 1, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.y, 0, 1, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glRotatef(m_RenderParams.Rotation.z, 0, 0, 1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_DrawGrid(50.0, 50.0, 0.0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;_DrawCube(10.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glPopMatrix();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glFlush();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ....</div></ol></div></div></div></div><br>
<br>
Собственно вопрос... выводится все правильно и сетка в центре и куб, но только при вращении сцены - куб сам по себе, секта - сама, короче говоря как выводить<br>
объекты (в данном случае куб) с привязкой к сетке т.е. если шаг сетки равен, к примеру, 10, то при отрисовке куба с гранью 20, в центре он должен занять ровно<br>
4-ре ячейки и при вращении/маштабировании вершины куба должны быть привязаны к координатной сетке т.е. как в любом 3D редакторе (3DS Max) и т.д.]]></description>
        <author>Sergey Bogoyavlenskiy</author>
        <category>Программирование графики</category>
      </item>
	
      </channel>
      </rss>
	