
1 Introduction
What is XRemote?
System Requirements
QuickStart!
Input Guide
2 Technical Information
Design Plan
Class Architecture
Mode Tree
Source Code
What the files are and where they go
Tested Hardware
3 FAQ
Frequently asked questions
4 Images
Screenshots
Prototype evolution
World key

Click to download XRemote
1 Introduction
What is XRemote?
A 3D remote control for the Internet, Communication, Radio/TV and CD/DVD.
System Requirements
Pentium 4 with 2GB RAM
Windows2000/XP/Vista
256MB video card with DirectX 9.0 Shader Model 3.0 hardware
TV Tuner card(optional)
Web Cam(optional)
QuickStart!
Step 1: Download XRemote.
Step 2: Make a directory and extract the zip file into it.
Step 3: Download and install the latest DirectX runtime here.
http://www.microsoft.com/downloads/Browse.aspx?displaylang=en&categoryid=2
Step 4: Download and install the current MSVC dlls for Visual Studio 2005 SP1 redistribution here.
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2
Step 5: Download ETOPO2v2c_i2_LSB.zip from this link:
http://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2c/raw_binary/ETOPO2v2c_i2_LSB.zip
and unzip the files into the .\xremote\media\xworld\dem directory.
Step 6: Download any ortho files you want to view from this link:
http://www.mass.gov/mgis/dwn-imgs.htm
and place them into the .\xremote\media\world\ortho directory.
Step 7: Run the xremote.exe executable.
Step 8: Explore the Net, talk to friends, tune into the
radio/TV or play some CD/DVD.
Input Guide











2 Technical Information
Design Plan

Class Architecture

Mode Tree

Source Code
xremote.txt
xremote.h
xremote.cpp
xremote.vsh
xremote.psh
xremote.ini
xremote.xml
xremote.log
What the files are and where they go

Tested Hardware
XRemote was developed on the following hardware:
Core
Asus Vento 3600 case
Asus ATX 500W power supply
Intel D101GGC MicroATX motherboard
Intel Pentium 4 Prescott 640 3.2Ghz CPU
Kingston 2GB DDR400 RAM
Western Digital 250GB HD
Asus IDE DVD Burner
QuickTV TV/FM tuner card
RCA Antenna
Logitech QuickCam

Asus Vento 3600 case
Antec 450W power supply
Intel DG965WH MicroATX motherboard
Intel Pentium 4 Prescott 640 3.2Ghz CPU
Kingston 2GB DDR2800 RAM
Western Digital 250GB HD
Asus IDE DVD Burner
ATI Wonder 650 HDTV/FM tuner card
Terk HD Antenna
Logitech QuickCam

SilverStone Sugo SG05 case
Intel DG45FC mini-ITX motherboard
Intel Core 2 Duo E8400 Wolfdale 3.0GHz LGA 775 65W Dual-Core CPU
Kingston 4GB DDR2800 RAM
Lacie 1TB HD
LG USB external DVD Burner
Hauppauge HVR-1950 HDTV/FM USB external tuner
Terk HD Antenna
Microsoft VX-7000 LifeCam

Audio Components
RealTek chipset
Sigmatel chipset
Logitech X-530 5.1 speakers
Video Components
ATI Radeon Xpress 200 IGP
Intel G965 X3000 IGP
Intel G45 X4500 IGP
Viewsonic 19" VA902b LCD
Hanns-G 27.5" HG281D LCD
Input Devices
Logitech Wired keyboard
Microsoft Wired keyboard
Microsoft Wireless keyboard/mouse
Microsoft Univeral remote control
Microsoft Wireless XBox360 controller

3 FAQ
Frequently asked questions
General
What inspired XRemote?
What exactly is XRemote and what does it do?
Why would I want to use XRemote over any other media player or TV tuner software out there?
What are XRemote's shining qualities over other software like itself?
What is the current state of functionality available in the beta?
When will XRemote become version 1.0?
How much does XRemote cost?
What are some good questions to add to this FAQ?
XRemote boot issues
Why am I getting the error, "'The application has failed to start because it's side-by-side configuration is incorrect'", when I try to run XRemote?
How come when I run XRemote it appears to run but nothing is rendered to the window?
Why does XRemote crash when I use F5 to toggle fullscreen mode?
Building XRemote
What do I need to build the XRemote project?
What books do you suggest to read to learn how to understand and code for XRemote?
XTemple
What is XTemple?
What do I need to click to get to the XTemple modes?
How do I add/delete objects from the loaded XTemple 3D mesh object?
How does the XTemple Light mode work?
How does the XTemple World mode work?
How does the XTemple Cam mode work?
XWorld
What is XWorld?
What do I need to click to get to the XWorld modes?
How do I add/delete ortho textures from the loaded XWorld texture cache?
How does the XWorld 500m mode work?
How does the XWorld 4km mode work?
How does the XWorld 28km mode work?
XChannel
What is XChannel?
What do I need to click to get to the XChannel modes?
How do I add/delete channel keys from the loaded XChannel key file?
How does the XChannel Net mode work?
How does the XChannel Comm mode work?
How does the XChannel Tuner mode work?
How does the XChannel Player mode work?
License
How does XRemote's license work?
General
Q. What inspired XRemote?
A. Lack of a good "container/program" for controlling the Internet,
Communications, Radio/TV and CD/DVD. Also, the fact that Windows
Media Player and Windows Media Center have become overly bloated.
Q. What exactly is XRemote and what does it do?
A. At the start, XRemote was just supposed to be a better piece of
software to run my TV tuner to watch TV on my PC while I chatted
online. Eventually, it became what it is now. XRemote is the
following things:
1. An application that allows you to browse the Internet.(XNet)
2. An application that allows you to communicate with people online.(XComm)
3. An application that allows you to interact with your TV tuner.(XTuner)
4. An application that allows you to catalog, sort and interact with
your book, cd and dvd collections.(XPlayer)
5. An application that allows you to visualize the height field
of the Earth as well as store and view orthographic photos.(XWorld)
6. An application that allows you to build a 'Temple' out of 3D
mesh objects by adding them to a flat file database, as well
as interact with the model by changing the Light, World or Camera.(XTemple)
7. An application that you can use to learn how to program in C/C++ on Windows.
Q. Why would I want to use XRemote over any other media player or TV
tuner software out there?
A. The reasons are simple. On the TV tuner side, there is no good TV
tuner software out there. Most all the software included with TV
tuners on the market today is slow, with a cumbersome user interface.
If you use Windows Media Center to access your TV tuner, you can
expect multiple processes and threads running in the background,
searching for program guide data and frequently accessing the
internet in the background. It slows down the system besides it
being annoying and invasive to privacy. XRemote solves the speed
and user interface issues associated with TV tuner software. As for
using other media player software, there is plenty of good stuff out
there. I used to use WinAmp as it was always better and 'cooler' than
the media player that came with Windows. Windows Media Player has
caught up considerably, and integrates well with MP3 players and
online stores, but it is still bloated. While the UI is improved,
it still is stuck in '2D Windows land'. Your screen real estate is
eaten up by the Windows UI controls that hog screen space. You can
only view so many albums at once even if the application is maxed
to the screen. With XRemote running fullscreen, you can see your
entire CD collection if it is under 512 CD's. The ability to
view all your CD's at once, as well as sort them into 3D columns
greatly improves your ability to mentally catalog your music
collection. Not only does the interface allow easier and faster
music selection access, it also helps with remembering the music
you own. XRemote is also very responsive and can interact with
keyboards, mice, remote controls as well as xbox controllers.
For those reasons, XRemote is a more desirable choice to catalog
and interact with your music, movie and book collections as well
as control your TV tuner.
Q. What are XRemote's shining qualities over other software like itself?
A. XRemote shines because:
1. You get the source code.
2. Simple, speedy, modular 3D user interface which allows modification through the use of '3D Skins'.
3. Catalogs books, cds and dvds, allows TV tuner interaction, as well as Internet chat and browsing.
4. Takes advantage of your GPU for something besides games.
5. Low cost.
Q. What is the current state of functionality available in XRemote?
A. XPlayer is in beta and feature complete. XTemple and XWorld are in beta. XTuner and XComm are in alpha. XNet exists only in my head.
Q. When will XRemote become version 1.0?
A. As soon as the XTuner code is hooked back up to access ATSC high
definition TV and when XComm is cleaned up and has audio and video support added.
Q. How much does XRemote cost?
A. $22. See License below to see what that $22 gets you.
Q. What are some good questions to add to this FAQ?
A. Good question. Email any to lharrison74@verizon.net to submit for addition.
XRemote boot issues
Q. Why am I getting the error, "'The application has failed to start
because it's side-by-side configuration is incorrect...'", when I try
to run XRemote?
A. You have to install the latest Microsoft DLLs. Complete Step 4 in
the Quick Start guide above.
Q. How come when I run XRemote it appears to run but nothing is rendered to the window?
A. After trying to run XRemote on an Acer 2GB laptop with Intel G965 X3100,
I noticed the video memory in the BIOS was only set to 8MB, even though
the system uses Unified Memory Architecture(UMA) and lets the integrated
graphics chip use system RAM as video memory. Unfortunately, the BIOS
didn't allow allocating more system memory to video memory, which some
configurations allow. XRemote requires quite a bit of video memory to
store all its textures, so unless you can upgrade to a discrete video
card, or try getting a laptop with the new Intel G45 X4500 chipset which
has better UMA memory management, XRemote won't run on your system.
Q. Why does XRemote crash when I use F5 to toggle fullscreen mode?
A. When first developing XRemote, I noticed how when you changed to
fullscreen mode, the Direct3DDevice object would invalidate all
resources that had been previously loaded under it. To keep the
code clean, I just deleted everything and reloaded it all when you
switched to fullscreen mode. Somewhere along the line, after adding
the textures for the books, cds and dvds, XRemote started crashing,
and tracking down the bug became a headache I put off till later.
For now, when I want to run XRemote fullscreen, I just edit the
xremote.ini file and change the flag for fullscreen to 1. That
immediately starts XRemote fullscreen and works fine. I learned that
in DirectX 10, the resources aren't invalidated when changing to
fullscreen mode, so when XRemote is ported to DirectX 10, I will
figure out and fix this issue. Until then, just use xremote.ini to
run fullscreen.
Building XRemote
Q. What do I need to build the XRemote project?
A. First, you need to install a compiler like Microsoft Visual Studio.
I'm not sure if you can use the Express version they offer for free
as I haven't tried that yet, but it might work. After that, you
should install the latest version of the DirectX SDK. Before opening
the xremote.sln file, edit the xremote.vcproj file to correct for
the directory names for the DirectX SDK. After that, open xremote.sln
and click Build. You will probably get some errors that you will have
to track down. One thing that you will need to build is a DirectShow
library called strmbase.lib and strmbasd.lib. The project for that
library can be found in the DirectX Extras download. After making
sure you have all the libs and everything is in the right directory,
XRemote should compile. If not, feel free to email the author at
lharrison74@verizon.net and I'll see if I can track down the problem.
Q. What books would you suggest to learn how to understand and code for XRemote?
A. Here are a few to look into:
Kris Gray
Microsoft DirectX 9 Programmable Graphics Pipeline(2003)
Stuart K Card, Jock D Mackinlay, Ben Shneiderman
Readings in information visualization, using vision to think(1999)
ACM Siggraph
Siggraph 2000, Electronic Art and Animation Catalog(2000)
ACM Siggraph
Computer Graphics Proceedings, Annual Conference Series, 1999(1999)
ACM Siggraph
Computer Graphics Proceedings, Annual Conference Series, 2000(2000)
Julio Sanchez, Maria P Canton
Space Image Processing(1999)
Tim Wegner
Image Lab, explore, manipulate and create images on your PC(1992)
Tom Hayward
Adventures in Virtual Reality, a hitchhiker's guide to the expanding world of virtual reality(1993)
William H Roetzheim
Enter the complexity lab, where chaos meets complexity(1994)
Stephen Prata
Artificial life playhouse, evolution at your fingertips(1994)
Steve Rimmer
Bit-mapped graphics, 2nd Edition(1993)
Nigel Thompson
3D graphics programming for Windows 95, C++ programming techniques with Direct3D(1996)
Rob Glidden
Graphics programming with Direct3D, techniques and concepts(1997)
Julio Sanchez, Maria P Canton
DirectX 3D Graphics Programming Bible(2000)
Peter J Kovach
The Awesome Power of Direct3D-DirectX(1998)
Andre LaMothe, John Ratcliff, Mark Seminatore, Denise Tyler
Tricks of the game programming gurus(1994)
Mason McCuskey
Special effects game programing with DirectX(2002)
Peter Walsh
The Zen of Direct3D game programming(2001)
Kelly Dempski
Real-time rendering tricks and techniques in DirectX(2002)
Paul Whitehead
Teach Yourself VISUALLY, Networking, 2nd Edition(2000)
Tracey LaQuey, Jeanne C Ryer
The Internet Companion, a beginner's guide to global networking(1992)
P J Louis
Telecommunications Internetworking, delivering services across the networks(2000)
Bob Quinn, Dave Shute
Windows Sockets Network Programming(1996)
Douglas E Comer
Internetworking with TCP-IP, Volume I principles, protocols and architecture, 2nd Edition(1991)
Douglas E Comer, David L Stevens
Internetworking with TCP-IP, Volume II design, implementation and internals(1991)
Douglas E Comer, David L Stevens
Internetworking with TCP-IP, Volume III client-server programming and applications(1993)
Emily Vander Veer, Rev Mengle
XML, Your visual blueprint for building expert web pages(2001)
Peter Coad, Jill Nicola
Object-oriented programming(1993)
Mark Watson
Portable GUI development with C++(1993)
Roger Sessions
Class Construction in C and C++, object-oriented programming fundamentals(1992)
Bjarne Stroustrup
The C++ programming language, 2nd Edition(1991)
Christopher D Watkins, Stephen B Coy, Mark Finlay
Photorealism and ray tracing in C(1992)
Roger T Stevens
Fractal Programming and Ray Tracing in C++(1991)
Christopher D Watkins, Larry Sharp
Programming in 3 dimensions, 3-D graphics, ray tracing, and animation(1992)
Roger S Pressman
Software engineering, a practioner's approach, 3rd Edition(1992)
Ellis Horowitz, Sartaj Sahni, Susan Anderson-Freed
Fundamentals of data structures in C(1993)
Steve Maguire
Writing Solid Code, Microsoft's techniques for developing bug-free C programs(1993)
Virginia Howlett
Visual Interface Design for Windows, effective user interfaces for Windows 95, Windows NT and Windows 3.1(1996)
Charles Petzold
Programming Windows 95, the definitive developer's guide to the Windows 95 API(1996)

