Vai al contenuto

lauke

Members
  • Portfolio

    Portfolio
  • Numero messaggi

    28
  • Registrato

  • Ultima Visita

Info su lauke

  • Rango
    Matricola

Informazioni professionali

  • Sito Web
    http://
  1. lauke

    Modellatore alle prime armi

    Ma qualche immagine di uomo frontale e laterale si riesce a reperire? Io non trovo un tubo per la rete. Grazie delle risposte cmq.
  2. lauke

    Modellatore alle prime armi

    Per la femmina... e per il maschio?
  3. lauke

    Modellatore alle prime armi

    Salve ragazzi, sono un modellatore alle prime armi. Vorrei imparare a creare dei modelli low poly organici, nulla di complicato per la verità il mio massimo è arrivare a realizzare un omino grigio tipo quello presente in questo video. http://www.youtube.com/watch?v=J2xeDF-4SIU E poi animarlo. Preciso che l'omino vorrei imparare a farlo sia di sesso maschile che di sesso femminile, credetemi non voglio spingermi oltre, mi basta questo. Il problema è che chiaramente essendo alle prime armi mi viene un pò complicato cioè non ho una veduta precisa su come fare a realizzare un modello di questo tipo. Conosco di mio delle tecniche di base di modellazione, e le so applicare. Qualcosa sulla modellazione nurbs e qualkosa di modellazione poligonale la conosco per cui non sono proprio a terra. Però la mia massima aspirazione e arrivare a modellare un modello organico tipo quello grigio nel video che ho postato, che è privo di carattere espressivo, tratti particolari, insomma non c'ha niente è solo una sagoma in sostanza. Quindi secondo me è un qualcosa che potrei utilizzare come standard per poi arrivare a fare qualcosa di più complicato. Vorrei raggiungere però questo standard per ambo i sessi, sia maskio che femmina, già detto... Avete qualche suggerimento o tutorial su cui indirizzare? In 3D studio max possibilmente. Vi ringrazio in anticipo per le risposte.
  4. lauke

    3D Studio Max E I Modelli Nurbs

    Salve ragazzi, ho appena installato il 3D studio max 2009, mi serviva perchè volevo esportare qualche semplice modello NURBS, superficie, fatto li in C. In particolare ho bisogno di 3 cose per poter fare l'export 1. I punti di controllo 2. I pesi sui punti di controllo 3. Lo spazio nodale è possibile reperire queste 3 informazioni su una superficie nurbs tramite il max script? Attendo risposta, saluti!
  5. lauke

    Ancora Sulle Open Gl

    Oi ragazzi ciao. Ascoltate io ho iniziato a usare le open gl circa 2 mesi fa, ma ancora non ho capito una cosa. Quando il sistema operativo si interfaccia con la scheda grafica per farsi fare i calcoli? Cioè... voi sapete dalle glut, ma in generale anche, che per poter visualizzare su schermo si fa una cosa del tipo: glutDisplayFunc(&display); dove display è una funzione void, ora non capisco una cosa supponiamo che la mia funzione display sia così implementata: void display() { /* Procedura1 Procedura2 Procedura3 . . . Procedura N */ } La mia domanda se queste procedure eseguono calcoli da chi vengono eseguiti? vengono eseguiti dalla GPU? come fa il sistema operativo a capire che li deve eseguire la GPU? Se mi date una risposta m'illuminereste nn poco Grazie, Saluti
  6. lauke

    Visual Studio E Open Gl 2

    Ragazzi ho questi 5 sorgenti #include <iostream> #include <GL/gl.h> #include <GL/glut.h> #ifndef BEZIER_H #define BEZIER_H using std::cin; using std::cout; using std::cerr; using std::endl; using std::string; typedef double DCOORD; typedef DCOORD* DPCOORD; /*Definiamo il tipo DOUBLE POINTER COORD*/ class Bezier_Curve { public: Bezier_Curve(); Bezier_Curve(int,DPCOORD); /*Costruttore della curva Bezièr*/ /*implementata*/ int getDegree(); /*Implementata*/ DPCOORD getCoord(); /*Implementata*/ DPCOORD get_control_polygon_point(int) throw(int); /*Restituisce un pt del poligono di controllo*/ /*Implementata*/ DPCOORD get_bezier_point(double) throw(double); /*Restituisce un pt della curva bezier*/ /*Implementata*/ private: DPCOORD deCasteljau(double); /*Implementazione dell'algoritmo di deCasteljau*/ DPCOORD get_control_polygon_point_private(int); /*Procedura privata che restituisce un pt di controllo*/ /*Implementata*/ int degree; /*Definisce il grado della curva*/ DPCOORD coord; /*Definisce i punti del poligono di controllo*/ } bezier_curve; #endif #include "Bezier.h" Bezier_Curve::Bezier_Curve() { this->degree = 0; this->coord = NULL; } Bezier_Curve::Bezier_Curve(int d, DPCOORD c):degree(d),coord(c) {;} int Bezier_Curve::getDegree() { return this->degree; } DPCOORD Bezier_Curve::getCoord() { return this->coord; } DPCOORD Bezier_Curve::get_control_polygon_point_private(int i) { if(i > this->getDegree()) throw i; DPCOORD rcoord = new DCOORD[3]; DPCOORD P = this->getCoord(); int n = this->getDegree(); rcoord[0] = P[0*(n + 1) + i]; rcoord[1] = P[1*(n + 1) + i]; rcoord[2] = P[2*(n + 1) + i]; return rcoord; } DPCOORD Bezier_Curve::get_control_polygon_point(int i) throw(int) { try { return this->get_control_polygon_point_private(i); } catch(int) { cerr << "Exception index error in 'get_control_polygon_point' on 'Bezier_Curve" << endl; } } DPCOORD Bezier_Curve::deCasteljau(double u_0) { if(u_0 < 0 || u_0 > 1) throw u_0; DPCOORD C = new DCOORD[3]; DPCOORD P = this->getCoord(); int n = this->getDegree(); DPCOORD Q = new DCOORD[3*(n + 1)]; for(int i = 0; i <= n; i++) { Q[0*(n + 1) + i] = P[0*(n + 1) + i]; Q[1*(n + 1) + i] = P[1*(n + 1) + i]; Q[2*(n + 1) + i] = P[2*(n + 1) + i]; } for(int k = 1; k <= n; k++) { for(int i = 0; i <= n - k; i++) { Q[0*(n + 1) + i] = (1 - u_0)*Q[0*(n + 1) + i] + u_0*Q[0*(n + 1) + i + 1]; Q[1*(n + 1) + i] = (1 - u_0)*Q[1*(n + 1) + i] + u_0*Q[1*(n + 1) + i + 1]; Q[2*(n + 1) + i] = (1 - u_0)*Q[2*(n + 1) + i] + u_0*Q[2*(n + 1) + i + 1]; } } C[0] = Q[0*(n + 1)]; C[1] = Q[1*(n + 1)]; C[2] = Q[2*(n + 2)]; delete Q; return C; } DPCOORD Bezier_Curve::get_bezier_point(double u_0) throw(double) { try { return this->deCasteljau(u_0); } catch(double) { cerr << "Exception: parameter error on 'get_bezier_point' in Bezier_curve" << endl; } } #include "Bezier.h" #ifndef GRAPH_BEZIER_H #define GRAPH_BEZIER_H void init_bezier_curve(); void display_bezier_curve(); #endif #include "graphBezier.h" void init() { glClearColor(0.0,0.0,0.0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3d(1.0,1.0,1.0); glBegin(GL_LINE_STRIP); for(double u_0 = 0.0; u_0 <= 1.0; u_0 = u_0 + 0.01) { DPCOORD C = bezier_curve.get_bezier_point(u_0); glVertex3d(C[0],C[1],C[2]); delete C; } glEnd(); glutSwapBuffers(); } #include "graphBezier.h" int main(int argc, char** argv) { DCOORD P[] = { 0.3,0.4,0.5,0.6,0.7, 0.1,0.7,0.3,0.5,0.2, 0.0,0.0,0.0,0.0,0.0 }; int n = 4; //Bezier_Curve curve(n,P); //bezier_curve = &curve; //glutInit(&argc,argv); //glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); //glutInitWindowSize(800,600); //glutInitWindowPosition(100,100); //glutCreateWindow("Bezier_Curve"); //init_bezier_curve(); //glutDisplayFunc(&display_bezier_curve); //glutMainLoop(); return 0; } Al di là di quello che c'è scritto nel codice, che poco mi interessa... non capisco perchè non mi compila uno dei problemi è la viariabile globale nell'header di bezier.h dice che è tipo duplicata... ma non vedo come e dove. Mi aiutate? Grazie Saluti
  7. Sisi, cmq ho passato gli header che avevo sul DEV c++ e ora funziona tutto... bhu a quanto pare voleva na versione delle open gl più aggiornata.
  8. lauke

    Open Gl E Visual Studio 2005

    Oi ragazzi ciao, ascoltate ho installato visual studio 2005 professional sul mio pc, e ho fatto solo questa stupidagine in un progetto visual C++ #include <windows.h> #include "stdafx.h" #include <iostream> #include <GL/gl.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { cout << "Ciao mondo!" << endl; system("pause"); return 0; } Cioè niente... però non mi compila, mi da 143 errori sul file gl.h, come se ci fossero delle dichiarazioni illegali, ma io il file non l'ho toccato proprio... qualkuno mi aiuta a far funzionare il tutto? Preciso che ho installato proprio adesso visual studio, ma non so dove mettere le mani per far partire tutto. Altra cosa ho windows 7, non so se questo possa essere un problema data la versione di visual studio che ho, anche se non credo perchè da un errore nell'header. Saluti attendo risposte!!!!
  9. Salve ragazzi, scusate il disturbo. Espongo subito il problema... allora nella sostanza non sono proprio capace di usare glOrtho glFrustum gluLookAt della glOrtho ho provato a smanettare su quelli che sono i parametri da passare GLleft GLright GLbottom GLtop GLnear GLfar è diciamo ce ho notato dei risultati in sostanza schiaccia il "cubo" in cui c'è la scena per farla breve, o allarga. Solo che non capisco molto l'utilità... però so che è necessario saperlo usare glFrustum ho provato come in glOrtho a smanettare con i parametri, però completamente non noto cambiamenti, oppure ho dei salti- a visuale scura, cioè mi sparisce la scena. la gluLookAt ho capito a cosa serve diciamo che non usando la frustum ma la ortho ho dei cambiamenti, nel senso riesco a ruotare attorno all'oggetto però se mi avvicino non noto differenza, e penso sia il modello di prospetiva il problema, che per la ortho è a parallelepipedo. La frustum adopera invece un modello piramidale e quindi dovrei percepire delle variazioni quando mi avvicino o allontano dall'oggetto. Però non so proprio impostare i parametri. Qualkuno può spiegarmi in ogni caso come funzionano queste 3 funzioni? ad esempio... la ortho e la frustum devono essere usate insieme? oppure no le si può usare indipendentemente? nel senso... devo variare prima la ortho e poi la frustum per percepire cambiamenti? a volte se provo ad avvicinarmi ad un oggetto sparisce del tutto, anche a quelle che me sembrano distanze consistenti... Grazie per l'attenzione attendo impazientemente qualke risposta saluti!
  10. Caso mai non si fosse capito...è quello che mi interessa fare...senza avvalermi di altro, per cui ho stuiato solo ciò che ritenevo indispensabile. Cmq i GL_QUAD_STRIP non si prestano bene alla questione, i GL_TRIANGLE_STRIP dovrebbero invece prestarsi in maniera perfetta alla questione, in linea teorica e su "carta". Ora testo e posto il risultato.
  11. Bhu su windows non da manco mezzo problema...
  12. ? Ho studiato dal red book, sta cosa è scritta li? o dov'è scritta? Se è il red book ricordo che parlava dell'approssimazione di curve, di superfici no sinceramente...adesso ricontrollo. (Ricordo che sono "arrivato" al capitolo 3) Do un occhiata a quei codici intanto
  13. Riguardo i thread... I thread condividono variabili globali e file aperti, ma relativamente al loro blocco ciascuno ha il suo spazio di memoria. La mutua esclusione va applicata in ciò che è condiviso, e in scrittura soprattutto. Nei miei thread l'unico accesso condiviso si ha quando viene chiamata la "CreateWindow". Che non so di preciso cosa vada a toccare, ma credo riguardi la finestra corrente, fatto sta che mettendo la chiamata in un mutex il problema s'è risolto. Riguardo la MainLoop...si è vero va chiamata una volta in tutto il programma, ma va fatto così se il programma è monothread. Se ad ogni finestra associ un proprio thread, il problema si ripresenta, cioè una chiude prima del tempo. Per cui la mainLoop è necessaria. In ogni caso gentilmente mi fai vedere questo errore "brutto" sotto linux? e se gentilmente posti la tua soluzione al problema. Così mi miglioro... grazie
  14. A me l'unica tecnica che potrebbe venire a mente è quella di una specie di "griglia",poi deformabile a piacimento. Se io ho un piano, ciascuno con un proprio vertice posso modellarlo in modo tridimensionale come meglio credo. Non so se avete capito...
  15. Credo tu erri dal punto di vista matematico un'applicazione da R -> R^3 è una curva, da R^2 -> R^3 è una superficie, del resto diversamente non può essere, un piano nello spazio è un'applicazione lineare che va da R^2 -> R^3, per cui...I volumi sono da R^3 a R^3, ma il problema non è questo. Il mio quesito è...come disegnereste voi una superficie utilizzando le primitive? In effetti detto così non si capisce bene... hmmm allora supponiamo di avere la seguente funzione: float* curva(float t); /*Restituisce un vettore di dimensione 3*/ Questo significa che fissato t ho un punto nello spazio se volessi disegnare una curva potrei fare, per esempio, banalmente float t; for(t = 0; t < 1; t = t + delta_t) curva(t); è chiaro che questa procedura restituisce un luogo di punti derivante da un applicazione da R -> R^3 ora supponiamo che, per esempio, per farmi disegnare la curva nello spazio io usi questi: GL_POINTS è chiaro che ai fini di avere tempi di calcolo accettabili il delta_t, seppur piccolo, non deve scendere sotto una certa soglia, però avrò visualizzato un insieme discreto di valori nello schermo, e non continuo come io vorrei, per ovviare a questo inconveniente potre interpolare linearmente i vari punti con... GL_LINE_STRIP Sostanzialmente avrò quindi una curva continua, il cui errore rispetto a quella reale tenderà a 0 al tendere delta_t a 0 (chiamo dt tale infinitesimo). L'errore tende a 0 per teoria sulle spline, tutto dimostrato. Ripartiamo da capo, consideriamo una funzione del tipo float* surface(float u, float v); è chiaro che restituira un luogo di pt in R^3 l'applicazione va da R^2 -> R^3, per cui disegnerò una superficie nello spazio. Se faccio, per esempio: float u, v; for (u = 0; u < 1; u = u + delta_u) for (v = 0; v < 1; v = v + delta_v) surface(u,v); avrò un insieme discreto a rappresentarmi la superficie in questione, vedrò quindi una cosa "puntata" e non continua sullo schermo. Allora ripropongo la domanda, come interpolereste voi i vari punti sfruttando le primitive, in modo simile a quanto fatto per il caso delle curve? è chiaro che li il problema era decisamente più semplice, qui un pò meno. Cosa proponete? un'idea pure stupida sarebbe di aiuto. Grazie tante per l'attenzione, attendo suggerimenti.
×