<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Clipping / Rotation</title>
		<link>http://www.allegro.cc/forums/view/617012</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 21 Aug 2017 22:00:09 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>An interesting issue/problem I think -</p><p>I&#39;m using a landscape screen in portrait mode and before I draw everything to screen I setup transformation as follows -</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// initiate portrait rotation</span>
<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf, screen_w<span class="k3">/</span><span class="k3">-</span><span class="n">2</span>, screen_w<span class="k3">/</span><span class="k3">-</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// move to centre</span>
<a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf, screen_angle_rad<span class="k2">)</span><span class="k2">;</span>            <span class="c">// rotate</span>
<a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf, screen_w<span class="k3">/</span><span class="n">2</span>, screen_w<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>   <span class="c">// return to top left corner</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

However, this (obviously) doesn&#39;t affect the clipping coordinates..</p><p>I have a method to convert from landscape to portrait values by subtracting/adding x,y,width &amp; height values from the screen dimensions, which works fine for (say a specific) 90 degree rotation..</p><p>I wondered if there was a more flexible method to create the new clipping rectangle after a rotation?</p><p>Anyone..?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Thu, 17 Aug 2017 14:28:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>? Apply the transformation to the rectangle position and then respect the original boundaries ?</p><p>I don&#39;t think you can clip a non AABB with Allegro, but maybe with OpenGL?</p><p>Not sure what you want.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Aug 2017 01:12:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry I&#39;m not explaining myself very well <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>I do the following so I can use a &#39;standard screen in portrait mode (ie rotate 90 degrees c/w) -
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transf, screen_w, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, screen_angle_rad<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a>  <span class="k2">(</span><span class="k3">&amp;</span>transf<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I have the clipping rectangle defined for portrait mode but the above transformation has no effect on the clipping values, so I have to adjust them as follows (clx,y,w,h are original portrait values, lx,y,w,h are landscape ones that Allegro expects)-
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// fix clipping rectangle for portrait (rotation transforms don't affect clipping)</span>
lx  <span class="k3">=</span> screen_w <span class="k3">-</span> cly <span class="k3">-</span> clh<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
ly  <span class="k3">=</span>            clx <span class="k3">-</span> clw<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
lw  <span class="k3">=</span>            clh<span class="k2">;</span>
lh  <span class="k3">=</span>            clw<span class="k2">;</span>
</pre></div></div><p>

I just wondered if there was a quick method that would work for any angle rotation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Fri, 18 Aug 2017 18:28:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can take each corner of your screen, [[0, 0], [w, 0], ...] and transform them using your transformation via <span class="source-code"><a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a></span>. You can then compute the new bounding box for those coordinates via a judicious use of <span class="source-code">min</span> and <span class="source-code">max</span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 19 Aug 2017 22:47:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>al_transform_coordinates() .. !</p><p>Exactly what I need; hadn&#39;t realised such a function existed <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" /></p><p>Thanks SiegeLord.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Mon, 21 Aug 2017 22:00:09 +0000</pubDate>
	</item>
</rss>