XTemple
Q. What is XTemple?
A. XTemple is a 3-mode module within XRemote that allows the user to
alter the location of the point light of the 3D scene, alter the
world matrix of XRemote's 3D scene and manipulate the camera view
on the 3D scene. Click here to see the
input for these modes.
Q. What do I need to click to get to the XTemple modes?
A. Press the F8 key or use the XBox Controller DPad left and right
to cycle through the XTemple modes.
Q. How do I add/delete objects from the loaded XTemple 3D mesh object?
A. You have to do two things. First, delete the files 'xoTemple_Home.bmp'
and 'xoTemple_Foundation.bmp' from the '\xremote\media\xtemple\texture'
directory. These files are recreated from the loaded textures from
'xRemoteData_xTemple_xHome_xMesh_texture' and
'xRemoteData_xTemple_xFoundation_xMesh_texture' keys stored in
xremote.xml. Then, add or delete keys from xremote.xml of the 3D mesh
objects and textures, as well as their location in 3D, into the file.
The next time you run XRemote, the xoTemple_Home.bmp and
xoTemple_Foundation.bmp are recreated from this data. The 3D mesh
model of the entire scene is generated at runtime each time you
run XRemote.
Q. How does the XTemple Light mode work?
A. XRemote's lighting is accomplished with 2 lights, 1 directional and 1 point
light. While the directional light is hard-coded and used mainly by the UI,
the point light is moved to different locations as the user changes modes.
This mode allows the user to manipulate the light using any input device,
as well as toggle the render state of the XTemple.
Click here to see the input for this mode.
Q. How does the XTemple World mode work?
A. Unless a 3D object's parent matrix is set to 0 in XRemote code, all 3D
objects are contained under one parent world matrix. This matrix can be
moved, rotated and recentered in this mode.
Click here to see the input for this mode.
Q. How does the XTemple Cam mode work?
A. This mode allows the user to move the camera viewpoint of the 3D scene.
Click here to see the input for this mode.
XWorld
Q. What is XWorld?
A. XWorld is a 3-mode module within XRemote that allows the user to
alter the location of the 3D rendered height field of the Earth
stored in memory. It also allows the user to move the viewpoint to
view orthographic textures stored in memory from a parallel and
topdown view plane. Click here to see
the input for these modes.
Q. What do I need to click to get to the XWorld modes?
A. Press the F9 key to cycle through the XWorld modes.
Also, use the right control key plus the up and down
arrows to cycle modes.
Q. How do I add/delete ortho textures from the loaded XWorld texture cache?
A. Add or delete 'xRemoteData_xWorld_orthoquad' keys from xremote.xml of
the ortho textures you want loaded at startup into the XWorld texture
cache. XRemote will take the data loaded from xremote.xml orthoquad keys
and turn each key into a file and load it into the cache. The filename
is formed like this: '\xremote\media\xworld\ortho\quadxX_quadzZ.bmp',
where 'quadx' and 'quadz' are the key values from xremote.xml.
Q. How does the XWorld 500m mode work?
A. Use this mode to view your library of books, cds and dvds up close, check out
a loaded ortho map location or view the XTemple 3D model scene you've
created.
Click here to see the input for this mode.
Q. How does the XWorld 4km mode work?
A. This mode allows you to view a subset of the 3D height field of the
Earth generated in realtime. The data consists of average distances above
and below sea level for the surface of the planet in 4km by 4km squares.
Initially, the data was packed as 10800x5400 2-byte values, but after
XRemote runs for the first time, it converts and saves the data into
10080x5040 2-byte values for ease of grid generation. The data is displayed
at 20 times scale to exaggerate the cliff features.
Click here to see the input for this mode.
Q. How does the XWorld 28km mode work?
A. This mode works identical to XWorld 4km but moves at a scale of 28km instead
of 4km with its view at a greater height.
Click here to see the input for this mode.
XChannel
Q. What is XChannel?
A. XChannel is a 4-mode module within XRemote that allows the user to
play digital media, access a TV tuner, chat online and browse the Internet.
Click here to see the input for these modes.
Q. What do I need to click to get to the XChannel modes?
A. Press the F7 key to cycle through the XChannel modes.
Also, use the right control key plus the up and down
arrows to cycle modes.
Q. How do I add/delete channel keys from the loaded XChannel key file?
A. At this point in time, the only keys that matter are for the XChannel XPlayer
mode. The main keys to be concerned with are:
- 'xPlayer_booksort_genre'
- 'xPlayer_booksort_timeline'
- 'xPlayer_cdsort_genre'
- 'xPlayer_cdsort_timeline'
- 'xPlayer_cdsort_playlist'
- 'xPlayer_dvdsort_genre'
- 'xPlayer_dvdsort_timeline'
- 'xPlayer_book'
- 'xPlayer_cd'
- 'xPlayer_playlist'
- 'xPlayer_dvd'
- 'xPlayer_folders'
The sort keys allow you to add/remove sorting types. The book, cd, and dvd
keys allow you to add/remove new media into your library. The playlist keys
allow cd music song playlists for XPlayer. The xPlayer_folders key allows
you to add/remove directories for use in the sub-mode XFolder in XPlayer.
This mode opens each file in the specified directory, takes a snapshot of
the image or first still of a movie file, then stores all the snapshots in
a thumbnail file named xthumbs.jpg. This mode can be used to create covers
for movies or books that you add to the library. If you've loaded XRemote
and notice all the book, cd and dvd cover art is blank and missing, thats
the way its supposed to be. All my digital media was just included to show
what the system could do. If you want to download the compiled cover art
just to check it out, download the following files and place them in the
appropriate \library directory. After running XRemote, each cover art file
is compiled into a large 4096x4096 texture for use in display. If you ever
want to recompile these textures after you add/remove some books, cds or
dvds, just delete the xthumbs.jpg and xthumbs2.jpg files and they will be
recreated at the next startup. Here are the cover art files if you want to
see them:
\library\book\xthumbs.jpg
\library\book\xthumbs2.jpg
\library\cd\xthumbs.jpg
\library\dvd\xthumbs.jpg
After you add a key for a book, cd or dvd into the xremote.xml file, just
put the corresponding media in the correct location, as well as a Cover.jpg
file for the cover art. The filenames should correspond to the following
format:
Book: \library\book\'title'\'chapter'.'file format'
CD: \library\cd\'artist'\'album'\'artist'_'album'_'track number'_'track name'.'file format'
DVD: \library\dvd\'movie'\'chapter'.'file format'
Q. How does the XChannel Net mode work?
A. This mode is still being mentally developed.
Click here to see the input for this mode.
Q. How does the XChannel Comm mode work?
A. This mode is in alpha. It contains a stripped down, barely working IRC client,
but not much more functionality than that. The user interface for the text
windows is in place, and you can just add keys to join different IRC servers,
so if you feel like playing with the code, be my guest.
Click here to see the input for this mode.
Q. How does the XChannel Tuner mode work?
A. This mode should go into beta soon. I eventually got NTSC TV tuner code working,
but I couldn't get the ATSC code working on my ATI tuner. The state of the PC
TV tuner industry is changing rapidly, with ATI selling their All-in-Wonder
tuners to Broadcom, and XCeive coming out with 20-tuner silicon based tuners.
The new tuners coming out soon will need at least 2 generations of drivers to get
decently stable. Hopefully within 3-5 years we'll have 8-core CPUs with on die
GPU and 8 TV tuners embedded in one chip. Until then, I am going to attempt to
get this mode working again on the ATSC signal using my new Hauppauge 1950
external USB TV tuner. It works in Media Center, and doesn't blue screen the OS
like the old ATI tuner(read: vista doesn't like old tv tuner drivers). Soon
enough I won't have to use Media Center and can purge its resource hog self
from my system.
Click here to see the input for this mode.
Q. How does the XChannel Player mode work?
A. The Player has 4 modes plus an off setting. The 4 modes are Book, CD, DVD
and XFolder. XFolder is a simple directory image/movie file viewer and
thumbnail file generator. The other 3 modes, Book, CD and DVD are where you
select the media you wish to play. Basically, the media is stored in columns,
sorted either alphabetically, by genre, by year or through playlist. You can
choose to loop either a track, an album, an artist or a column. If you wish
to watch a movie and turn off the UI and just render the movie, click the Z
key. The Book interface is fairly 'buggy', as I started to incorporate using
Adobe Reader and subclassing their PDF viewer into a window, as most books I
have online are PDF, but I choose to ignore the Book mode for now. I plan on
turning all my books into texture files and storing and viewing them that way.
Until then, the Book mode sort of works, but with a hack of trying to find
the Adobe Reader PDF window after launching, then using the window handle to
send messages to change the Page of the book file. It sort of works, but won't
work in fullscreen mode, as I haven't solved a way of getting a web browser
window to update in fullscreen mode. With that said, the CD and DVD modes are
pretty much feature complete for version 1.0, so have fun playing with your
media library collection with those.
Click here to see the input for this mode.
License
Q. How does XRemote's license work?
A. I have grappled with the best way to license XRemote, and to promote the
idea of a new way of selling software that does away with the innovation
stifling software patent process and closed source code system and have
come up with the following license agreement. For $22, you get a lifetime
subscription to XRemote. That includes access to all source code and
future upgrades for a one-time, lifetime subscription fee. I never
intended to make my fortune off XRemote, and would rather see it used as
a tool to encourage future software developers to learn how to code and
create the next generation of software apps. So, until I come to my
senses and/or get greedy, XRemote costs $22 for a lifetime subscription.
Do whatever you like with the source code. If you add a substantial amount
of functionality and want to sell it as your own, be my guest. Just
don't rename a couple functions and be lame and sell it for $1 per copy.
You of course could do this, but I'm betting there are more honest people
out there than dishonest, so I'll eventually see a return on the investment.
With that, enjoy, and check back for new updates as XRemote is, and will
always be, a perpetual work-in-progress. I like to think of it as my digital
media swiss army knife.
4 Images
Screenshots

Prototype evolution

World key


© 2002-2009 Black Hole Software, Inc. All Rights Reserved