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();
}

HTLM

Ecco una parte del codice fatto a scuola in HTLM e CSS:

_________________________________________





Pagina 1:

<htlm>
  <head>
    <title>La Mia Pagina HTLM</title>
    <style>
    body{
      font-size: 12px;
      line-height: 18px;
      background: green;
      background-image:url(halo.jpg);      
      background-repeat: repeat-y;

      }
#pagina{margin-left: 10px; margin-right: 10px; margin-top: 50px; background-color: white;}
  
#header{border: solid 5px red; font-size: 40px; height:700px; padding:5;}
#centro{border: solid 5px yellow; height:200px; padding:20;}
#footer{border: solid 5px blue;}
   #sinistra{float:left;}  
   #destra{float:right;}  
  select{font-size: 40px;}
    </style>
    <body>
    <!-- COMMENTO -->
<div id="pagina">
  
<div id="header">
     <h1>Si inizia a studiare HTLM</h1>
      <a href="pagina2.html">vai a pagina 2</a> 
<p>Oggi abbiamo iniziato il nuovo modulo</p>
                
             <div id="sinistra">
              <image src="halo.jpg" width="900px" height="500px" />
             </div>
             <div id="destra">
              <image src="haloreach.jpg" width="300px" height="500px" />
             </div> 
</div>
    
<div id="centro">
    
        <div id="sinistra">
          <h2>HTLM, pagine:</h2>
          <ol>
            <li>p1</li>
            <li>p2</li>
            <li>p3</li>
            <li>p4</li>
            <li>p5</li>
          </ol>
         </div> 
         
      <div id="destra">  
        <h2>Che X ti piace?</h2>
         <select>
           <option>x1</option>
           <option>x2</option>
           <option>x3</option>
           <option>x4</option>
           <option>x5</option>
         </select>
</div>
     
</div>
    
<div id="footer">
     <h3>con h3</h3>
<p>il fondo della pagg</p>
    
</div>
    
</div>
    </body>
  </head>
</htlm>
_____________________________________________


Pagina 2:



