mercoledì 17 febbraio 2010

ancora Engine 3D

Bene bene bene
dopo mesi di nulla facenza se non si considera  HTLM... alla fine ho ricominciato ad "impastare le mani" con il C++

ho trasportato l'engine vecchio da Code::Block ad Visual C++ EX ed. 2008
ed è risultato più complicato del previsto
inoltre ho riscritto gran parte del loader dei modelli 3D....
e cambiato ancora un altra volta l'algoritmo delle ombre...

in aggiunta ho inserito 4 semplici funzioni per la gestione dei tasti della finestra

(WindowKey(), KeyDown(), KeyHit())
e mi sembra anche per il mouse ho inserito altre 2 funzioni

inoltre ho inserito l'engine fisico newton nel progetto (anche se non ancora usabile)

cmq ecco a voi una DEMO! Per provare l'engine

http://www.megaupload.com/?d=341ZM6KM


l'immagine del suddetto esempio:


Ed ecco il codice che vine usato per questa demo:


#include "NewTonWp.hpp"
#include "engine3d.hpp"


#include <iostream>

int main3DEngine(){

    set3DEngine("G1",1024,720,32,FALSE);

    AmbientLightColor(128,128,128);

    ILight* light=createLight(1);
    EntityPosition(light,tV3(50,100,50));
    LightColor(light,255,255,255);
    pointLight(light,TRUE);
    LightRange(light,1100);
    LightConeAngles(light,180);
    EntityRotate(light,tV3(90,0,0));

    ICamera *objCamera=CreateCamera();
    EntityPosition(objCamera,tV3(0,4,-6));
    objCamera->CameraView(0.0f,0.0f,1.0f,1.0f);
    EntityRotate(objCamera,tV3(-30,180,0));
    CameraLight(objCamera,TRUE);
    setFogCamera(objCamera,50.0,100.0,
                           0.0,0.0,0.0);
    shadowMode(objCamera,1);

        IMesh* piramide1=load3DS("..\\media\\donut.3ds");
        EntityPosition(piramide1,tV3(-2,0.1,-2));
        EntityTurn(piramide1,tV3(90,0,0));
        EntityScale(piramide1,tV3(.10,.10,.10));
        normalMesh(piramide1);
normalMesh(piramide1);
        createCastShadow(piramide1);

        IMesh* piramide=load3DS("..\\media\\sh4.3ds");
        EntityPosition(piramide,tV3(0,-1,1.0));
        EntityTurn(piramide,tV3(0,0,0));
        EntityScale(piramide,tV3(.88,.88,.88));
        normalMesh(piramide);
        createCastShadow(piramide);

IMesh* gfloor=load3DS("..\\media\\vista2.3ds");
        normalMesh(gfloor);
        EntityPosition(gfloor,tV3(0.0,-2,1));
        EntityScale(gfloor,tV3(2.25,2.25,2.25));
       // EntityRotate(gfloor,tV3(90,0,0));
normalMesh(gfloor);
        createCastShadow(gfloor);
float CAMERASPEED=0.1;
float lightCaunt=0;
tV3 lightPos;

    /* programa main loop */
    while ((!KeyDown( VK_ESCAPE ))&&(!WindowKey( 0 )))
    {

            if(KeyDown(VK_UP)) EntityMove(piramide,tV3(0.0,CAMERASPEED,0.0));
            if(KeyDown(VK_DOWN)) EntityMove(piramide,tV3(0.0,-CAMERASPEED,0.0));

            if(KeyDown(VK_RIGHT)) EntityTurn(piramide,tV3(0.0,1.0,0));
            if(KeyDown(VK_LEFT)) EntityTurn(piramide,tV3(0.0,-1.0,0));

            if(KeyHit(' ')) shadowMode(objCamera,!objCamera->ZFail);

EntityTurn(piramide1,tV3(0,1,0));

lightPos.x=cos(lightCaunt*3.14/180)*50;
lightPos.y=abs(cos(lightCaunt*3.14/180))*80;
lightPos.z=cos(lightCaunt*3.14/180)*50;

EntityPosition(light,lightPos);
ShadowPos=lightPos;
lightCaunt+=0.30;
            Rander();

    }

    return free3DEngine();
}

Nessun commento: