<?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=415106&amp;view=findpost&amp;p=3803587</guid>
        <pubDate>Fri, 12 Jul 2019 17:22:32 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803587</link>
        <description><![CDATA[Mikle: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415106&view=findpost&p=3803582'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>k.sovailo &#064; <time class="tag-quote__quoted-time" datetime="2019-07-12T20:08:36+03:00">12.07.19, 17:08</time></span><div class='quote '>просто надоела ситуация, когда GDI+ (сейчас все изображения загружаются через него) постоянно выдаёт не то, что я прошу.</div></div><br>
Ещё раз - файл premultiplied ни чем не отличается от не premultiplied. Само слово &quot;premultiplied&quot; - это свойство изображения, а не файла. Либо поменяй glBlendFunc как я писал выше, чтобы пользоваться premultiplied, либо, если надо именно обычную альфу, сохраняй с помощью GDI+ или с помощь какого-нибудь Paint.net. Фотошоп при сохранении в PNG меняет не просто формат, он меняет сами данные - умножает цвет на альфу.]]></description>
        <author>Mikle</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803582</guid>
        <pubDate>Fri, 12 Jul 2019 17:08:36 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803582</link>
        <description><![CDATA[k.sovailo: <strong class='tag-b'>Mikle</strong>, кстати да, именно фотошоп я и использовал. Я знаю, что такое premultiplied, мне просто надоела ситуация, когда GDI+ (сейчас все изображения загружаются через него) постоянно выдаёт не то, что я прошу.]]></description>
        <author>k.sovailo</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803513</guid>
        <pubDate>Fri, 12 Jul 2019 13:37:50 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803513</link>
        <description><![CDATA[Mikle: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415106&view=findpost&p=3803493'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>k.sovailo &#064; <time class="tag-quote__quoted-time" datetime="2019-07-12T10:29:29+00:00">12.07.19, 10:29</time></span><div class='quote '>Кажется, пора искать какую-то библиотеку по открытию изображений.</div></div><br>
premultipled по структуре ни чем не отличается от обычного ARGB, разница в том, как его нужно использовать.<br>
Нужно искать не &quot;какую-то библиотеку по открытию изображений&quot;, а программу для сохранения изображений, которая не делает, как фотошоп, все PNG принудительно premultipled.]]></description>
        <author>Mikle</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803493</guid>
        <pubDate>Fri, 12 Jul 2019 10:29:29 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803493</link>
        <description><![CDATA[k.sovailo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415106&view=findpost&p=3803367'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Mikle &#064; <time class="tag-quote__quoted-time" datetime="2019-07-10T10:41:30+00:00">10.07.19, 10:41</time></span><div class='quote '>текстура белого полупрозрачного квадрата, случайно, не из PNG грузится, который premultipled</div></div><br>
Точно&#33; Проверил побайтово получившуюся картинку, посмотрел на PixelFormat, и таки да, она premultiplied. Не думал, что LockBits может вернуть не тот PixelFormat, что в картинке, и даже не тот, что ей передают... Кажется, пора искать какую-то библиотеку по открытию изображений.<br>
<br>
Добавлено: хотя если представить, что Bitmap при загрузке из файла на самом деле загрузку откладывает, а настоящий формат оно узнаёт только когда его в явном виде просят вытянуть изображение побайтово, то это обретает смысл.]]></description>
        <author>k.sovailo</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803367</guid>
        <pubDate>Wed, 10 Jul 2019 10:41:30 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803367</link>
        <description><![CDATA[Mikle: Я OpenGL не знаю, но в Direct3D будет белый, значит и здесь должно быть так же.<br>
Могу предположить: текстура белого полупрозрачного квадрата, случайно, не из PNG грузится, который premultipled? Если да, до должно быть как-то так:<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">glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Mikle</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803241</guid>
        <pubDate>Tue, 09 Jul 2019 16:31:11 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803241</link>
        <description><![CDATA[k.sovailo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415106&view=findpost&p=3803081'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>business user &#064; <time class="tag-quote__quoted-time" datetime="2019-07-08T12:15:34+00:00">08.07.19, 12:15</time></span><div class='quote '>Какого цвета он будет?</div></div><br>
Белый.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415106&view=findpost&p=3803081'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>business user &#064; <time class="tag-quote__quoted-time" datetime="2019-07-08T12:15:34+00:00">08.07.19, 12:15</time></span><div class='quote '>Теперь какой цвет?</div></div><br>
Тоже белый, разве нет? Почему он должен быть не белым? Я смотрю на белую стену сквозь тонкое белое стекло, сквозь толстое белое, без стекла - всё равно всё будет белым?<br>
<br>
цвет = альфа текстуры * цвет текстуры + (1 - альфа текстуры) * цвет в буфере<br>
В нашем случае: цвет = А * белый + (1 - А) * белый = 1 * белый = белый<br>
<br>
И там стоял glBlendFunc где-то в инициализации, в фрагменты, что я показал, он не вошёл. Но я поставил его ещё пару раз в цикл на всякий случай, результат тот же. Я просто не понимаю логику OpenGL.]]></description>
        <author>k.sovailo</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803081</guid>
        <pubDate>Mon, 08 Jul 2019 12:15:34 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3803081</link>
        <description><![CDATA[business user: Всё правильно работает.<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">glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);</div></ol></div></div></div></div>]]></description>
        <author>business user</author>
        <category>Программирование графики</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3802604</guid>
        <pubDate>Wed, 03 Jul 2019 15:49:12 +0000</pubDate>
        <title>OpenGL и неправильный расчёт альфы</title>
        <link>https://forum.sources.ru/index.php?showtopic=415106&amp;view=findpost&amp;p=3802604</link>
        <description><![CDATA[k.sovailo: Добрый день. Сел писать графику на OpenGL &lt; 3.0, то есть без шейдеров, VAO и прочего. Думал, что легче будет, да и хотел бы гарантировать, что программа запустится на любом железе, вплоть до древнего хлама. Ну и наткнулся на проблему. Когда рисуется квадрат с текстурой белого полупрозрачного цвета (т.е. альфа у каждого пикселя = 0.5) поверх белого непрозрачного квадрата, то получается серый.<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;glGenTextures(1, texture);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glBindTexture(GL_TEXTURE_2D, *texture);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmapdata.Width, bitmapdata.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, bitmapdata.Scan0);</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">&nbsp;&nbsp; &nbsp;unsigned int len = drawlist.legth();</div><div class="code_line">&nbsp;&nbsp; &nbsp;GlBlendEquation glBlendEquation = (GlBlendEquation)glutGetProcAddress(&quot;glBlendEquation&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;glClear(GL_COLOR_BUFFER_BIT);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; len; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBlendEquation(0x8006);//GL_FUNC_ADD</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBindTexture(GL_TEXTURE_2D, drawlist[i].texture);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBegin(GL_QUADS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glBlendEquation(0x8006);//На всякий случай после begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glColor4f(1.0f, 1.0f, 1.0f, drawlist[i].alpha);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(0.0f, 0.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex2fv(&amp;drawlist[i].points[0]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(1.0f, 0.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex2fv(&amp;drawlist[i].points[2]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(1.0f, 1.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex2fv(&amp;drawlist[i].points[4]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glTexCoord2f(0.0f, 1.0f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;glVertex2fv(&amp;drawlist[i].points[6]);</div><div class="code_line">&nbsp;&nbsp; &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;glBindTexture(GL_TEXTURE_2D, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;glFlush();</div><div class="code_line">&nbsp;&nbsp; &nbsp;glutSwapBuffers();</div></ol></div></div></div></div><br>
<br>
Я подумал, что в glBlendEquation оказался GL_MAX, поэтому и сделал костыль, но не помогло. При этом картинки с общей альфой (т.е. альфа каждого пикселя 255, но рисуется поверх полупрозрачного квадрата) оно рисует нормально. Как быть? Пока что вижу только способ переписать всё с шейдерами, а если на какой-то машине не запуститься, то запускать альтернативу, которая будет плохо рисовать всякие туманы и контуры (что в принципе приемлемо, но хотелось бы знать, в чём причина).<br>
<br>
На изображении на самом деле рисуется изображение с равномерным градиентом от белого к прозрачному.<br>
<span class="b-attach" data-size="9387" data-hits="1345" data-attach-id="60635" data-attach-post-id="3802604">
			<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=3802604&amp;attach_id=60635' title='Скачать файл' target='_blank'>____________________.jpg</a> (, : 1345)
		</span>]]></description>
        <author>k.sovailo</author>
        <category>Программирование графики</category>
      </item>
	
      </channel>
      </rss>
	