<html>
    <head>
            <title>La mia seconda pagina.....in quest anno!</title>
            <style>
            table{border: thin solid black;border-collapse: collapse;padding:20;}
            td,th{border: thin dotted black;padding:20;}
            th{background-color:#66FFFF}
            </style>
            <body>
            <div id="pagina">
                    <div id="tabellina">
                      <table>
                              <tr> <th>Studenti</th><th>età</th></tr>
                              <tr> <th>Cavalierini</th><th>9 maggio 1991</th></tr>
                              <tr> <th>Ceccarini</th><th>25 maggio 1990</th></tr>
                              <tr> <th>Ceccarini</th><th>7 gennaio 1990</th></tr>
                              <tr> <th>Palazzetti</th><th>26 dicembre 1991</th></tr>
                      </table>
                    </div>
                   <a href="pagina1.html">vai a pagina 1</a> 
            </div>
           </body>
    </head>
</html>


sabato 12 dicembre 2009

ENGINE 3D openGL, ancora ombre


nuova immagine del l'engine 3D che sto realizando... (dopo 2 settimane ci rimetto le mani sopra XD)

rispetto al vecchio codicce ho corretto dei errori riguardanti l'estrusione della mesh, rispetto alla luce ...
inoltre ora è strutturato in modo che tutte le mesh possano proiettare lombra....
inoltre volendo ci possono essere vare sorgenti di luce :

domenica 6 dicembre 2009

SQLite e JAVA

Per semplificare l'interfaccia tra SQLite e Java ho scritto una piccola libreria composta da 3 classi:




-GetSQLDriver
-SQLib
-SQLEasy

Documentazione:

//libreria carica driver SQL
GetSQLDriver:

il metodo load carica il driver SQL
   driver= cartella dove si trova il driver (default="org.sqlite.JDBC")
  
   public static void load(String driver="org.sqlite.JDBC");


//Libreria gestione Database
SQLib:

il costruttore
   name=indicato il data base da caricare
   public SQLlib(String name);


metodo che chiude il database
   public void SQLClose();


metodo per modificare il db con istruzioni SQLite
   ed=comando SQLite
   public void addMod(String ed);


motodo che restituisce un dato dal DB, la natura del dato va specificata in SQLite
  ed=comando SQLite
  ResultSet= lista valori restituiti
  public ResultSet getMod(String ed)




//Libreria gestione Database, semplificata
SQLEasy:

il costruttore
   name=indicato il data base da caricare
   public SQLEasy(String name);


metodo che chiude il database
   public void SQLClose();


metodo per modificare il db con istruzioni SQLite
   ed=comando SQLite
   public void addMod(String ed);


motodo che restituisce un dato dal DB, la natura del dato va specificata in SQLite
  ed=comando SQLite
  ResultSet= lista valori restituiti
  public ResultSet getMod(String ed)

motodo veloce per creare una tabella
    a=nome tabella
    b=attributi tabella (in SQLite)
    public void crateTable(String a,String b);

motodo veloce per inserire i dati in una tabella
    a=nome tabella
    b=valori da inserire nella tabella (in SQLite)
    public void putValues(String a,String b);

motodo veloce per eliminare una tabella
    a=nome tabella
    public void deleteTable(String a);

motodo veloce per eliminare una riga
    a=nome tabella
    b=caratteristiche che ha il records da eliminare (in SQLite)
    public void deleteRecords(String a,String b);

motodo veloce per conoscere i dati di una tabella
    nTabella=nome della tabella
    nColonne[]=array contenente i nomi delle colonne
    records=valore boolean
         -true verrà restituita una array a due dimenzioni
               dove la prima indicherà il records ed la seconda i dati in esso contenuti


         -false verrà restituita una array a due dimenzioni
               dove la prima indicherà la colonna ed la seconda i dati in essa contenuti

    public String[][] getArrayFrom(String nTabella,String[] nColonne,boolean records=true)







Esempio:


//importo le classi per gestire SQLite
import java.sql.*;

class DbTest{
public DbTest (){
  GetSQLDriver.load(); // carico il driver
  SQLEasy test1=new SQLEasy("Test1.db"); // carico db

  //creo la tabella ed immetto i valori in essa
  test1.crateTable(“tab1”,”id int, nome char[250] ”);
  test1.putValues(“tab1”,”0,’ciao0’ ”);
  test1.putValues(“tab1”,”1,’ciao1’ ”);
  test1.putValues(“tab1”,”2,’ciao2’ ”);

 
  String[] t={“id”,”nome”};
   //stampo (tipo righe)
  printArrayRecords(
                                test1.getArrayFrom("uno",h),”Numero | Nome” ," | ","----------");
                                 );

  //cancello la riga 1
  test1.deleteRecords(“tab1”,”id=1”);


   //stampo (tipo colonne)
  printArrayColonne (
                                test1.getArrayFrom("uno",h,false),”Numero | Nome” ," | ","----------");
                                 );

  //cancella la tabella
  public void deleteTable(“tab1”);

  //chiudo il database
  test1.SQLClose()

}

public static void main(String[] args){
new DbTest();
}

 public void printArrayRecords(String[][] array,String x,String sv,String so){
    if(array!=null){
    System.out.println(x);
        for(int j=0;j<array.length;j++){
          for(int i=0;i<array[j].length;i++){ 
            System.out.print(array[j][i]+sv);
           }
          System.out.println("");
          System.out.println(so);
        }  
        }
    }
 
  DbTest
  public void printArrayColonne(String[][] array,String x,String sv,String so){
    if(array!=null){
    System.out.println(x);
        for(int j=0;j<array[0].length;j++){
          for(int i=0;i<array.length;i++){ 
            System.out.print(array[i][j]+sv);
           }
          System.out.println("");
          System.out.println(so);
        }  
        }
    }
}


giovedì 3 dicembre 2009

STRUTTURA DATA BASE

Ecco a lei professore la struttura del database creata da pampanelli andrea e me