How to 3D Wood

I closed the previous question as I misrepresented it by accident
Hello All,
I have Illustrator CS2 and can get my hands on some nice vector files of wood.
I would like to be able to use the 3D feature (no need for beveling), but the sides of the object do not carry over the wood.  So it really doesn't look like 3D wood.  More like a 3d object with a wood  veneer.
So is there a way to make the entire thing look 3D?
Below is a before and after. how can I make that GRAY area, part of the wood. I actually don't care about the beveling part. Just rotatable 3D.
Thanks
http://www.warptv.com/wood2.jpg

As you can tell in the attempt you have already made at mapping a Symbol to a 3D Effect object, the program merely allows you to map artwork contained in a Symbol to one surface at a time. It cannot "wrap" a texture around adjacent faces. There are no procedural textures as in a full-blown 3D modeling program.
So if you insist on doing this in Illustrator, you need to create separate Symbols for the end and side woodgrain textures. You can get away with one symbol for the sides if you use the Scale To Fit option and alternatingly flop the Symbol so that the edges reasonably convincingly seem to wrap around the corner edges.
If you are after anything approaching convincing realism, you can do it with more time and work than in the quick demo below, but it will be much more tedious than simply using a full-blown 3D modeler / renderer, most of which offer multiple woodgrain procedural textures (textures that can automatically wrap around whole objects) built-in.
A fine-grained wood texture (mahogany and such) like in your sample would be more forgiving. But you still need a different image for the endgrain, and you still have to map the texture to each construct that Illustrator considers a surface. For example, if you use rounded corners in the extrusion, you will see in the Map Artwork interface that those, too, are considered separate surfaces. Again, you can do it using the principle depicted above, but it becomes increasingly tedious when you involve rounds and bevels. AI's 3D Effect cannot "shrink wrap" a single image around what it considers a multi-surface whole object.
JET

Similar Messages

  • Closing swfs in captivate movie

    I am frantically trying to figure out how not to get a
    javascript erro rwhen my animation ends inside my captivate movie.
    how to I close the swf adn still elt the user navigate to the next
    captivate screen?
    Please help!
    thanks,
    francie

    Hi francie
    I have no clue as to how what terrence wood is suggesting
    will help here. From what I surmise based off what you posted, you
    have inserted an animation or possibly even another Captivate movie
    on a slide in an existing movie? And somehow you want to know how
    to close the .SWF that is sitting on the slide? If I'm correct in
    what I understand you are trying to do, my guess is that it isn't
    possible. Why? Well, if you were able to close the .SWF on the
    slide, you would probably also close the whole movie. My guess is
    that this is why you are seeing JavaScript errors.
    I'm thinking that you should probably configure the end
    option to simply stop. For the movies that are on the slides, that
    is. This also assumes you are placing other Captivate movies on the
    slides. If you are instead placing other animation, I haven't a
    clue what to advise, other than to possibly adjust timing.
    Hopefully this helped in some way... Rick

  • I lost my iphone in the woods and it is not connected to the internet. how can i trace it? and if i cant, can i take all the data, such as pictures from my old phone onto a new one?

    so i was walkin in the woods and somehow i droped it. its not conected to the internet. i know because i checked icloud. when i walked around to look for it i used a friends phone to call it so it would ring, but it went straight to voice mail.
    So, how can i trace it? and if i cant, can i take all the data, such as pictures from my old phone onto a new one?

    if you installed find my iphone app on it you can do these things from icloud if it's online
    if not you can't do anything

  • I bought the Tiger woods 12 game for my ipad and also paid the 19.99 for the $2M. It has crashed my ipad a few times and when it restarted last time, it had no history of my progress or the $2M. How do I get my history back

    I bought the Tiger woods 12 game for my ipad and also paid the 19.99 for the $2M. It has crashed my ipad a few times and when it restarted last time, it had no history of my progress or the $2M. How do I get my history back or my money back for the game and the in-game expenses?

    The only one that can issue a PUK code is a carrier, which you've already made clear you don't have.
    If itunes does not recognise your ipad that may be another issue. What version OS is on your computer and what steps did you follow to uninstall itunes and then reiinstall itunes on your computer?
    And, do you at least see the sidebar on the left hand side of itunes?
    iPad not appearing in iTunes
    http://www.apple.com/support/ipad/assistant/itunes/
    Do you have another computer you can try?

  • Anyone know how to get the wood panel background in Pages 09'??

    I was messing around with it when I started using Pages and I haven't been able to switch back! The wood pattern was so much more visually appealing. Someone please help!

    Full Screen is on the top right of any document in OSX 10.7.
    I have no idea how you could have got a wood panel background behind a full screen document, nor how you would have changed the background, which is always dark grey to my knowledge.
    If you want to learn more about Pages there are introductory Apple Videos under the Help menu.
    The downloadable Pages09_UserGuide.pdf is in the same place.
    And try this site:
    http://www.freeforum101.com/iworktipsntrick/
    But start by having a good look through the menus and the Inspectors which are well organised compared with most software.
    Peter

  • HT2500 How do I change my Full Name on my mail account? I want to change from John Francis Woods to Francis Woods on all my .mac, .me and .iCloud mails.

    How do I change my Full Name on my mail account? I want to change from John Francis Woods to Francis Woods on all my .mac, .me and .iCloud mails.

    I have asked the hosts to consider editing out your name details for your own security.   I'm not sure what you should now do.    Go to https://getsupport.apple.com ; click 'See all products and services', then 'More Products and Services, then 'Apple ID', then 'Other Apple ID Topics' then 'Apple ID account Security'

  • How Do I Change The Color Of Wood To Get A Good Result?

    I have a photo with kitchen cabinets that are a mahogany color, and need to change them to a golden oak color to show the change in the cabinets. I can get a very good brown result, but can't get a good golden oak color. Here's a link that shows what I need to do. Look at the picture at the bottom that shows color change.
    http://www.nhance.com/cabinets/
    How can I get a good golden oak color?

    Hey Noel, thanks for the info. I've been doing exactly what you said, but the best I can get that looks halfway like real color is a brown color - can't get it to a golden oak color. The yellows always look fake, not like real oak cabinets. Does anyone know how to make this work?
    Thanks so much,
    Amy

  • My i phone keeps crashing when i play T Wood pga 12. How do i fix this?

    Tiger Woods PGA Tour 12 continually crashes.  Cannot complete a challenge without the app closing.  It takes multiple tries until the game will load.  I can play one hole then the game shuts off.  Tried all troubleshooting options. 

    I've experienced the same problem, but on my iPad. The ONLY thing that has worked, albeit temporarily, was I downloaded the Process Killer app (free). Don't confuse this pseudo-solution with the app history process deletion. Everytime, before I play TW12, I kill all the running processes with this app. It has allowed me to play several Tiger Challenges or AT LEAST two complete rounds of Tour or regular play. Unfortunately, I can't recall the person that provided this solution previously, but it does work for me. Btw, never had this problem prior to iOS5 upgrade. Hope this helps.

  • How i solved my iPod to iTunes connectivity problem

    After reading so much advice on this forum, I just wanted to tell you guys about the problem I was having with getting my Windows XP machine and iTunes to communicate with my brand new 80 Gb iPod Classic, and how I finally managed to fix the problem (I hope).
    The problem was that my iPod communicated very poorly with my Windows machine and especially with iTunes. When I first bought the iPod, I was able to get it to work with iTunes sporadically. After three days of struggle I was able to sync my 3100 song music library to it, but then things began to deteriote. It got to the point where the iPod would not sync with iTunes, if iTunes recognized it at all. When I connected the iPod to my computer, it would show up as a USB device in the Windows device manager, but if I tried to open it in Explorer I could see no folders. iTunes could see it, but it would insist that it was not compatible with Windows and that I needed to restore it. When I tried to restore it, I'd always get an "unknown error" error message. It was impossible to connect to it or restore it!
    Finally, I figured out what the problem was. It was my HP PhotoSmart C4280 "all in one" printer! As soon as I disconnected that thing from its USB port the iPod suddenly was fully recognized by iTunes and I could sync it again. Furthermore, the syncing process was about 10 times faster! It was a miracle!
    I believe the issue had something to do with the on-board memory card readers on the printer. Those show up as a letter drive under Windows, whether you have a card in them or not. I believe the HP USB driver was somehow interfering with the Apple USB driver, but that's just a theory.
    Even with the iPod working, I still had a problem because the printer could not be connected at the same time as the iPod. I managed to fix that problem too (I think). I went to the HP support site and downloaded the latest printer driver software. Now both the printer and the iPod seem to coexist peacefully. I may not be completely out of the woods, but right now it looks promising.
    Anyway, I just wanted to share my little success story with you in case there was someone else out there having the same problem.

    You might find the HP doesn't just interfere with your iPod. I have an Epson all-in-one photo printer/scanner/copier with card reader that interferes with EVERY other external drive I connect. I tried my best with Epson support but got nowhere. Problem occurs in both Vista & XP, with at least 3 memory keys, 2 500gb external drives & the iPod. If I turn the printer on, all access to other USB drives is disrupted. Sometimes I can view the top level folders (cached?) but they appear to have no content - scared myself a few times at first. It's a bore but there seeems little I can do until Epson acknowlege the problem & issue new drivers.
    tt2

  • How do I return two values from a stored procedure into an "Execute SQL Task" within SQL Server 2008 R2

    Hi,
    How do I return two values from a
    stored procedure into an "Execute SQL Task" please? Each of these two values need to be populated into an SSIS variable for later processing, e.g. StartDate and EndDate.
    Thinking about stored procedure output parameters for example. Is there anything special I need to bear in mind to ensure that the SSIS variables are populated with the updated stored procedure output parameter values?
    Something like ?
    CREATE PROCEDURE [etl].[ConvertPeriodToStartAndEndDate]
    @intPeriod INT,
    @strPeriod_Length NVARCHAR(1),
    @dtStart NVARCHAR(8) OUTPUT,
    @dtEnd NVARCHAR(8) OUTPUT
    AS
    then within the SSIS component; -
    Kind Regards,
    Kieran. 
    Kieran Patrick Wood http://www.innovativebusinessintelligence.com http://uk.linkedin.com/in/kieranpatrickwood http://kieranwood.wordpress.com/

    Below execute statement should work along the parameter mapping which you have provided. Also try specifying the parameter size property as default.
    Exec [etl].[ConvertPeriodToStartAndEndDate] ?,?,? output, ? output
    Add a script task to check ssis variables values using,
    Msgbox(Dts.Variables("User::strExtractStartDate").Value)
    Do not forget to add the property "readOnlyVariables" as strExtractStartDate variable to check for only one variable.
    Regards, RSingh

  • I recently bought, from the original website of Adobe, Photoshop elements 13. However, when I go with my mouse pointer over the menu, It hangs or he works very slow. Does anyone have an idea how I can fix it? I have already downloaded updates, both from A

    I recently bought, from the original website of Adobe, Photoshop elements 13. However, when I go with my mouse pointer over the menu, It hangs or he works very slow. Does anyone have an idea how I can fix it? I have already downloaded updates, both from Adobe and Windows. I have a new pc with window 8.1.

    It could be a coincidence, but I rebooted the machine and (knock on wood) PSE13 seems to be working ok.

  • How long does it takes that GPS in MAP 3.1 will wo...

    Question to NOKIA:
    HOW LONG TIME YOU NEED TO MAKE GPS TO WORK WITH OVI MAP 3.1 in N97?
    On all N97 I know and as you can read here in forum the GPS doesn't work usable in N97 and with MAP 3.1.
    I believe that this is a software problem because often I get a GPS signal inhouse and in the wood, but from one second  to the other N97 lost the GPS signal. And this in the best weather condition under free sky. Sometimes gps signal works for 15 minutes, then the signal will drop every minute or so.
    The current position on map is shift (past) abaout 40-50 meters from the real position, so its unable to use.
    The calculated speed is always changing between 0 and the current speed. 
    I have updated phone to de newes software and firmware also to ne newest maps also has hard reseted and reformatet and the problem ist still the same.
    CAN NOKIA TELL US WHEN THIS BUG WILL BE FIXED, AND CAN NOKIA OFFER US A REFUND.
    I have payed a lot for N97 and alot for the navigation licence and a lot for accesoires and a lot for the traffic security assistance. So I want a working phone! I dint have payed money for e alpha-stadium phone.
    If this is realy the quality of nokia phone, then It is the latest phone I have buyed from nokia.
    By the way, the phone has many many many many other bugs as described in this forum.
    Really bad work NOKIA! :-(
    I was so excited with my N95 and now this mess...
    NOKIA please answer us forum members, what you plan to do with the N97 bugs. When we can hope that the bugs are gone? Otherwise I will return my phone and want my money back and I sue for compensation.

    Express shipping is available in some areas - http://store.apple.com/us/help/print_products/routing - see your country for details of offerings there
    LN

  • HOW LONG TIME YOU NEED TO MAKE GPS TO WORK WITH OV...

    Question to NOKIA:
    HOW LONG TIME YOU NEED TO MAKE GPS TO WORK WITH OVI MAP 3.1 in N97?
    On all N97 I know and as you can read here in forum the GPS doesn't work usable in N97 and with MAP 3.1.
    I believe that this is a software problem because often I get a GPS signal inhouse and in the wood, but from one second  to the other N97 lost the GPS signal. And this in the best weather condition under free sky. Sometimes gps signal works for 15 minutes, then the signal will drop every minute or so.
    The current position on map is shift (past) abaout 40-50 meters from the real position, so its unable to use.
    The calculated speed is always changing between 0 and the current speed. 
    I have updated phone to de newes software and firmware also to ne newest maps also has hard reseted and reformatet and the problem ist still the same. If I switch off the option "Maps improvment" (which SENDS DATA TO NOKIA!!!) the the drop outs are fewer. But evreytime the position on maps is shift about 40-50 Meters from right position. Is there a mistake in calculation the position?  Also the speed is jumping sometimes from 0 to x and back.
    CAN NOKIA TELL US WHEN THIS BUG WILL BE FIXED, AND CAN NOKIA OFFER US A REFUND.
    I have payed a lot for N97 and alot for the navigation licence and a lot for accesoires and a lot for the traffic security assistance. So I want a working phone! I dint have payed money for e alpha-stadium phone.
    If this is realy the quality of nokia phone, then It is the latest phone I have buyed from nokia.
    By the way, the phone has many many many many other bugs as described in this forum.
    Really bad work NOKIA! :-(
    I was so excited with my N95 and now this mess...
    NOKIA please answer us forum members, what you plan to do with the N97 bugs. When we can hope that the bugs are gone? Otherwise I will return my phone and want my money back and I sue for compensation.

    I have no word to disagree with you and hoping that Nokia soon will make some press statement or something else to tell us what they do with their flagship, sorry bugship Nokia N97.
    Could be a shame recognize errors, but it's worst not to say nothing ant let the bad news of Nokia N97 spread for internet even if they want to sell a Nokia N97 Mini in the near future.
    I understand and supose that we will no have no new version till september because we are in the last week and july and the activity in august decrease really high... but at least someone of Nokia could tell something about this problems and if it's possible all the other problems.
    Why Nokia Beta Labs Forum there is a direct contact with Nokia workers, and in discussions is relly rare to find?
    Yesterday is history.
    Tomorrow is a mistery.
    Today is a gift.

  • How do I change what the middle mouse button/wheel does?

    I feel like an idiot asking this, but I can't figure this out...
    I've plugged in a bog standard 2 button + scroll wheel third button mouse, but I can't get the middle mouse button/wheel to behave like it would in Windows.  If I click it, it changes programs, hold it it brings up the task switcher thing.  It's like I'm pressing command + tab.
    I want it to work normally, where the program I'm using the middle button responds, not the OS.  Like in Firefox, I want to be able to close tabs with the middle mouse button, and open new links with it...instead all it can do is switch programs.
    Is there a way to do this?  Am I missing something obvious?

    Err...I don't know what happened, but I rebooted and now it's working like normal (knock on wood!).  Noooo idea how it ended up in that state!

  • How do i pass a variable in flex

    i've been looking all over google for how to pass a variable yet
    i've come up empty handed
    i have a C code and as3
    i've never been able to get a C program to compile on my own, this is from a tutorial im trying to understand about raycasting
    from what i can gather i think that the variables are passed threw this
    #######raycaster.c##########
    AS3_Val loop( void* self, AS3_Val args )
        AS3_ArrayValue(args,"IntType,IntType,IntType,IntType",&K_UP,&K_DOWN,&K_LEFT,&K_RIGHT);
        CastRay();
        int opos,j,i,jpos;
        for(j=0; j < resY; j++ ){
            jpos = resX*j;
            for(i=0; i < resX; i++ ){
                opos = (jpos+i);
                tBuffer[opos] = buffer[i][j];
            }//end of for
        }//end of for
        return 0;
    }//end of loop
    however not one of the values inside of AS3_ArrayValue is to be found on the Main.as
    this is the only function that comunicates with the C code, but i could be wrong
    ####Main.as######
            private function enterFrame(event:Event):void {
                alcRCLib.loop(upKey,downKey,leftKey,rightKey);
                alchemyMemory.position=alcScreenBufferPointer;
                screenBitmapData.setPixels(screenBitmapData.rect,alchemyMemory);
    the reason i want to do this, other than to know how, because that would be useful above all else, i've already written a as3 that comunicates with php
    to get a array of images  for a topdown game, and i wouldn't know how to load these variables to C from a HTTP request but if i can get flash to tell c what they are then every thing worked out
    heres both codes in full
    #####Main.as####
    *Alchemy Ray Caster
    *April 6, 2010
    *Bruce Jawn
    *http://bruce-lab.blogspot.com
    *Copyright (c) <2010> <Bruce Jawn>
    *This software is released under the MIT License
    *<http://www.opensource.org/licenses/mit-license.php>
    package {
    //    import cmodule.Ray_Caster._worldMap;
    //    import cmodule.Ray_Caster._worldMap;
        import cmodule.Ray_Caster.CLibInit;
    //    import cmodule.Ray_Caster.TextFieldI;
        import flash.display.*;
        import flash.text.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.text.engine.TextBlock;
        import flash.text.engine.TextLine;
        import flash.text.TextField;
        import flash.utils.*;
        import flash.ui.*;
        [SWF(width="840", height="880")]
        public class Main extends Sprite {
            [Embed(source="../wolftex/barrel.png")]
            public static var barrelClass:Class;
            [Embed(source="../wolftex/bluestone.png")]
            public static var bluestoneClass:Class;
            [Embed(source="../wolftex/colorstone.png")]
            public static var colorstoneClass:Class;
            [Embed(source="../wolftex/eagle.png")]
            public static var eagleClass:Class;
            [Embed(source="../wolftex/greenlight.png")]
            public static var greenlightClass:Class;
            [Embed(source="../wolftex/greystone.png")]
            public static var greystoneClass:Class;
            [Embed(source="../wolftex/mossy.png")]
            public static var mossyClass:Class;
            [Embed(source="../wolftex/pillar.png")]
            public static var pillarClass:Class;
            [Embed(source="../wolftex/purplestone.png")]
            public static var purplestoneClass:Class;
            [Embed(source="../wolftex/redbrick.png")]
            public static var redbrickClass:Class;
            [Embed(source="../wolftex/wood.png")]
            public static var woodClass:Class;
            //Array to hold all the textures
            private var texs:Array=[];
            private var worldMap:Array = [];
            //private var worldMap[1]:Array=[];
            private static const SCREEN_WIDTH:int=640;
            private static const SCREEN_HEIGHT:int=480;
            private var screenBitmapData:BitmapData;
            private var screenBitmap:Bitmap;
            private var alchemyMemory:ByteArray;
            private var alcRCLib:Object;
            private var cLibInit:CLibInit;
            private var alcScreenBufferPointer:uint;
            private var alcTexPointer:uint;
            private var upKey:int=0;
            private var downKey:int=0;
            private var leftKey:int=0;
            private var rightKey:int=0;
            private var a:flash.text.TextField;
            public function Main() {
                stage.frameRate=60;
                stage.align=StageAlign.TOP_LEFT;
                stage.scaleMode=StageScaleMode.NO_SCALE;
                stage.fullScreenSourceRect=new Rectangle(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
                init();
                }//end of function Main
            private function init():void {
                initBitmaps();
                initAlchemy();
                initRendering();
            }//end of function init
            private function initBitmaps():void {
                texs.push(prepareBitmapData(new eagleClass().bitmapData  ));
                texs.push(prepareBitmapData(new redbrickClass().bitmapData  ));
                texs.push(prepareBitmapData(new purplestoneClass().bitmapData  ));
                texs.push(prepareBitmapData(new greystoneClass().bitmapData  ));
                texs.push(prepareBitmapData(new bluestoneClass().bitmapData  ));
                texs.push(prepareBitmapData(new mossyClass().bitmapData  ));
                texs.push(prepareBitmapData(new woodClass().bitmapData  ));
                texs.push(prepareBitmapData(new colorstoneClass().bitmapData  ));
                texs.push(prepareBitmapData(new barrelClass().bitmapData  ));
                texs.push(prepareBitmapData(new pillarClass().bitmapData  ));
                texs.push(prepareBitmapData(new greenlightClass().bitmapData  ));
                screenBitmapData=new BitmapData(SCREEN_WIDTH,SCREEN_HEIGHT,false,0);
                screenBitmap=new Bitmap(screenBitmapData);
                addChild(screenBitmap);
                worldMap[1] = (1,2,3,4);
                worldMap[2] = (1,2,3,4);
                worldMap[3] = (1,2,3,4);
                worldMap[4] = (1,2,3,4);
                worldMap[5] = (1,2,3,4);
                worldMap[6] = (1,2,3,4);
                worldMap[7] = (1,2,3,4);
                }//end of function initBitmaps
            //Prepare the bitmap once to take into account the lower-endianess of the alchemy code.
            private function prepareBitmapData(sourceMap:BitmapData):BitmapData {
                var outBitmapData:BitmapData=sourceMap.clone();
                outBitmapData=new BitmapData(outBitmapData.width,outBitmapData.height,true,0xFF000000);
                outBitmapData.copyChannel(sourceMap,outBitmapData.rect,outBitmapData.rect.topLeft,BitmapD ataChannel.ALPHA,BitmapDataChannel.BLUE);
                outBitmapData.copyChannel(sourceMap,outBitmapData.rect,outBitmapData.rect.topLeft,BitmapD ataChannel.RED,BitmapDataChannel.GREEN);
                outBitmapData.copyChannel(sourceMap,outBitmapData.rect,outBitmapData.rect.topLeft,BitmapD ataChannel.GREEN,BitmapDataChannel.RED);
                outBitmapData.copyChannel(sourceMap,outBitmapData.rect,outBitmapData.rect.topLeft,BitmapD ataChannel.BLUE,BitmapDataChannel.ALPHA);
                return outBitmapData;
            }//end of function prepareBitmapData
            private function initAlchemy():void {
                cLibInit=new CLibInit  ;
                alcRCLib=cLibInit.init();
                //Retrieve the "Alchemy Memory".
                var ns:Namespace=new Namespace("cmodule.Ray_Caster");
                alchemyMemory=ns::gstate.ds;
                //Allocate the buffers in Alchemy.
                alcScreenBufferPointer=alcRCLib.initializeScreenBuffer(SCREEN_WIDTH,SCREEN_HEIGHT);//Setu p a screenbuffer of size x,y;
                //Copy the textures to alchemy memory.
                for (var i:int=0; i<11; i++) {
                    var ba:ByteArray=texs[i].getPixels(texs[i].rect);
                    alcTexPointer=alcRCLib.initializeTexBuffer(i);
                    alchemyMemory.position=alcTexPointer;
                    alchemyMemory.writeBytes(ba,0,ba.length);
                }//end of for
            }//end of function initAlchemy
            private function initRendering():void {
                stage.addEventListener(KeyboardEvent.KEY_DOWN,key_pressed);
                stage.addEventListener(KeyboardEvent.KEY_UP,key_released);
                addEventListener(Event.ENTER_FRAME,enterFrame);
            }//end of function initRendering
            private function enterFrame(event:Event):void {
                alcRCLib.loop(upKey,downKey,leftKey,rightKey);
                alchemyMemory.position=alcScreenBufferPointer;
                screenBitmapData.setPixels(screenBitmapData.rect,alchemyMemory);
                }//end of function enterFrame
            private function key_pressed(e:KeyboardEvent):void {
                switch (e.keyCode) {
                    case Keyboard.UP :
                        upKey=1;
                        break;
                    case Keyboard.DOWN :
                        downKey=1;
                        break;
                    case Keyboard.LEFT :
                        leftKey=1;
                        break;
                    case Keyboard.RIGHT :
                        rightKey=1;
                        break;
                }//end of switch
                }//end of function key_pressed
            private function key_released(e:KeyboardEvent):void {
                switch (e.keyCode) {
                    case Keyboard.UP :
                        upKey=0;
                        break;
                    case Keyboard.DOWN :
                        downKey=0;
                        break;
                    case Keyboard.LEFT :
                        leftKey=0;
                        break;
                    case Keyboard.RIGHT :
                        rightKey=0;
                        break;               
                        }//end of switch
                }//end of function key_released
                }//end of class
    }//end of package
    ###raycaster####
    //Raycasting Engine from Lode's Computer Graphics Tutorial
    //http://www.student.kuleuven.be/~m0216922/CG/raycasting.html
    //Modified for Alchemy by Bruce Jawn
    //http://bruce-lab.blogspot.com
    #include "AS3.h"
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //============================================================
    //============================================================
    enum bool {false=0,true=!false};
    #define screenWidth 1640
    #define screenHeight 1480
    #define texWidth 64
    #define texHeight 64
    #define mapWidth 24
    #define mapHeight 24
    //1D Screen Buffer
    int* tBuffer;
    int resX = 0;
    int resY = 0;
    //2D Screen Buffer
    int buffer[screenWidth][screenHeight];
    //1D Zbuffer
    double ZBuffer[screenWidth];
    //============================================================
    //============================================================
    //textures
    int texture[11][texWidth*texHeight];
    #define numSprites 19
    //arrays used to sort the sprites
    int spriteOrder[numSprites];
    double spriteDistance[numSprites];
    struct SSprite
      double x;
      double y;
      int texture;
    struct SSprite sprite[numSprites]=
      //green light in front of playerstart
      {20.5, 11.5, 10},
      //green lights in every room
      {18.5,4.5, 10},
      {10.0,4.5, 10},
      {10.0,12.5,10},
      {3.5, 6.5, 10},
      {3.5, 20.5,10},
      {3.5, 14.5,10},
      {14.5,20.5,10},
      //row of pillars in front of wall: fisheye test
      {18.5, 10.5, 9},
      {18.5, 11.5, 9},
      {18.5, 12.5, 9},
      //some barrels around the map
      {21.5, 1.5, 8},
      {15.5, 1.5, 8},
      {16.0, 1.8, 8},
      {16.2, 1.2, 8},
      {3.5,  2.5, 8},
      {9.5, 15.5, 8},
      {10.0, 15.1,8},
      {10.5, 15.8,8},
    //============================================================
    //============================================================
    //map
    int worldMap[mapWidth][mapHeight] =
      {8,8,8,8,8,8,8,8,8,8,8,4,4,6,4,4,6,4,6,4,4,4,6,4},
      {8,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,4},
      {8,0,3,3,0,0,0,0,0,8,8,4,0,0,0,0,0,0,0,0,0,0,0,6},
      {8,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6},
      {8,0,3,3,0,0,0,0,0,8,8,4,0,0,0,0,0,0,0,0,0,0,0,4},
      {8,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,6,6,0,6,4,6},
      {8,8,8,8,0,8,8,8,8,8,8,4,4,4,4,4,4,6,0,0,0,0,0,6},
      {7,7,7,7,0,7,7,7,7,0,8,0,8,0,8,0,8,4,0,4,0,6,0,6},
      {7,7,0,0,0,0,0,0,7,8,0,8,0,8,0,8,8,6,0,0,0,0,0,6},
      {7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,4},
      {7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,6,0,6,0,6},
      {7,7,0,0,0,0,0,0,7,8,0,8,0,8,0,8,8,6,4,6,0,6,6,6},
      {7,7,7,7,0,7,7,7,7,8,8,4,0,6,8,4,8,3,3,3,0,3,3,3},
      {2,2,2,2,0,2,2,2,2,4,6,4,0,0,6,0,6,3,0,0,0,0,0,3},
      {2,2,0,0,0,0,0,2,2,4,0,0,0,0,0,0,4,3,0,0,0,0,0,3},
      {2,0,0,0,0,0,0,0,2,4,0,0,0,0,0,0,4,3,0,0,0,0,0,3},
      {1,0,0,0,0,0,0,0,1,4,4,4,4,4,6,0,6,3,3,0,0,0,3,3},
      {2,0,0,0,0,0,0,0,2,2,2,1,2,2,2,6,6,0,0,5,0,5,0,5},
      {2,2,0,0,0,0,0,2,2,2,0,0,0,2,2,0,5,0,5,0,0,0,5,5},
      {2,0,0,0,0,0,0,0,2,0,0,0,0,0,2,5,0,5,0,5,0,5,0,5},
      {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5},
      {2,0,0,0,0,0,0,0,2,0,0,0,0,0,2,5,0,5,0,5,0,5,0,5},
      {2,2,0,0,0,0,0,2,2,2,0,0,0,2,2,0,5,0,5,0,0,0,5,5},
      {2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,5,5,5,5,5,5,5,5,5}
    //============================================================
    //============================================================
    double posX = 22.0, posY = 11.5; //x and y start position
    double dirX = -1.0, dirY = 0.0; //initial direction vector
    double planeX = 0.0, planeY = 0.66; //the 2d raycaster version of camera plane
    int K_LEFT=0;
    int K_RIGHT=0;
    int K_UP=0;
    int K_DOWN=0;
    //speed modifiers
    double moveSpeed =  .30; //the constant value is in squares/second
    double rotSpeed =   .20; //the constant value is in radians/second
    //============================================================
    //============================================================
    AS3_Val initializeScreenBuffer(void* self, AS3_Val args)
        AS3_ArrayValue(args, "IntType, IntType", &resX, &resY);
        tBuffer = malloc( resX * resY * sizeof(int) );
        return AS3_Ptr( tBuffer );
    }//end of initializeScreenBuffer
    //used to load some textures & sprite textures
    AS3_Val initializeTexBuffer(void* self, AS3_Val args)
        int index;
        AS3_ArrayValue(args, "IntType", &index);
        return AS3_Ptr( texture[index] );
    }//end of initializeTexBuffer
    //start the main loop
    AS3_Val loop( void* self, AS3_Val args )
        AS3_ArrayValue(args,"IntType,IntType,IntType,IntType",&K_UP,&K_DOWN,&K_LEFT,&K_RIGHT);
        CastRay();
        int opos,j,i,jpos;
        for(j=0; j < resY; j++ ){
            jpos = resX*j;
            for(i=0; i < resX; i++ ){
                opos = (jpos+i);
                tBuffer[opos] = buffer[i][j];
            }//end of for
        }//end of for
        return 0;
    }//end of loop
    int main()
        AS3_Val initializeScreenBufferMethod = AS3_Function( NULL,initializeScreenBuffer );
        AS3_Val loopMethod = AS3_Function( NULL,loop );
        AS3_Val initializeTexBufferMethod = AS3_Function( NULL,initializeTexBuffer );
        AS3_Val result = AS3_Object("initializeScreenBuffer:AS3ValType,loop:AS3ValType,initializeTexBuffer:AS3ValT ype"
                                    ,initializeScreenBufferMethod,loopMethod,initializeTexBufferMethod);
        AS3_Release( initializeScreenBufferMethod );
        AS3_Release( loopMethod );
        AS3_Release( initializeTexBufferMethod );
        AS3_LibInit( result );
        return 0;
    }//end of main
    //================================================================
    //================================================================
    void CastRay()
        printf ("Hello World!\n");
        int x;
        int y;
        int w=screenWidth;
        int h=screenHeight;
        for( x = 0; x < screenWidth; x++) for( y = 0; y < screenHeight; y++) {buffer[x][y] = 0;} //clear the buffer instead of cls()
        for(x = 0; x < w; x++)
          //calculate ray position and direction
          double cameraX = 2 * x / (double)(w) - 1; //x-coordinate in camera space    
          double rayPosX = posX;
          double rayPosY = posY;
          double rayDirX = dirX + planeX * cameraX;
          double rayDirY = dirY + planeY * cameraX;
          //which box of the map we're in 
          int mapX = (int)(rayPosX);
          int mapY = (int)(rayPosY);
          //length of ray from current position to next x or y-side
          double sideDistX;
          double sideDistY;
          //length of ray from one x or y-side to next x or y-side
          double deltaDistX = sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX));
          double deltaDistY = sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY));
          double perpWallDist;
          //what direction to step in x or y-direction (either +1 or -1)
          int stepX;
          int stepY;
          int hit = 0; //was there a wall hit?
          int side; //was a NS or a EW wall hit?
          //calculate step and initial sideDist
          if (rayDirX < 0)
            stepX = -1;
            sideDistX = (rayPosX - mapX) * deltaDistX;
          }//end of if (rayDirX < 0)
          else
            stepX = 1;
            sideDistX = (mapX + 1.0 - rayPosX) * deltaDistX;
          }//end of else
          if (rayDirY < 0)
            stepY = -1;
            sideDistY = (rayPosY - mapY) * deltaDistY;
          }//end of if (rayDirY < 0)
          else
            stepY = 1;
            sideDistY = (mapY + 1.0 - rayPosY) * deltaDistY;
          }//end of else
          //perform DDA
          while (hit == 0)
            //jump to next map square, OR in x-direction, OR in y-direction
            if (sideDistX < sideDistY)
              sideDistX += deltaDistX;
              mapX += stepX;
              side = 0;
            }//end of if (sideDistX < sideDistY)
            else
              sideDistY += deltaDistY;
              mapY += stepY;
              side = 1;
            }//end of else
            //Check if ray has hit a wall      
            if (worldMap[mapX][mapY] > 0) hit = 1;
          }//end of while (hit == 0)
          //Calculate distance of perpendicular ray (oblique distance will give fisheye effect!)   
          if (side == 0) perpWallDist = fabs((mapX - rayPosX + (1 - stepX) / 2) / rayDirX);
          else       perpWallDist = fabs((mapY - rayPosY + (1 - stepY) / 2) / rayDirY);
          //Calculate height of line to draw on screen      
          int lineHeight = abs((int)(h / perpWallDist));
          //calculate lowest and highest pixel to fill in current stripe
          int drawStart = -lineHeight / 2 + h / 2;
          if(drawStart < 0) drawStart = 0;
          int drawEnd = lineHeight / 2 + h / 2;
          if(drawEnd >= h) drawEnd = h - 1;
          //texturing calculations
          int texNum = worldMap[mapX][mapY] - 1; //1 subtracted from it so that texture 0 can be used!
          //calculate value of wallX
          double wallX; //where exactly the wall was hit
          if (side == 1) wallX = rayPosX + ((mapY - rayPosY + (1 - stepY) / 2) / rayDirY) * rayDirX;
          else       wallX = rayPosY + ((mapX - rayPosX + (1 - stepX) / 2) / rayDirX) * rayDirY;
          wallX -= floor((wallX));
          //x coordinate on the texture
          int texX = (int)(wallX * (double)(texWidth));
          if(side == 0 && rayDirX > 0) texX = texWidth - texX - 1;
          if(side == 1 && rayDirY < 0) texX = texWidth - texX - 1;
          int y;
          for(y = drawStart; y < drawEnd; y++)
            int d = y * 256 - h * 128 + lineHeight * 128; //256 and 128 factors to avoid floats
            int texY = ((d * texHeight) / lineHeight) / 256;
            int color = texture[texNum][texWidth * texY + texX];
            //make color darker for y-sides: R, G and B byte each divided through two with a "shift" and an "and"
            if(side == 1) color = (color >> 1) & 8355711;
            buffer[x][y] = color;
          }//end of for(y = drawStart; y < drawEnd; y++)
          //SET THE ZBUFFER FOR THE SPRITE CASTING
          ZBuffer[x] = perpWallDist; //perpendicular distance is used
          //FLOOR CASTING
          double floorXWall, floorYWall; //x, y position of the floor texel at the bottom of the wall
          //4 different wall directions possible
          if(side == 0 && rayDirX > 0)
            floorXWall = mapX;
            floorYWall = mapY + wallX;
          }//end of if(side == 0 && rayDirX > 0)
          else if(side == 0 && rayDirX < 0)
            floorXWall = mapX + 1.0;
            floorYWall = mapY + wallX;
          }//end of else if(side == 0 && rayDirX < 0)
          else if(side == 1 && rayDirY > 0)
            floorXWall = mapX + wallX;
            floorYWall = mapY;
          }//end of else if(side == 1 && rayDirY > 0)
          else
            floorXWall = mapX + wallX;
            floorYWall = mapY + 1.0;
          }//end of else
          double distWall, distPlayer, currentDist;
          distWall = perpWallDist;
          distPlayer = 0.0;
          if (drawEnd < 0) drawEnd = h; //becomes < 0 when the integer overflows
          //draw the floor from drawEnd to the bottom of the screen
          for(y = drawEnd + 1; y < h; y++)
            currentDist = h / (2.0 * y - h); //you could make a small lookup table for this instead
            double weight = (currentDist - distPlayer) / (distWall - distPlayer);
            double currentFloorX = weight * floorXWall + (1.0 - weight) * posX;
            double currentFloorY = weight * floorYWall + (1.0 - weight) * posY;
            int floorTexX, floorTexY;
            floorTexX = (int)(currentFloorX * texWidth) % texWidth;
            floorTexY = (int)(currentFloorY * texHeight) % texHeight;
            //floor
            buffer[x][y] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
            //ceiling (symmetrical!)
            buffer[x][h - y] = texture[6][texWidth * floorTexY + floorTexX];
          }//end of for(y = drawEnd + 1; y < h; y++)
        }//end of for(x = 0; x < w; x++)
        //SPRITE CASTING
        //sort sprites from far to close
        int i;
        for(i = 0; i < numSprites; i++)
          spriteOrder[i] = i;
          spriteDistance[i] = ((posX - sprite[i].x) * (posX - sprite[i].x) + (posY - sprite[i].y) * (posY - sprite[i].y)); //sqrt not taken, unneeded
        }//end of for(i = 0; i < numSprites; i++)
        combSort(spriteOrder, spriteDistance, numSprites);
        //after sorting the sprites, do the projection and draw them
        for(i = 0; i < numSprites; i++)
          //translate sprite position to relative to camera
          double spriteX = sprite[spriteOrder[i]].x - posX;
          double spriteY = sprite[spriteOrder[i]].y - posY;
          //transform sprite with the inverse camera matrix
          // [ planeX   dirX ] -1                                       [ dirY      -dirX ]
          // [               ]       =  1/(planeX*dirY-dirX*planeY) *   [                 ]
          // [ planeY   dirY ]                                          [ -planeY  planeX ]
          double invDet = 1.0 / (planeX * dirY - dirX * planeY); //required for correct matrix multiplication
          double transformX = invDet * (dirY * spriteX - dirX * spriteY);
          double transformY = invDet * (-planeY * spriteX + planeX * spriteY); //this is actually the depth inside the screen, that what Z is in 3D      
          int spriteScreenX = (int)((w / 2) * (1 + transformX / transformY));
          //parameters for scaling and moving the sprites
          #define uDiv 1
          #define vDiv 1
          #define vMove 0.0
          int vMoveScreen = (int)(vMove / transformY);
          //calculate height of the sprite on screen
          int spriteHeight = abs((int)(h / (transformY))) / vDiv; //using "transformY" instead of the real distance prevents fisheye
          //calculate lowest and highest pixel to fill in current stripe
          int drawStartY = -spriteHeight / 2 + h / 2 + vMoveScreen;
          if(drawStartY < 0) drawStartY = 0;
          int drawEndY = spriteHeight / 2 + h / 2 + vMoveScreen;
          if(drawEndY >= h) drawEndY = h - 1;
          //calculate width of the sprite
          int spriteWidth = abs( (int) (h / (transformY))) / uDiv;
          int drawStartX = -spriteWidth / 2 + spriteScreenX;
          if(drawStartX < 0) drawStartX = 0;
          int drawEndX = spriteWidth / 2 + spriteScreenX;
          if(drawEndX >= w) drawEndX = w - 1;
          //loop through every vertical stripe of the sprite on screen
          int stripe;
          for(stripe = drawStartX; stripe < drawEndX; stripe++)
            int texX = (int)(256 * (stripe - (-spriteWidth / 2 + spriteScreenX)) * texWidth / spriteWidth) / 256;
            //the conditions in the if are:
            //1) it's in front of camera plane so you don't see things behind you
            //2) it's on the screen (left)
            //3) it's on the screen (right)
            //4) ZBuffer, with perpendicular distance
            int y;
            if(transformY > 0 && stripe > 0 && stripe < w && transformY < ZBuffer[stripe])
            for(y = drawStartY; y < drawEndY; y++) //for every pixel of the current stripe
              int d = (y-vMoveScreen) * 256 - h * 128 + spriteHeight * 128; //256 and 128 factors to avoid floats
              int texY = ((d * texHeight) / spriteHeight) / 256;
              unsigned int color = texture[sprite[spriteOrder[i]].texture][texWidth * texY + texX]; //get current color from the texture//??????????????????
              if((color & 0x00FFFFFF) != 0) buffer[stripe][y] = color; //paint pixel if it isn't black, black is the invisible color
            }//end of for(y = drawStartY; y < drawEndY; y++)
          }//end of for(stripe = drawStartX; stripe < drawEndX; stripe++)
        }//end of for(i = 0; i < numSprites; i++)
        //readKeys
        //move forward if no wall in front of you
        if (K_UP)
          if(worldMap[(int)(posX + dirX * moveSpeed)][(int)(posY)] == false) posX += dirX * moveSpeed;
          if(worldMap[(int)(posX)][(int)(posY + dirY * moveSpeed)] == false) posY += dirY * moveSpeed;
        }//end of if (K_UP)
        //move backwards if no wall behind you
        if (K_DOWN)
          if(worldMap[(int)(posX - dirX * moveSpeed)][(int)(posY)] == false) posX -= dirX * moveSpeed;
          if(worldMap[(int)(posX)][(int)(posY - dirY * moveSpeed)] == false) posY -= dirY * moveSpeed;
        }//end of if (K_DOWN)
        //rotate to the right
        if (K_RIGHT)
          //both camera direction and camera plane must be rotated
          double oldDirX = dirX;
          dirX = dirX * cos(-rotSpeed) - dirY * sin(-rotSpeed);
          dirY = oldDirX * sin(-rotSpeed) + dirY * cos(-rotSpeed);
          double oldPlaneX = planeX;
          planeX = planeX * cos(-rotSpeed) - planeY * sin(-rotSpeed);
          planeY = oldPlaneX * sin(-rotSpeed) + planeY * cos(-rotSpeed);
        }//end of if (K_RIGHT)
        //rotate to the left
        if (K_LEFT)
          //both camera direction and camera plane must be rotated
          double oldDirX = dirX;
          dirX = dirX * cos(rotSpeed) - dirY * sin(rotSpeed);
          dirY = oldDirX * sin(rotSpeed) + dirY * cos(rotSpeed);
          double oldPlaneX = planeX;
          planeX = planeX * cos(rotSpeed) - planeY * sin(rotSpeed);
          planeY = oldPlaneX * sin(rotSpeed) + planeY * cos(rotSpeed);
        }//end of if (K_LEFT)
    }//end of CastRay
    //sort algorithm
    void combSort(int* order, double* dist, int amount)
      int gap = amount;
      enum bool swapped = false;
      while(gap > 1 || swapped)
        //shrink factor 1.3
        gap = (gap * 10) / 13;
        if(gap == 9 || gap == 10) gap = 11;
        if (gap < 1) gap = 1;
        swapped = false;
        int i;
        for (i = 0; i < amount - gap; i++)
          int j = i + gap;
          if (dist[i] < dist[j])
            double disttemp=dist[i];
            dist[i]=dist[j];
            dist[j]=disttemp;
            int ordertemp=order[i];
            order[i]=order[j];
            order[j]=ordertemp;
            swapped = true;
          }//end of if (dist[i] < dist[j])
        }//end of for (i = 0; i < amount - gap; i++)
      }//end of while(gap > 1 || swapped)
    }//end of combSort
    the sorce file can be found here http://bruce-lab.blogspot.com/2010/04/alchemy-ray-casting-engine-source-code.html

    RadioactiveLizard, you need adobe alchemy (http://labs.adobe.com/technologies/alchemy/) to compile the C code to a swc,
    not pass variables to C directly.

Maybe you are looking for