<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>No there there</title>
	<atom:link href="https://peterquirk.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://peterquirk.wordpress.com</link>
	<description>Exploring business applications of virtual worlds by Peter Quirk</description>
	<lastBuildDate>Sat, 21 Mar 2009 23:41:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">3382510</site><cloud domain='peterquirk.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/6047226f0d594bcfe9a37ebf2ad769ec78bca33a06b5ccf76d5e699cdd4e9bb1?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>No there there</title>
		<link>https://peterquirk.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://peterquirk.wordpress.com/osd.xml" title="No there there" />
	<atom:link rel='hub' href='https://peterquirk.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Modrex update</title>
		<link>https://peterquirk.wordpress.com/2009/03/01/modrex-update/</link>
					<comments>https://peterquirk.wordpress.com/2009/03/01/modrex-update/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Mon, 02 Mar 2009 03:55:45 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[modrex]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[realXtend]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=348</guid>

					<description><![CDATA[I&#8217;ve been a little quiet of late due to digging into modrex while getting up to speed in a new job. For those who don&#8217;t know what modrex is, it&#8217;s a project to integrate all of the realXtend features with the mainline OpenSim code by incorporating them in a optional regionmodule &#8211; hence the project [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve been a little quiet of late due to digging into modrex while getting up to speed in a new job. For those who don&#8217;t know what modrex is, it&#8217;s a project to integrate all of the realXtend features with the mainline OpenSim code by incorporating them in a optional regionmodule &#8211; hence the project name modrex. The work is being done by <a href="http://www.adamfrisby.com/blog">Adam Frisby</a>. The stability of the code is surprisingly good, though there are lots of missing pieces at present.</p>
<p>Paul Fishwick has been documenting how to build OpenSim with modrex (at least for Windows). You can help test by following <a href="http://opensimulator.org/wiki/ModRex">the instructions</a> on the Opensim wiki. Feel free to update the Linux build instructions if that&#8217;s your preferred environment.</p>
<p>A fairly current list of implemented features is documented <a href="http://rexdeveloper.org/wiki/index.php?title=Features_supported_currently">here.</a> The status of Python event handlers is <a href="http://rexdeveloper.org/wiki/index.php?title=PythonInModRex">here</a>.</p>
<p>I hope to report soon that some of my tutorials have been implemented successfully on Opensim+modrex.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2009/03/01/modrex-update/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">348</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>
	</item>
		<item>
		<title>Sensor networks and virtual worlds</title>
		<link>https://peterquirk.wordpress.com/2009/01/21/sensor-networks-and-virtual-worlds/</link>
					<comments>https://peterquirk.wordpress.com/2009/01/21/sensor-networks-and-virtual-worlds/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Wed, 21 Jan 2009 21:23:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AMEE]]></category>
		<category><![CDATA[AMI]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Current Cost]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[Pachube]]></category>
		<category><![CDATA[Phidgets]]></category>
		<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Second Life]]></category>
		<category><![CDATA[sensor networks]]></category>
		<category><![CDATA[Sensorbase]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=322</guid>

					<description><![CDATA[There’s a surprisingly strong connection between virtual worlds and sensor networks. Many proponents of virtual worlds position them as mirror worlds &#8212; 3D canvases for visualizing what’s going on in the real world. The Eolus One initiative to model and control the energy consumption of a physical house in the virtual world is well-known to users [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>There’s a surprisingly strong connection between virtual worlds and sensor networks. Many proponents of virtual worlds position them as mirror worlds &#8212; 3D canvases for visualizing what’s going on in the real world. The Eolus One initiative to <a href="http://www.ugotrade.com/2007/07/02/eolus-makes-leap-to-3d-internet-on-second-life/" target="_blank">model and control the energy consumption</a> of a physical house in the virtual world is well-known to users of Second Life. The prototype, while interesting, doesn’t show how an individual might so the same thing with his/her house. Last year, the realXtend group shipped a virtual world platform that included sample code for controlling a device through an X10 controller. (See the X10manager download <a href="http://www.realxtend.org/page.php?pg=downloads">here</a> and read the included readme.txt for instructions.) Although it contained no sample code for sensing X10 state, it’s easy to extend the code to read the state of X10 controllers.  With this platform running inside your house you could monitor and control many devices in your home.</p>
<p>But what if your goal is to measure the energy use of an entire community in order to change consumer behavior? There are many wireless and power line networks <span id="more-322"></span>being implemented today by power companies to capture real-time energy data from homes. Unfortunately, some of these companies have no plans to share the data with you, your community or your government, nor to enable you to integrate other data nor to control your resource usage remotely. A good example of the arguments on both sides can be found in <a href="http://www.puc.state.tx.us/rules/rulemake/31418/091806_Reply/Direct_Energy_Reply.pdf" target="_blank">this correspondence</a> (PDF) between Good Corporation on behalf of Direct Energy  and the Public Utility Commission of Texas.</p>
<p>All utilities are in the process of filing for <a href="http://www.energypulse.net/centers/article/article_display.cfm?a_id=1547" target="_blank">increased tariffs</a> (or have new tariffs approved) so that you bear the cost of the systems that help them delay the construction of new generating capacity. <a href="http://www.state.vt.us/psb/document/ElectricInitiatives/DPS%20Preliminary%20Results%20Workshop.ppt" target="_blank">This presentation (PPT)</a> by Freeman, Sullivan and Co. shows that Advanced Metering Infrastructure (AMI) can result in net savings to utilities (at least in Vermont) through reduced service costs, avoidance of meter reading, and improved response to storm damage. You have to wonder why we’re being asked to pay for these systems.</p>
<p>Enthusiasts around the world have been building energy monitoring systems for years. With the rise of the <a href="http://www.arduino.cc/" target="_blank">Arduino</a> project (an inexpensive microcontroller project with an open design first released in 2005), numerous designs have appeared on the internet, in <a href="http://www.google.com/search?hl=en&amp;safe=off&amp;q=arduino+site%3Amakezine.com">Make magazine</a>, and have been produced in kit form or embedded in products. Arduino has competitors like <a href="http://www.phidgets.com" target="_blank">Phidgets</a>, offering a richer set of analog sensors and more capable software for a significantly higher price.</p>
<p>In the UK and Europe, the <a href="http://www.currentcost.com/" target="_blank">Current Cost Meter</a> is a popular solution. Its serial interface enables one to capture total power usage and temperature and build databases of historical energy usage. The Current Cost Meter doesn’t provide you with any control and doesn’t fetch real-time pricing data from utilities.</p>
<p>So much for collecting data. What if you want to share the data with others in your community? There are two sensor networks of interest today, but like social networks, social data networks (SDNs) such as these will proliferate as entrepreneurs discover their power to aggregate audiences with specific shared interests and use them to sell products and services to them.</p>
<p><a href="http://sensorbase.org" target="_blank">Sensorbase</a> is an iteration of a data logging system developed by the <a href="http://research.cens.ucla.edu/" target="_blank">Center for Embedded Network Sensing</a> (CENS) at the University of California. (Sensorbase should not be confused with the Sensorbase database in the Hackystat system, an instrumentation project for collecting real world data about all phases of a software development project.) The new design addresses problems with earlier versions of the CENS data logging systems which were distributed but difficult to query in a correlated fashion. Sensorbase is built on <a href="http://research.cens.ucla.edu/projects/2006/Systems_Infrastructure/SensorBase/default.htm" target="_blank">star schema</a>, enabling OLAP queries with common time and location dimensions and efficient aggregate queries. It’s quite easy to define a project, a table and upload CSV or XML data to Sensorbase.org through your browser. Data can also be published or fetched through HTTP POST operations from your favorite language. I haven’t found any examples yet of people connecting Sensorbase to Second Life, but it has been connected to Google Earth to visualize micro-climate data for the James Reserve, <span style="font-family:Thorndale;">located in the San Jacinto Mountains east of Riverside, California.</span></p>
<p><a href="http://pachube.com" target="_blank">Pachube</a> (usually pronounced patch bay) grew out of its founder’s interest in “hacking” buildings to sense the built environment and display or control it remotely. Usman Haque, an architect with a deep interest in systems and performance art, spun out a business to promote what could be termed a Global Service Bus (in the style of an Enterprise Service Bus). Anyone can put data on the bus, and anyone can the consume the data. The current implementation (as of Jan 21, 2009) has limited support for history (only 24 hours), but the <a href="http://community.pachube.com/?q=node/94" target="_blank">roadmap</a> includes support for extended history. The original intent of Pachube was that it might become the YouTube of streaming data, in other words a deep repository of information that can be searched, embedded, tagged, etc.)</p>
<p>Pachube leads Sensorbase slightly in its integration with virtual worlds, and will likely pull ahead given the social thrust of Pachube versus the scientific thrust of Sensorbase. Code is available on the Pachube site for <a href="http://community.pachube.com/?q=node/82" target="_blank">collecting and consuming data in Second Life</a>. In the coming weeks, code will be published for connecting Pachube feeds to elements in Sketchup models, allowing visual representations of sensor data to be placed on Google Maps or in Google Earth. (Since Microsoft Virtual Earth also supports KML, it’s reasonable to think that the same models would work with little or no change on Virtual Earth.)</p>
<p>A third network, AMEE, is devoted to the very specific issue of aggregating the world&#8217;s carbon footprint. The AMEE network seeks to document the operational and upstream (associated with manufacturing, transportation and storage) carbon footprint of every object we use. The first AMEE/Second Life integration was a project called Carbon Goggles, a heads-up display that superimposed a dark gaseous cloud over objects being modeled in the virtual world.  The size of the cloud was proportional to the carbon footprint of an appliance or vehicle. Tish Shute has described AMEE and interviewed its founder Gavin Starks in a <a href="http://www.ugotrade.com/2008/12/15/smart-planetinterview-with-andy-stanford-clark/">recent post</a>. She also interviewed Andy Stafford Clark, creator of the Current Cost meter. </p>
<p>Pachube and Sensorbase are serious competitors for the web portals associated with the Advanced Metering Infrastructure (AMI/AMS) being pushed by the utilities. For a start, you control who you share your data with. Secondly, you can integrate data that a power utility might not be interested in, such as water consumption, oil usage, wood fuel usage, propane, or caffeine. Thirdly, you can use these networks to remotely control systems in your home. Both are capable of feeding data to a PC or control system that controls appliances or thermostats. The commands could be posted by a standard SMS text message, a tweet from Twitter, or by an HTTP POST from a smartphone.</p>
<p>In coming posts I’ll explore the integration of these sensor networks with OpenSim, realXtend, Sketchup and Google Maps/Google Earth. If you’ve done something cool with sensor networks and virtual worlds or maps, I’d love to hear about it!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2009/01/21/sensor-networks-and-virtual-worlds/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">322</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>
	</item>
		<item>
		<title>Building Sketchup plug-ins the right way for Vista</title>
		<link>https://peterquirk.wordpress.com/2009/01/16/building-sketchup-plug-ins-the-right-way-for-vista/</link>
					<comments>https://peterquirk.wordpress.com/2009/01/16/building-sketchup-plug-ins-the-right-way-for-vista/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Fri, 16 Jan 2009 21:57:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Ogre mesh]]></category>
		<category><![CDATA[Ogre3D]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sketchup]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Wix]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=319</guid>

					<description><![CDATA[When I made some small modifications to the original Ogre Mesh Exporter plug-in developed by Fabrizio Nunnari from an earlier work by Kojack, I never anticipated how much more work would be involved in doing it right, and how few Sketchup plug-ins are designed to work with Vista’s improved security model. I was running on Windows [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>When I made some <a href="https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/">small modifications</a> to the original Ogre Mesh Exporter plug-in developed by Fabrizio Nunnari from an earlier work by Kojack, I never anticipated how much more work would be involved in doing it right, and how few Sketchup plug-ins are designed to work with Vista’s improved security model. I was running on Windows XP when I published the plug-in, and like most users was content to edit the configuration parameters within the plugins folder, which resides within the Program Files folder. Jules Vos <a href="https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/#comment-218">commented</a> that it was a pain to configure the plug-in under Vista due to the tightened security. Recently I upgraded my Windows XP system to Vista (32-bit) and then Vista (64-bit), so I got a chance to eat my own dog food!</p>
<p>As in Windows XP, the Program Files folder in Windows Vista requires elevated privileges to install software. But Vista goes further in that it virtualizes per-user files in another folder. If you or your software application attempts to modify settings in a plug-in, the modified file will be written to C:\Users\{user}\AppData\Local\VirtualStore\Program Files (x86)\Google\Google Sketchup 7\Plugins. The idea is to protect each user from the other by ensuring that they see either the original version of the file, or their personal version if they have modified it. Of course, to modify a file in the Plugins directory, you have to invoke Notepad or another editor with the “Run As Administrator” option before you open the file.</p>
<p>The first thing that needs to change is where we store the plug-ins <span id="more-319"></span>if they need to be modified by the user. We should store them in the user’s data area, either in AppdataRoaming or in the Documents hierarchy and call them from a stub script in the Plugins folder. This approach allows the user to customize the script without elevated privileges.</p>
<p>The second things that needs attention is the use of installer scripts for plug-ins. It has been many years since I built an installer script and a lot has changed such as the introduction of separate folders for 64-bit and 32-bit programs, new file locations in Vista, etc. I don’t have access to the full Visual Studio development suite anymore either. So I looked at free and open source installers. After examining the NullSoft installer and Microsoft’s Wix, I opted for <a href="http://www.tramontana.co.hu/wix/" target="_blank">Wix</a> since it didn’t require me to learn another scripting language and I didn’t have cross-platform requirements that NullSoft’s installer addresses.</p>
<p>After a lot of work learning Wix and dealing with the lack of accurate documentation on system-related APIs in the Sketchup Ruby documentation, I have created a workable installer for the Ogre Mesh Exporter plug-in discussed previously. The installer is presently optimized for Vista (32-bit and 64-bit). A more complete implementation with support for XP is coming soon. (I’m waiting for an answer on how to determine from a Sketchup plug-in which OS platform we’re running on.)</p>
<p>The installer places the three Ruby scripts (the export script, the configuration file and backfaces.rb) into the standard Plugins directory. On first use of the exporter, if it can’t find the C:\Users\{user}\Documents\Sketchup Plugins directory, it creates one, copies the  config file to it, then loads it. You may happily edit the config file in your Sketchup Plugins folder without needing any elevated privileges. As with the initial release, the code assumes the existence of a “My Models” folder in Documents. Each exported model will be stored in a separated directory in My Models. Unique ids are no longer attached to the materials, but you can set $g_ogre_append_unique_prefix to true of you want this behavior.</p>
<p>You can fetch the new installer from <a href="http://cid-ea0e1d9f19828aa4.skydrive.live.com/self.aspx/.Public/Sketchup%20exporter%20to%20realXtend/ogremeshexporter.msi" target="_blank">here</a>. Just click on the link to run .msi file and install the add-in.</p>
<p><strong>Notes:</strong></p>
<p>1. Google Sketchup 7 must be installed before the plugin is installed<br />
2. DocumentsMy Models directory must exist before running the add-in from the Sketchup Tools menu.<br />
3. If you want to store the models somewhere other than My Models, edit the ogre_export_config.rb file after running the exporter once.<br />
3. You can uninstall the plugin from the Control Panel.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2009/01/16/building-sketchup-plug-ins-the-right-way-for-vista/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">319</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: realXtend&#8217;s powerful configuration management for models without notecards</title>
		<link>https://peterquirk.wordpress.com/2008/12/31/tutorial-realxtends-powerful-configuration-management-for-models-without-notecards/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/31/tutorial-realxtends-powerful-configuration-management-for-models-without-notecards/#respond</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Wed, 31 Dec 2008 05:09:17 +0000</pubDate>
				<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Second Life]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[3D models]]></category>
		<category><![CDATA[CompObj]]></category>
		<category><![CDATA[configuration data]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[notecards]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rexGetPrimFreeData]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=289</guid>

					<description><![CDATA[One of the most annoying aspects of supplying parameters to scripted objects in Second Life is the need to use notecards. Notecards have a variety of annoying restrictions, and LSL lacks decent parsing tools for dealing with parameters on notecards. In contrast, RealXtend has a remarkable, but up till now undocumented facility for supplying configuration [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>One of the most annoying aspects of supplying parameters to scripted objects in Second Life is the need to use notecards. Notecards have a variety of annoying restrictions, and LSL lacks decent parsing tools for dealing with parameters on notecards. In contrast, RealXtend has a remarkable, but up till now undocumented facility for supplying configuration data to models in any format you like with virtually no size restrictions on the data. When combined with your favorite object serialization library in Python, a fantastic world of possibilities for initializing and persisting object data appears.</p>
<p>I’ve just started to explore the potential of this approach, so I’ll give you one working example to get you started. This example demonstrates solutions to a few problems that bug builders from time to time:</p>
<ul>
<li>How to switch units from meters to cm, feet or inches</li>
<li>How to specify colors by name using the W3C / X11 color names</li>
<li>How to automatically place cloned objects on the ground when the ground is uneven</li>
</ul>
<p>The example uses the Python <a href="http://www.voidspace.org.uk/python/configobj.html" target="_blank">ConfigObj library</a> by Michael Foord and Nichola Larosa. ConfigObj implements a read/write (round-trip) handler for .ini files. Grab a copy of ConfigObj and store it in the rexserverScriptenginesLib folder. (By rights, it should be stored in site-packages, but the IronPython doesn’t seem to look there.)<span id="more-289"></span></p>
<p>We will use ConfigObj to read configuration data for a prim that looks like this:</p>
<blockquote><p>[Units]<br />
length=m<br />
[Main]<br />
color = SteelBlue<br />
height = 10<br />
width = 1<br />
depth = .5</p></blockquote>
<p>The [Units] section presently supports one key – length – which specifies what our unit of length is. The sample code handles “m” (meters), “cm” (centimeters), “ft” (feet) and “in” (inches). You can add conversions for other units.</p>
<p>The [Main] section lets you override the color, height, width and depth of a prim. I am being deliberately vague about the meaning of width and depth. At some point in the future I plan to determine which face of the prim is facing the avatar and define the width of that face as the width of the prim. (Of course it’s quite meaningless for a sphere or torus, but this is just a toy example.)</p>
<p>The configuration data is stored in the Data sub-panel of the reX tab in the object editor.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/datapanel.png"><img style="border-right:0;border-top:0;display:inline;border-left:0;border-bottom:0;" title="Data panel" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/datapanel-thumb.png?w=499&#038;h=484" border="0" alt="Data panel" width="499" height="484" /></a></p>
<p>The data is processed by the DisplayConfig class in the Python script called sampleconfig.py. You indicate this by setting the class on the Misc sub-panel of the reX tab.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/miscpanel.png"><img style="border-right:0;border-top:0;display:inline;border-left:0;border-bottom:0;" title="Misc panel" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/miscpanel-thumb.png?w=292&#038;h=484" border="0" alt="Misc panel" width="292" height="484" /></a></p>
<p>The key ideas in the code are the following.</p>
<p>1.  At the head of the code we import two Python libraries:</p>
<p>from configobj import ConfigObj<br />
import StringIO</p>
<p>2. In the EventTouch handler we instantiate a ConfigObj and pass it the data from the reX Data panel via a StringIO object. The rexGetPrimFreeData() method returns the blob of data as a string. It could have been an XML data structure, a Python Pickle object, or the URL of an external (and possibly dynamic) data source.</p>
<p>    def EventTouch(self,vAvatar):<br />
        configstring = StringIO.StringIO(self.rexGetPrimFreeData())<br />
        config = ConfigObj(configstring)</p>
<p>The config variable is assigned a hierarchical dictionary of results which is easily indexed.</p>
<p>        length = &#8220;m&#8221;<br />
        if config.has_key(&#8216;Units&#8217;):<br />
            section_units = config[&#8216;Units&#8217;]<br />
            if section_units.has_key(&#8216;length&#8217;):<br />
                length = section_units[&#8216;length&#8217;]<br />
        if length == &#8220;m&#8221;:<br />
            length_conversion = 1.0<br />
        elif length == &#8220;ft&#8221;:<br />
            length_conversion = 1.0 / 3.2808398950131<br />
        elif length == &#8220;cm&#8221;:<br />
            length_conversion = 0.01<br />
        elif length == &#8220;in&#8221;:<br />
            length_conversion = 1.0 / 39.370078740157<br />
        else:<br />
            self.llSay(0,&#8221;Unknown Unit: &#8221; + length)<br />
            return false</p>
<p>You can also iterate over the keys. Here we process the keys in the [Main] section.</p>
<p>        section = config[&#8216;Main&#8217;]<br />
        for k in section.iterkeys():<br />
            key = k.lower()<br />
            if key == &#8220;height&#8221;:<br />
                # set height of prim<br />
                targetheight = float(section[k]) * length_conversion<br />
                my_scale = self.llGetScale()<br />
                x = my_scale.x<br />
                y = my_scale.y<br />
                z = targetheight<br />
                # adjust the height of the object so it sits on the ground<br />
                land = self.llGround( Vector3(0.0, 0.0, 0.0) )<br />
                pos = self.llGetPos()<br />
                self.llSetPos(Vector3(pos.x, pos.y, land + (targetheight / 2.0)))<br />
                self.llSetScale(Vector3(x,y,z))<br />
            elif key == &#8220;width&#8221;:<br />
                # set width of prim<br />
                targetwidth = float(section[k]) * length_conversion<br />
                my_scale = self.llGetScale()<br />
                x = my_scale.x<br />
                z = my_scale.z<br />
                y = targetwidth<br />
                self.llSetScale(Vector3(x,y,z))<br />
            elif key == &#8220;depth&#8221;:<br />
                # set depth of prim<br />
                targetdepth = float(section[k]) * length_conversion<br />
                my_scale = self.llGetScale()<br />
                y = my_scale.y<br />
                z = my_scale.z               <br />
                x = targetdepth<br />
                self.llSetScale(Vector3(x,y,z))<br />
            elif key == &#8220;color&#8221;:<br />
                # set color of prim<br />
                targetcolor = section[k]<br />
                if DisplayConfig.color_LUT.has_key(targetcolor):<br />
                    v = DisplayConfig.color_LUT[targetcolor]<br />
                    ALL_SIDES = -1<br />
                    color = Vector3(v[0]/255.0, v[1]/255.0, v[2]/255.0)<br />
                    self.llSetColor(color,ALL_SIDES)<br />
                else:<br />
                    self.llSay(0,&#8221; Invalid color &#8211; check spelling &amp; case: &#8221; + targetcolor)</p>
<p>The color Lookup Table (DisplayConfig,color_LUT) is initialized in the EventCreated method. Here are a few lines from the hundreds that define the colors.</p>
<p>class DisplayConfig(rxactor.Actor):<br />
    color_LUT = {} # a dictionary object<br />
    def GetScriptClassName():<br />
        return &#8220;sampleconfig.DisplayConfig&#8221;</p>
<p>    def EventCreated(self):<br />
        super(self.__class__,self).EventCreated()<br />
        print &#8220;DisplayConfig EventCreated&#8221;<br />
        # Red Colors<br />
        DisplayConfig.color_LUT[&#8216;IndianRed&#8217;] = (205,92,92)<br />
        DisplayConfig.color_LUT[&#8216;LightCoral&#8217;] = (240,128,128)<br />
        DisplayConfig.color_LUT[&#8216;Salmon&#8217;] = (250,128,114)<br />
        DisplayConfig.color_LUT[&#8216;DarkSalmon&#8217;] = (233,150,122)<br />
        DisplayConfig.color_LUT[&#8216;LightSalmon&#8217;] = (255,160,122)</p>
<p>Lastly, here&#8217;s a quick video of me creating a default cubic object and assigning it the configuration data above. The text is hard to read and you can&#8217;t see the touch event. However, you will see the object changes size and color to match the configuration data. When cloned by SHIFT-dragging, the copy is left above the ground, but when clicked, it attaches itself to the ground. I&#8217;ll try to replace this one with a higher quality recording in the next day or so.</p>
<iframe class="youtube-player" width="500" height="282" src="https://www.youtube.com/embed/Of161n1VCSI?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
<p>Happy New Year!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/31/tutorial-realxtends-powerful-configuration-management-for-models-without-notecards/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">289</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/datapanel-thumb.png" medium="image">
			<media:title type="html">Data panel</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/miscpanel-thumb.png" medium="image">
			<media:title type="html">Misc panel</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: Creating an overhead projector using an RTT camera in realXtend</title>
		<link>https://peterquirk.wordpress.com/2008/12/29/tutorial-creating-a-overhead-projector-using-an-rtt-camera-in-realxtend/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/29/tutorial-creating-a-overhead-projector-using-an-rtt-camera-in-realxtend/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Mon, 29 Dec 2008 05:20:15 +0000</pubDate>
				<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[3D models]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[Ogre3D]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[RTT]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=277</guid>

					<description><![CDATA[The RTT (Render-to-Texture) camera feature used in the previous tutorial can be exploited in numerous ways to create interesting devices for the realXtend platform. The good news for OpenSim fans is that that the realXtend functionality will soon be merged into OpenSim as an optional regionmodule which can be activated on a per region basis. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The RTT (Render-to-Texture) camera feature used in the previous tutorial can be exploited in numerous ways to create interesting devices for the realXtend platform. The good news for OpenSim fans is that that the realXtend functionality will soon be merged into OpenSim as an optional regionmodule which can be activated on a per region basis.</p>
<p>Today’s tutorial involves the construction of a realistic working overhead projector. It’s realistic to a point, but it doesn’t project the slides onto your avatar if you step between the projector and the screen! Here’s a video to give you a sense of what it’s like.</p>
<iframe class="youtube-player" width="500" height="282" src="https://www.youtube.com/embed/v2GAATOeFZU?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
<p><span id="more-277"></span>I’m going to assume that you can build or find a suitable projector and screen using the techniques described in the tutorial on the <a href="https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/">streamlined tool chain</a>. I chose <a href="http://sketchup.google.com/3dwarehouse/details?mid=7e92c69392d7a7fc3d568330a9f92110&amp;prevstart=0" target="_blank">this one by Jeff</a> and colored it with my own textures after assigning the mesh to a cubic prim. The screen is just a pair of thin rectangular prims. For this exercise I didn’t bother with a tripod or other mounting hardware. Further, I’ll assume you can create a slide and place it on you projector, much like this:</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/projector-starting-point.jpg"><img style="border-right:0;border-top:0;display:inline;border-left:0;border-bottom:0;" title="projector_starting_point" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/projector-starting-point-thumb.jpg?w=644&#038;h=382" border="0" alt="projector_starting_point" width="644" height="382" /></a></p>
<p>Create a small cube to hold the RTT camera and position it above the slide near the mirror and lens. The projector I’ve chosen has an offset mirror &amp; lens so I place the RTT camera directly above the slide where the mirror and lens should be. Dimensions of 0.05m cubed should be fine.</p>
<p>Drag a texture on the blank screen and record its UUID. Modify the samplertt.py script in the following ways and save it as overheadrtt.py. The key five lines in my script are:</p>
<p>        pos = self.llGetPos()<br />
        lookAt = pos + Vector3(0, 0, -0.340)<br />
        cameraName = &#8220;overhead_cam&#8221;<br />
        textureId = &#8220;303a8c94-e879-4215-a3a9-43f0cf77caa7&#8221; #slide_texture<br />
        textureWidth = 512<br />
        textureHeight = 512</p>
<p>The script is assigned to the cube by setting the class name to overheadrtt.RttCam (case-sensitive.) The first line gets the position of the cube. The second line tells the camera to look at a point .34m below. You should determine this value by calculating the difference between the center of the cube and the top surface of your slide. (It won’t matter if you use the Z-coordinate of your slide since the slide is very thin.)</p>
<p>After you save the script and restart the Python interpreter, you’ll see an inverted image which may be rotated if you rotated the slide object or the screen object while positioning them. Remove all rotations by setting the angles to zero and try to compensate by rotating and flipping textures. You can also decide whether you want conventional overhead projector behavior where the presenter faces the audience and the slide is oriented the correct way for the presenter, or whether you want the slide oriented towards the audience as it is in my example.</p>
<p>Before we finish, we have to deal with the plywood block. You can shrink it to .001m cubed, change the color and even make it almost transparent. Before you do any of this, link the projector to the cube and edit linked parts to select the cube. It can be very difficult to find a completely transparent cube! A better solution would be to implement a command in the script to toggle its transparency between 0 and 100%. You can combine this action with the existing logic that turns the RTT camera on and off.</p>
<p>If you have a collection of slides in a textures folder, you can drag the textures at will onto the top surface of the slide. You can amuse your audience by moving the slide around with your mouse. (You don’t have to edit the slide prim to do this.)</p>
<p>I leave it as an exercise for the reader to organize a slide flipper and a nice animation for the presenter  to flip the slides.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/29/tutorial-creating-a-overhead-projector-using-an-rtt-camera-in-realxtend/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">277</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/projector-starting-point-thumb.jpg" medium="image">
			<media:title type="html">projector_starting_point</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: Creating a reflecting mirror with an RTT camera</title>
		<link>https://peterquirk.wordpress.com/2008/12/28/tutorial-creating-a-reflecting-mirror-with-an-rtt-camera/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/28/tutorial-creating-a-reflecting-mirror-with-an-rtt-camera/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Sun, 28 Dec 2008 23:43:02 +0000</pubDate>
				<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[3D models]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[mirror]]></category>
		<category><![CDATA[Ogre3D]]></category>
		<category><![CDATA[reflecting]]></category>
		<category><![CDATA[RTT]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=266</guid>

					<description><![CDATA[RealXtend 0.4 includes a new feature from Ogre3D that renders a scene from a particular viewpoint onto a texture. Using this so-called Render-to-Texture (RTT) camera feature we can easily create a mirror for the dresser we constructed in the previous tutorial. The only documentation available on the RTT camera at present is the sample Python [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>RealXtend 0.4 includes a new feature from Ogre3D that renders a scene from a particular viewpoint onto a texture. Using this so-called Render-to-Texture (RTT) camera feature we can easily create a mirror for the dresser we constructed in the <a href="https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/">previous tutorial</a>.</p>
<iframe class="youtube-player" width="500" height="282" src="https://www.youtube.com/embed/6-G4kxrSrV8?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
<p><span id="more-266"></span>The only documentation available on the RTT camera at present is the sample Python script (samplertt.py) in rexserverScriptenginesPythonScriptSamples. Here’s the full code listing:</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/original-source.png"><img loading="lazy" style="display:inline;border-width:0;" title="Original source" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/original-source-thumb.png?w=828&#038;h=604" border="0" alt="Original source" width="828" height="604" /></a></p>
<p>The RTT camera is implemented in the viewer. The rexRTTCameraWorld method (line 35) instructs all avatars in the region to create a camera at position <em>pos</em>, looking in the direction of <em>lookat</em> and render the scene onto any texture with the given <em>textureId</em>. A localized method, rexRttCamera, operates on just the agent invoking the script.</p>
<p>We can use this script with a few small changes to implement a mirror. First, reset the material in the mirror portion of the dresser to blank. In my case, this was the third material in the rex material panel, though the material was called 2_Metal_Corrogated_Shiny.</p>
<p>Next, we need to make thin prim to hold the texture. The “glass” in the dresser model is recessed into the wood, so it is possible to create a thin prim that just touches or penetrates the wooden frame. The following discussion assumes that your dresser is positioned at the south end of a room. You should build the glass prim without any rotations. Otherwise, you&#8217;ll need to code rotations in the script, and that can be painful if you&#8217;re not conversant with rotations in LSL. The dimensions of my mirror were:</p>
<p>X (width) 0.850m<br />
Y (depth) 0.020m<br />
Z (height) 0.608m</p>
<p>The rotations were all 0.0.</p>
<p>The front texture (facing my avatar) was set to 2_Metal_Corrogated_Shiny. When the mirror was carefully positioned in the frame, the effect was indistinguishable from the original design. Assign a name to the prim if you haven&#8217;t already.</p>
<p> <a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step1.png"><img loading="lazy" style="border-right:0;border-top:0;border-left:0;border-bottom:0;" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step1-thumb.png?w=644&#038;h=422" border="0" alt="Step1" width="644" height="422" /></a></p>
<p>Copy the samplertt.py file to samplemirror.py and make the following changes. You don&#8217;t need to shut down the server or the viewer, but you do need access to the server file system and console to do this:</p>
<p>1. Change line 15 to:    <span style="font-size:small;font-family:Calibri;">return &#8220;samplemirror.RttCam&#8221;</span><br />
2. Change line 19 to:  <span style="font-size:small;font-family:Calibri;">print &#8220;samplemirror.RttCam EventCreated&#8221;</span><br />
3. Change line 30 to: <span style="font-size:small;font-family:Calibri;">lookAt = pos + Vector3(0, 0.010, 0)<br />
</span>4. Change line 31 to:  <span style="font-size:small;font-family:Calibri;">cameraName = &#8220;mirror_cam&#8221;</span><br />
5. Edit line 32 by substituting the UUID of 2_Metal_Corrogated_Shiny for the UUID assigned to the textureId variable. (To get the UUID, right-click on the texture in your inventory and &#8220;Copy Asset UUID&#8221;. You can paste this into the editor in the conventional manner.)</p>
<p>Save the samplemirror.py file.</p>
<p>The lookAt parameter above is set to look at the surface of the mirror, which is half the depth in the positive Y direction from the center of the mirror prim.</p>
<p>Edit __init__.py in the sample directory. Add the line &#8220;import samplemirror&#8221; to the end of the file and save it.</p>
<p>When you alter or add a Python script, you need to restart the IronPython scripting engine. You can do this without restarting the entire server by typing &#8220;python restart&#8221; in the opensim console. (In Windows this is the DOS command window with rexserver in the title.) </p>
<p>Edit the glass prim and select the rex tab, Misc sub-tab. Set the class name to samplemirror.RttCam and close the editor dialog. (Note that the portion of the class name after the period must match the case of the name used in the code.)</p>
<p>If you&#8217;ve done everything correctly, clicking on the mirror will result in something like this &#8211; an inverted image! Clicking again will result in the default texture being displayed.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step2.jpg"><img loading="lazy" style="border-width:0;" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step2-thumb.jpg?w=244&#038;h=198" border="0" alt="step2" width="244" height="198" /></a></p>
<p>The inverted image problem is easily fixed by setting the horizontal and vertical flip options in the texture tab for the mirror.</p>
<p>With the basic functionality in place, there are a couple of refinements you should attempt. Firstly, if you zoom in on the reflection you will notice that the image is a little blocky due to the low resolution (caused by the 128 x 128 texture). Secondly, you should be aware that the RTT functionality is optimized for textures whose dimensions are a power of two. The mirror is rectangular. Mine has proportions of .850/.608. The texture has dimensions of 128 x 128. The Python script is coded to capture a 256 x 256 image. You could find or make a model that has mirror with better proportions (square or twice as long in one dimension as another). The approach I took was to use a square mirror (.85 x .85) and a higher resolution texture 256&#215;256. The bottom part of the mirror is buried in the frame so it looks rectangular. I also linked the mirror and dresser, and scaled the combination up a little so that the top of my avatar&#8217;s head was just visible in the mirror. Lastly, the reflections are stronger if you have some local lights.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/28/tutorial-creating-a-reflecting-mirror-with-an-rtt-camera/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">266</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/original-source-thumb.png" medium="image">
			<media:title type="html">Original source</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step1-thumb.png" medium="image">
			<media:title type="html">Step1</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/step2-thumb.jpg" medium="image">
			<media:title type="html">step2</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial: Using the streamlined tool chain for importing Sketchup models into realXtend 0.4</title>
		<link>https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Tue, 23 Dec 2008 01:05:45 +0000</pubDate>
				<category><![CDATA[realXtend]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[3D models]]></category>
		<category><![CDATA[Google 3D warehouse]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Ogre mesh]]></category>
		<category><![CDATA[realXtend_0.4]]></category>
		<category><![CDATA[rexmeshtool]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sketchup]]></category>
		<category><![CDATA[xml2mesh]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=249</guid>

					<description><![CDATA[In a recent post I described changes to the Ogre export scripts for Sketchup to simplify the import of models into realXtend from Google’s 3D warehouse via Sketchup. At the time, there was a bug in the newly-released realXtend 0.4 viewer which prevented the importing of meshes that didn’t have textures associated with some faces. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In <a href="https://peterquirk.wordpress.com/2008/12/11/improving-the-tool-chain-for-bringing-sketchup-models-into-realxtend/">a recent post</a> I described changes to the Ogre export scripts for Sketchup to simplify the import of models into realXtend from Google’s 3D warehouse via Sketchup. At the time, there was a bug in the newly-released realXtend 0.4 viewer which prevented the importing of meshes that didn’t have textures associated with some faces. That problem has now been fixed with the release of a new realXtend viewer. You can fetch the new realXtend.exe from Sourceforge.Net. It’s just a replacement executable, not a complete installer file. Pick up realXtendviewer_0.4_fix.zip <a href="http://sourceforge.net/project/showfiles.php?group_id=220608&amp;package_id=266346">here</a>.</p>
<p>I recommend modeling with Sketchup 7. The new templates for working in different measurement units make it so much easier to build models that transfer correctly to realXtend if you choose one that is in meters. Start with “Simple template – meters” if you can’t decide. If you haven’t installed Google Sketchup, you can get it <a href="http://sketchup.google.com">here</a>. After installing it, you need to add two files to the Sketchup plugins directory. You can retrieve them from <a href="http://cid-ea0e1d9f19828aa4.skydrive.live.com/self.aspx/.Public">here</a>.</p>
<p><span id="more-249"></span>Before following the tutorial steps below, be sure to edit the ogre_export_config.rb file. As distributed, its assumes that the user’s login name is “Peter” and that there is  a folder called “My Models” under “My Documents”. The username on line 39 also needs to be changed unless your login is “Peter”. You must create the target directory “My Models” or whatever you use before running the procedure. Also, edit line 47 to reflect the location of the OgreXmlConverter tool and line 54 to indicate the location of the rexmeshtool.</p>
<p>The following screenshots illustrate how to use the tool chain to import models into realXtend very quickly.</p>
<p>Step 1 – delete the avatar. With the selection tool (arrow) selected, click on the avatar and press the DEL button.</p>
<p>Step 2 – File –&gt; 3D Warehouse –&gt; Get Models…</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/get-models.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="get_models" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/get-models-thumb.png?w=644&#038;h=445" border="0" alt="get_models" width="644" height="445" /></a></p>
<p>Step 3 – In the search box, enter “Bedroom dresser”.</p>
<p>Step 4 – In the search results, select “Dresser with Mirror” by Bearly. We’ll use this model for another tutorial about making mirrors. When you click on the model, you are presented with a more detailed view that allows you to rotate the object and see the sides and back. Note that the dimensions are also provided on the details page.</p>
<p>Step 5 – Click the Download button to load the model into Sketchup. The model is inserted. Your cursor is the four-headed move/copy one, indicating that you can position the object before left-clicking to finalize the placement. Try to place the dresser at the origin, with the model centered on the origin.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/positioning-model.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="positioning_model" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/positioning-model-thumb.png?w=644&#038;h=446" border="0" alt="positioning_model" width="644" height="446" /></a></p>
<p>Step 6 – Make sure the model is selected (highlighted in blue.) If it is not, click the selection tool (the first icon on the toolbar) and click on the model.</p>
<p>Step 7 – Export the model and launch the xml2mesh and rexmeshtool. Tools –&gt; Export Selection to Ogre Mesh</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-selection.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Export_Selection" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-selection-thumb.png?w=644&#038;h=444" border="0" alt="Export_Selection" width="644" height="444" /></a></p>
<p>Step 8 – Enter a name in the popup box that asks for a name for the model and click OK.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-name.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="export_name" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-name-thumb.png?w=231&#038;h=110" border="0" alt="export_name" width="231" height="110" /></a></p>
<p>Step 9 – Verify that the export produced a non-zero number of triangles and click OK to proceed. If you do see a zero triangle count it is because you forgot to select the model before exporting it. Note the number of materials. If it exceeds 12 you will have a problem assigning all the materials in realxtend.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-results.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Export_results" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-results-thumb.png?w=201&#038;h=130" border="0" alt="Export_results" width="201" height="130" /></a></p>
<p>The OgreXlmConverter will be launched in a console window. You will typically see an error message at the end about no skeleton being present – just ignore it. Next you will see the rexmeshtool splash screen. It wants you to select DirectX or OpenGL rendering. It doesn’t matter which one you choose.</p>
<p>Step 10 – Adjust the positioning of the model in the rexmeshtool.</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-initial.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="rexmeshtool_initial" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-initial-thumb.png?w=616&#038;h=484" border="0" alt="rexmeshtool_initial" width="616" height="484" /></a></p>
<ul>
<li>Set the X, Y and Z Align drop downs to “center”. This ensures that the mesh will be centered in the base prim that you map in onto in realXtend</li>
<li>The axes are different between rexmeshtool and realXtend. To rotate the dresser so it faces you, set the Y Rotate value to 90 degrees.</li>
</ul>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-final.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="rexmeshtool_final" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-final-thumb.png?w=616&#038;h=484" border="0" alt="rexmeshtool_final" width="616" height="484" /></a></p>
<p>Step 11 – Click “Save changes &amp; exit”. If you inspect your “My Models” folder, you will now have a sub-folder called “Dresser” and within it will the following files:</p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/file-list.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="File_list" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/file-list-thumb.png?w=644&#038;h=241" border="0" alt="File_list" width="644" height="241" /></a></p>
<p>If any errors occurred in any of the export and conversion steps, they will be listed in the logfiles which are conveniently separated from the logfiles for every other model.</p>
<p>Step 12 – Import the mesh and the materials into realxtend.</p>
<ul>
<li>Create a cubic prim and size it roughly to the proportions of the dresser</li>
<li>In the rex / display tab assign the Dresser mesh to the mesh name</li>
<li>As this point the mesh becomes visible and you can determine whether the orientation is correct for the intended location. I prefer to size the underlying prim to the exact size if known. You will recall from step 4 that the dimensions were listed as 6’ 6 7/16” H x 62” W x 20” D. In metric that’s 1.992m x 1.575m x .508m. Adjust the X, Y and Z size fields in the Object tab to suit your object’s orientation and set the “Scale Mesh to Prim” option in the rex / Display tab.</li>
<li>On the rex / material tab, assign the materials in the order 1_Wood_Cherry, 2_Metal_Corrogated_Shiny (sic), and 2_Metal_Corrogated_Shiny. Note that there are only three materials, not four as reported by the Ogre exporter (presumably because some triangles have been merged.) Note also that the prefix on the materials in this screenshot doesn’t match the filenames above as a result of having to redo some of the screens at a different time.</li>
</ul>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/material-panel.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="material_panel" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/material-panel-thumb.png?w=282&#038;h=484" border="0" alt="material_panel" width="282" height="484" /></a></p>
<p><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/dresser-final.png"><img loading="lazy" style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Dresser_final" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/dresser-final-thumb.png?w=644&#038;h=440" border="0" alt="Dresser_final" width="644" height="440" /></a></p>
<p>Voila! You have a nice dresser, correctly scaled!</p>
<p>You’ll find that this procedure takes very little time once you are familiar with it, typically a couple of minutes. The whole world of the Google 3D Warehouse is now available to you. Please observe the usage rights of model owners. I recommend setting the object description to the TinyURL of the model, which in this case is <a href="http://tinyurl.com/7y8gr5">http://tinyurl.com/7y8gr5</a>.</p>
<p>UPDATE: Learn how to make the mirror reflect like a real mirror using <a href="https://peterquirk.wordpress.com/2008/12/28/tutorial-creating-a-reflecting-mirror-with-an-rtt-camera/">this tutorial</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/22/tutorial-using-the-streamlined-tool-chain-for-importing-sketchup-models-into-realxtend-04/feed/</wfw:commentRss>
			<slash:comments>48</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">249</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/get-models-thumb.png" medium="image">
			<media:title type="html">get_models</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/positioning-model-thumb.png" medium="image">
			<media:title type="html">positioning_model</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-selection-thumb.png" medium="image">
			<media:title type="html">Export_Selection</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-name-thumb.png" medium="image">
			<media:title type="html">export_name</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/export-results-thumb.png" medium="image">
			<media:title type="html">Export_results</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-initial-thumb.png" medium="image">
			<media:title type="html">rexmeshtool_initial</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/rexmeshtool-final-thumb.png" medium="image">
			<media:title type="html">rexmeshtool_final</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/file-list-thumb.png" medium="image">
			<media:title type="html">File_list</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/material-panel-thumb.png" medium="image">
			<media:title type="html">material_panel</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/dresser-final-thumb.png" medium="image">
			<media:title type="html">Dresser_final</media:title>
		</media:content>
	</item>
		<item>
		<title>Virtual worlds and the bureaucratic class</title>
		<link>https://peterquirk.wordpress.com/2008/12/14/virtual-worlds-and-the-bureaucratic-class/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/14/virtual-worlds-and-the-bureaucratic-class/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Sun, 14 Dec 2008 20:15:16 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cobalt]]></category>
		<category><![CDATA[corporate training]]></category>
		<category><![CDATA[Croquet]]></category>
		<category><![CDATA[Edusim]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[LMS]]></category>
		<category><![CDATA[MediaGrid]]></category>
		<category><![CDATA[Moodle]]></category>
		<category><![CDATA[Second Life]]></category>
		<category><![CDATA[Sloodle]]></category>
		<category><![CDATA[VLE]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=224</guid>

					<description><![CDATA[My good friend Gina Minks started a lively debate when she took an opposing position to my good friend Anders Gronstedt who vented his frustration with lawyers, IT pros and HR organizations that block the adoption of social networks and virtual worlds like Second Life. Whose side should I take? Of Second Life, Gina says [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My good friend Gina Minks started a lively debate when she took an <a href="http://gminks.edublogs.org/2008/12/09/the-bureaucratic-class-isnt-what-is-holding-back-second-life/">opposing position</a> to my good friend Anders Gronstedt who <a href="http://www.astd.org/TD/Archives/2008/Dec/0812_Technology.htm">vented his frustration</a> with lawyers, IT pros and HR organizations that block the adoption of social networks and virtual worlds like Second Life. Whose side should I take?</p>
<p>Of Second Life, Gina says that “In [her] experience, it’s not an application that can be integrated into an enterprise environment.” <strong>I have to agree</strong>. The mistake is to think that you integrate Second Life or another other virtual world existing in the cloud into an enterprise. The trick is to work out how to integrate the enterprise into Second Life. Second Life is not just an application outside the firewall like Kenexa’s Brassring or ADP’s payroll services.  It’s a constellation of communities, creative individuals, micro-applications, an economy, government embassies, educational institutions, large corporations and small businesses, all evolving in strange and wonderful ways. We don’t integrate the Canadian market into an enterprise any more than we integrate the world of Second Life into the enterprise. It behooves the enterprise to determine whether there’s value in integrating into Second Life, and how its customers, partners, employees, competitors, shareholders and analysts might use this rich and social communication channel to interact with the company.</p>
<p><span id="more-224"></span>Gina mentions the problems connecting to the rapidly expanding Second Life grid. These problems are strictly a function of technologies like NAT’ed firewalls and a company’s security policies. They’re not something you can change overnight or inexpensively. However, Second Life is the canary in the coalmine here. If an enterprise can’t manage connections to the Second Life grid which is growing by hundreds of servers per month, there’s no way the enterprise can connect to the sprawling cloud services of companies like Microsoft. (See this <a href="http://video.msn.com/video.aspx?mkt=en-us&amp;vid=b4d189d3-19bd-42b3-85d7-6ca46d97fe40">short video</a> for a brief overview of a highly dynamic containerized data center that can move around to take advantage of cheaper land or power and faster internet connections.) There’s a big impedance mismatch between the rigid, predictable highly managed network run by IT and the wispy nature of the cloud.</p>
<p>To be fair to IT here, the problem is not just connectivity. Even assuming that there are no virus threats in a typical virtual world viewer, there are compliance and trust issues. IT has to ensure that sensitive content (intellectual property, employee data, customer data) is not made public by an employee exposing such data either by copying it to the virtual world or building an integration bridge between enterprise applications and the virtual world in the cloud. Most IT organizations buy compliance engines from network equipment vendors and are thus constrained by the filtering technology provided by the vendors.</p>
<p>The trust issues in virtual worlds arise from the peculiar insistence that your name in Second Life can’t be your real name and from the absence of any facility for a corporation to attest to the identity of someone purporting to represent the company. This is not a problem unique to virtual worlds as Sarah Palin well knows from her interview with the fake Nicolas Sarkozy.</p>
<p>The challenges of integrating into Second Life prompt some enterprises to implement Opensim, realXtend, Olive, Qwaq or other virtual worlds inside the firewall. It is a great way to expose the company to the capabilities of these platforms for collaboration, data visualization, simulation, training, media production, etc. The costs are probably higher than for Second Life since there are fewer sources of assets (content) and services. Opensim and realXtend are still alpha quality. Qwaq is extremely new and generally requires Smalltalk skills to extend it. The freelance designers and consultants who can meet you in Second Life can’t meet you inside the firewall unless you bring them to your physical facilities or arrange VPN access for them. Even then, it’s extremely difficult for them to bring assets into your private world from the external ecosystem. Without those experienced designers, builders and scripters the learning curve for the enterprise is definitely steep. (We constantly use the word steep when we mean shallow – the time axis is horizontal and the vertical access is proficiency, so a complex system has a shallow learning curve.) The more expensive systems like Olive include rich asset libraries and usually include some packaged consulting.</p>
<p>I know from discussions with Gina that her views are shaped by her particular training challenges. Part of Gina’s group develops technical training for hardware systems still in beta. The technical documentation is incomplete, there are bugs in the products, and demo hardware is hard to acquire in sufficient quantities. Their target audience is the trainers who will train others, and the first teams who will install and support the beta equipment at customer sites. The team doesn’t have time to develop detailed models of storage devices, controllers, connectors, cables, etc., and script them to slide in and out of racks, expose their inner workings and animate the replacement of field replaceable units.</p>
<p>Another part of Gina’s group develops training materials for partners and customers. The challenge here is keeping up with the constantly changing functionality of the software. The production cycle for the instructional materials is already quite long, and having to maintain materials in an additional format could be burdensome, especially when the tools to move assets from one environment to another are limited or non-existent.</p>
<p><a href="http://www.sloodle.org/moodle/">Sloodle</a> is the first attempt to wrap a 3D interface around a 2D course management system. It enables the projection of 2D content  (course schedules, chat rooms, quizzes, slide presentations, etc.) from <a href="http://moodle.org/">Moodle</a>-based systems into Second Life virtually immediately. It’s an interesting first step but doesn’t go very far towards reusing 2D assets in a 3D world. Moreover, it doesn&#8217;t attempt to address the issue of presenting animated 3D objects from Autocad or 3D Studio Max into Second Life. The only other 3D VLE (Virtual Learning Environment) that I know of is <a href="http://edusim3d.com/">Edusim</a>, a Croquet-based teaching environment driven by a provider of interactive electronic whiteboards used in classrooms. Some progress has been made recently in bringing Collada-based assets into <a href="http://www.opencroquet.org/index.php/Main_Page">Cobalt, a new viewer for Croquet-based worlds</a>. Neither of these tools directly addresses the needs of corporate instructional designers or corporate learners.</p>
<p>Proprietary LMSes will eventually adopt a 3D front-end, but whether they adopt the common open source platforms or continue their proprietary practices remain to be seen. The Immersive Education Initiative is working to accelerate the adoption of immersive environments by developing cross-world data standards (<a href="http://mediagrid.org/groups/technology/OFF.TWG/">Open File Formats</a>) and a open education grid (<a href="http://www.mediagrid.org/">MediaGrid.org</a>) for the exchange of educational assets (including SCORM-compliant assets used in many corporate environments today.) The MediaGrid should provide Gina’s team with a choice of platforms, tools and basic assets (classroom affordances for example) as well as best practices and a community of subject matter experts to draw on. Her IT organization will still have to solve the problem of connecting to a dynamic multi-platform grid or her team will be denied access to increasingly valuable tools and knowledge.</p>
<p>There’s a lost opportunity here which needs an organizational solution. If the 3D assets had been built by a corporate design group that focuses on long-lived or reusable assets, the ROI would be dramatically different. Imagine that the engineering CAD systems deliver simplified meshes of the new products to this design group. The design group, versed in the virtual worlds technologies that the company uses, prepares assets for Gina’s training team, for the video group doing animations for the launch video, for the virtual trade show platforms used to reach customers far from the trade shows in New York, San Francisco or Las Vegas. They use these assets  to populate virtual data centers attached to virtual Executive Briefing Centers. Gina’s team now has options. The first training class may well be done in the conventional way due to time pressure. Learning from this initial training course, her team delivers the second wave of training on a global scale using a combination of simulations in a virtual world, video from the first class, plus real-time collaboration with the trainers and the first wave of experts who are now in the field with some installation experience under their belts.</p>
<p>There’s a precedent for this central group of designers  who prepare reusable assets – it’s the corporate presentation or art department that develops the PowerPoint presentations and Flash animations that the rest of the company repurposes for specific situations. Few of us have the time to develop the skills to build Flash animations, but we recognize when they should be used and happily leverage the corporate resources that can produce them.</p>
<p>So far we’ve only discussed training materials originating inside the corporation. For today’s continuous, just-in-time learners access to material outside the corporation is just as important. Most canned content is accessible to corporations for read-only consumption. The challenge comes with multimedia content combined with live commentary from participants (text and/or voice) or with 3D content in Second Life or other public virtual worlds. The compliance issues associated with monitoring content in those interactive channels cause many IT organizations to declare them off-limits because their compliance filters and e-Discovery archivers only work with email or HTTP traffic on port 80. As more 3D content becomes available on mobile phones, this stance will become increasingly untenable.</p>
<p>What about cultural issues? They are really, really tough to change. To give just one example &#8211; Anders and I sat through a presentation yesterday where the speaker talked about the confrontational culture in his company. It was prized as being almost Darwinian in its ability to select the best ideas. Despite support from the most senior executives for virtual meetings, the middle and upper management objected that the technologies prevented them from shouting and bullying. It sounded like a company that eats its young.</p>
<p>Perhaps the toughest cultural challenge for companies adopting virtual worlds for training is the participatory nature of many of these worlds. These are not platforms for projecting content and people into the physical world in the way that LiveMeeting or Webex are. They are much more akin to distributed Lego Mindstorms(tm) kits. Leave the room for a little while and someone will combine the parts and re-program them in ways that you didn’t anticipate. The trick is to build a culture that wants to leverage the kind of creativity that a Lego Mindstorms kits generate.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/14/virtual-worlds-and-the-bureaucratic-class/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">224</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>
	</item>
		<item>
		<title>Improving the tool chain for bringing Sketchup models into realXtend</title>
		<link>https://peterquirk.wordpress.com/2008/12/11/improving-the-tool-chain-for-bringing-sketchup-models-into-realxtend/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/11/improving-the-tool-chain-for-bringing-sketchup-models-into-realxtend/#comments</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Fri, 12 Dec 2008 04:51:13 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google 3D warehouse]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Ogre mesh]]></category>
		<category><![CDATA[realXtend]]></category>
		<category><![CDATA[realXtend_0.4]]></category>
		<category><![CDATA[rexmeshtool]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sketchup]]></category>
		<category><![CDATA[xml2mesh]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/2008/12/11/improving-the-tool-chain-for-bringing-sketchup-models-into-realxtend/</guid>

					<description><![CDATA[Back in July I posted a tutorial on how to use Google Sketchup to bring models from the Google 3D Warehouse into realXtend. It proved to be the most popular article ever, and has been translated into a number of languages. The process has a number of manual steps which annoyed me. Another concern was [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Back in July I posted a <a href="https://peterquirk.wordpress.com/2008/07/15/taking-sketchup-models-into-realxtend/">tutorial</a> on how to use Google Sketchup to bring models from the Google 3D Warehouse into realXtend. It proved to be the most popular article ever, and has been translated into a number of languages. The process has a number of manual steps which annoyed me. Another concern was the way that the exporter script dumped all objects in the same directory, but the xml2mesh tool (or rexmeshtool?) would crash if there were .material files from multiple models in the directory. My original process included a batch file to cloak all .material files from other models by adding a .cloaked suffix and  another script to uncloak It was also clear from questions from readers that the process was error prone. Yesterday I decided to fix it.</p>
<p><span id="more-219"></span>The solution involved hacking the Ruby scripts to create a separate folder for each model exported from Sketchup, and invoking the rexmeshtool application after the OgreXmlConverter was run. A side benefit of the process is that the log files for each export and conversion are stored in the model’s folder.</p>
<p>Since I was using a newly built PC, I installed the just-released Sketchup 7 and started to modify the <a href="http://www.di.unito.it/~nunnarif/sketchup_ogre_export/">scripts</a> mentioned in the tutorial. (The scripts were written by Fabrizio Nunnari, based on the initial script by Kojack.)  When I finally tested the results this morning, realXtend 0.4 wouldn’t import the meshes. Since I was using a new version of Sketchup, a new version of realXtend and a freshly rebuilt laptop, I had to test a number of configurations to determine where the problem lay. I was able to import the meshes produced by Sketchup 7 into rexserver 0.31 using rexviewer 0.31 on an older laptop, but could not import them using the rexviewer 0.4 connected to rexserver 0.31. I logged a bug report in SourceForge this afternoon and posted a message in the realXtend group. Eight minutes later Gustavo Alberto Navarro Bilbao confirmed that he had discovered the same problem with realXtend 0.4. I have subsequently verified that the meshes can be loaded without errors by the <a href="http://www.pelicancrossing.com/forum/viewtopic.php?t=974">Cegui Mesh Viewer</a>.</p>
<p>Since I had to learn Ruby yesterday to modify the exporter script, and the author of the script was also a first time Ruby coder, I’ll do a little cleanup before I post the revised scripts here (today or tomorrow). The scripts are not backward-compatible with Sketchup 6. If possible, I’d like to address that problem before I release them. If any Sketchup plugin developers have pointers to the API documentation for chdir, mkdir_p and similar calls for Sketchup 6, please drop me a comment.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/11/improving-the-tool-chain-for-bringing-sketchup-models-into-realxtend/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">219</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>
	</item>
		<item>
		<title>realXtend 0.4 released, further outpacing Second Life(tm) visual effects</title>
		<link>https://peterquirk.wordpress.com/2008/12/02/realxtend-04-released-further-outpacing-second-lifetm-visual-effects/</link>
					<comments>https://peterquirk.wordpress.com/2008/12/02/realxtend-04-released-further-outpacing-second-lifetm-visual-effects/#respond</comments>
		
		<dc:creator><![CDATA[Peter Quirk]]></dc:creator>
		<pubDate>Wed, 03 Dec 2008 04:26:48 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[materials]]></category>
		<category><![CDATA[meshes]]></category>
		<category><![CDATA[Ogre]]></category>
		<category><![CDATA[realXtend]]></category>
		<category><![CDATA[realXtend_0.4]]></category>
		<category><![CDATA[Second Life]]></category>
		<guid isPermaLink="false">http://peterquirk.wordpress.com/?p=211</guid>

					<description><![CDATA[RealXtend 0.4 was released today with a sample world that really begins to show the superiority of the Ogre-based graphics over the traditional prims and sculpties of Second Life. Major features of this release include a full implementation of Ogre materials and material scripts, including lighting effects and a material editor. Ogre materials can be used on [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>RealXtend 0.4 was released today with a sample world that really begins to show the superiority of the Ogre-based graphics over the traditional prims and sculpties of Second Life.</p>
<div data-shortcode="caption" id="attachment_212" style="width: 520px" class="wp-caption aligncenter"><a href="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg"><img aria-describedby="caption-attachment-212" loading="lazy" data-attachment-id="212" data-permalink="https://peterquirk.wordpress.com/2008/12/02/realxtend-04-released-further-outpacing-second-lifetm-visual-effects/inside_001/" data-orig-file="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg" data-orig-size="1440,844" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="inside_001" data-image-description="" data-image-caption="&lt;p&gt;Opening scene in Beneath the Waves&lt;/p&gt;
" data-medium-file="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=300" data-large-file="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=500" class="size-full wp-image-212" title="inside_001" src="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=500" alt="Opening scene in Beneath the Waves"   srcset="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=510&amp;h=299 510w, https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=1020&amp;h=598 1020w, https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=150&amp;h=88 150w, https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=300&amp;h=176 300w, https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg?w=768&amp;h=450 768w" sizes="(max-width: 510px) 100vw, 510px" /></a><p id="caption-attachment-212" class="wp-caption-text">Opening scene in Beneath the Waves</p></div>
<p>Major features of this release include a full implementation of Ogre materials and material scripts, including lighting effects and a material editor. Ogre materials can be used on meshes, primitives and particles. Flash animations are supported, and used frequently in the quest embedded in the sample world. (If at first you&#8217;re puzzled about how to proceed, approach one of the fish sculptures and click on it. From there you should be able to work everything else out. There are more clues in the video below.) Mozilla plugins are discoverable by the embedded browser, so lots of new functionality should be possible. Another foundation feature that enables a more realistic world is mesh animations. From fish to flexible trees to caterpillars, these animated meshes will add a huge amount of realism (and fantasy) to realXtend worlds.</p>
<p>Once you can present a realistic animal or a rustling tree, it needs to make sounds that emanate from it, so there&#8217;s now support for location-based sound loops. And to move that animal over the landscape or under the waves, there&#8217;s a new rexbot feature that allows you to control the locomotion of these non-player characters.</p>
<p>There&#8217;s so much more to describe, but it will take quite a few postings to cover any of these features in adequate detail. I&#8217;ll focus the next few posts on those features can enhance enterprise applications. For now I&#8217;ll leave you with the short video and encourage you install it and try it out.</p>
<iframe class="youtube-player" width="500" height="282" src="https://www.youtube.com/embed/MHWXIbCqxLc?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
]]></content:encoded>
					
					<wfw:commentRss>https://peterquirk.wordpress.com/2008/12/02/realxtend-04-released-further-outpacing-second-lifetm-visual-effects/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">211</post-id>
		<media:content url="https://0.gravatar.com/avatar/023372fc38c5607d085d193fa144e3da4eb31f711eabda3184ab263de4643818?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterquirk</media:title>
		</media:content>

		<media:content url="https://peterquirk.wordpress.com/wp-content/uploads/2008/12/inside_001.jpg" medium="image">
			<media:title type="html">inside_001</media:title>
		</media:content>
	</item>
	</channel>
</rss>
