View Full Version : [C++] C++ e OpenGL
Salve ragazzi...
Ho un grande problema. Ho un codice in C++ e vorrei fare la versione in OpenGL.
Qualcuno mi può dare una mano per favore con OpenGL?
variabilepippo
29-11-2007, 20:02
Qualcuno mi può dare una mano per favore?
Come possiamo aiutarti? Di cosa si tratta?
Come possiamo aiutarti? Di cosa si tratta?
Allora io ho un codice in C++ che è un cavallo che si muove su una scacchiera.
Devo dire che non sono bravo a programmare in C++ ma lo stesso ho scritto come deve muoversi il cavallo. Il mio problema è come implementare l'OpenGL.
AnonimoVeneziano
29-11-2007, 21:46
Allora io ho un codice in C++ che è un cavallo che si muove su una scacchiera.
Devo dire che non sono bravo a programmare in C++ ma lo stesso ho scritto come deve muoversi il cavallo. Il mio problema è come implementare l'OpenGL.
non mi sembra che stai dando abbastanza informazioni affinchè noi possiamo fare qualcosa. (non io in particolare che di OpenGL so poco, ma chi ne sa)
Credo che dovresti almeno postare pezzi di codice che non ti sono chiari. (tutto in caso non ti fosse chiaro nulla :D )
Ciao
Con quale libreria grafica è realizzato questo codice ?
Usa GLUT, cerca un tutorial per fare il setup della finestra e le matrici fondamentali (World, View, Projection).
Prepara la mesh per il tuo cavallo e renderizzala settando le matrici.
Sto usando Glut. Tra copia incolla, e vari tutorial online questo è il codice:
#include <iostream>
#include <iomanip>
using namespace std;
const int size = 8;
class position {
public:
position(int x=0, int y=0) {row = x; col = y;}
int getrow() const {return row;}
int getcol() const {return col;}
int getlast_mov() const {return last_mov;}
void setlast_mov(int l_mov){last_mov=l_mov;}
private:
int row;
int col;
int last_mov;
};
template< class T >
class Stack {
public:
Stack( int SIZE = size*size );
~Stack() { delete [] stackPtr; }
bool push( const T& );
bool pop( T& );
int getsize() const {return SIZE;}
bool isEmpty() const { return top == -1; }
bool isFull() const { return top == SIZE - 1; }
private:
int SIZE;
int top;
T *stackPtr;
};
template< class T >
Stack< T >::Stack( int s )
{
SIZE = s > 0 ? s : size*size;
top = -1;
stackPtr = new T[ SIZE ];
}
template< class T >
bool Stack< T >::push( const T &pushValue )
{
if ( !isFull() ) {
stackPtr[ ++top ] = pushValue;
return true;
}
return false;
}
template< class T >
bool Stack< T >::pop( T &popValue )
{
if ( !isEmpty() ) {
popValue = stackPtr[ top-- ];
return true;
}
return false;
}
void print_board(int[][size]);
bool can_move(int,int,int,int,int[][size]);
void move_b(int,int,int,int,int[][size],int);
position update_stack(int x_pos, int y_pos, int last_mov);
void main(){
int x_pos,y_pos;
int board[size][size]={0};
int move[8][2]={1,2, 2,1, 2,-1, 1,-2, -1,-2, -2,-1, -2,1, -1,2};
do
{
cout<<"\nEnter an initial position: ";
cin>>x_pos>>y_pos;
} while ((x_pos<0)||(x_pos>=size)||(y_pos<0)||(y_pos>=size));
int last_mov=0;
position knights(x_pos,y_pos);
knights.setlast_mov(last_mov);
move_b(x_pos,y_pos,0,0,board,0);
Stack <position> knight_stack(size*size);
knight_stack.push(knights);
bool exit_loop=false;
while ((knight_stack.isEmpty()==false) && (knight_stack.isFull()==false))
{
exit_loop=false;
for (;exit_loop==false;last_mov++)
{
if (last_mov<8)
{
if (can_move(x_pos,y_pos,move[last_mov][0],move[last_mov][1],board))
{
move_b(x_pos,y_pos,move[last_mov][0],move[last_mov][1],board,0);
x_pos=x_pos+move[last_mov][0];
y_pos=y_pos+move[last_mov][1];
knight_stack.push(update_stack(x_pos,y_pos,last_mov));
last_mov=-1;
exit_loop=true;
}
}
else
{
knight_stack.pop(knights);
last_mov=knights.getlast_mov();
x_pos=knights.getrow();
y_pos=knights.getcol();
move_b(x_pos,y_pos,move[last_mov][0],move[last_mov][1],board,1);
x_pos=x_pos-move[last_mov][0];
y_pos=y_pos-move[last_mov][1];
last_mov++;
exit_loop=true;
}
}
}
if (knight_stack.isEmpty()==true)
cout<<"There are no solutions for the proposed problem... \n";
if (knight_stack.isFull()==true)
print_board(board);
}
position update_stack(int x_pos, int y_pos, int last_mov)
{
position knights(x_pos,y_pos);
knights.setlast_mov(last_mov);
return (knights);
}
void print_board(int board[][size])
{
cout<<"Here is one possible solution for the knights tour:\n";
for (int i=0;i!=size;i++)
{
for (int k=0;k!=size;k++)
{
cout<<setw(3)<<board[i][k];
}
cout<<"\n";
}
}
bool can_move(int x,int y,int delta_x,int delta_y,int board[][size])
{
if (((x+delta_x)>=size)||((x+delta_x)<0)||((y+delta_y)<0)||((y+delta_y)>=size))
return(false);
if (board[x+delta_x][y+delta_y]!=0)
return(false);
return(true);
}
void move_b(int x,int y,int delta_x,int delta_y,int board[][size],int erase){
if (erase==1)
{
board[x-delta_x][y-delta_y]=board[x][y]-1;
board[x][y]=0;
}
else
{
board[x+delta_x][y+delta_y]=board[x][y]+1;
}
position knights(x+delta_x,y+delta_y);
}
Il problema è che mi va in loop quando metto la posizione iniziale del cavallo :confused:
Postato il codice per due volte...
come mai hai realizzato una tua classe Stack? non va bene la classe stack delle STL?
come mai hai realizzato una tua classe Stack? non va bene la classe stack delle STL?
quella classe diciamo che l'ho copita perché non sapevo che poteva andar bene anche la classe stack delle STL... cmq anche te va in loop il primo codice che ho postato? :rolleyes:
ciao grazie
nessuno che mi può dare una mano? :help:
Black imp
05-12-2007, 01:24
scusa mi sembra che tu chieda un po' troppo. è come se chiedessi come si programma in c++. tu devi implementare tutta la grafica. che ti si può dire? studia opengl! non sono mica 2 comandi. cerca i tutorial di nehe. fra qualche settimana, se studi in fretta forse riesci a farlo.
scusa mi sembra che tu chieda un po' troppo.
Scusatemi ragazzi, lo so che forse ho chiesto troppo... ma se gentilmente qualcuno poteva aiutarmi mi faceva un grandissimo favore visto che non so quasi niente di C++. Lo so che devo leggere un pò di tutorial ecc. Però mi hanno detto che non dovevo mettere + di 3 giorni per fare questo progetto e sinceramente ci sto mettendo quasi 3 settimane :sob:
A me sembra strano che non sapendo niente di C++ tu debba usare OpenGL...
variabilepippo
05-12-2007, 13:33
visto che non so quasi niente di C++
Però mi hanno detto che non dovevo mettere + di 3 giorni per fare questo progetto e sinceramente ci sto mettendo quasi 3 settimane
Probabilmente 3 giorni è il tempo stimato per chi conosce bene il C++ e discretamente OpenGL... Visto che sei a zero chi decidesse di aiutarti dovrebbe scriverti completamente il codice. :mbe:
A me sembra strano che non sapendo niente di C++ tu debba usare OpenGL...
Pensavo di fare il progetto in Java... ma niente, non posso :doh:
variabilepippo
05-12-2007, 14:41
Pensavo di fare lo stesso progetto in Java... ma niente, non posso
Per un progetto del genere non c'è grande differenza tra farlo in C++ e farlo in Java, stiamo lì... Il vero problema consiste nel riuscire a padroneggiare OpenGL in pochi giorni (indipendentemente da Java o C++).
Per un progetto del genere non c'è grande differenza tra farlo in C++ e farlo in Java, stiamo lì... Il vero problema consiste nel riuscire a padroneggiare OpenGL in pochi giorni (indipendentemente da Java o C++). be' oddio, pure il C++ potrebbe metterci del suo: se uno non ha padronanza ed è sfigato che gli capita un bel bug potrebbe dover aggiungere un giorno di ritardo (da 3 giorni a 4 giorni). e meno male che, da quanto ho capito, il programma non necessita di concorrenza tra thread.
variabilepippo
05-12-2007, 15:57
be' oddio, pure il C++ potrebbe metterci del suo
Vero, ma è una questione di ordini di grandezza, dando un'occhiata al codice proposto non vedo differenze concettuali tra C++ e Java tali da essere paragonabili allo sforzo richiesto per imparare da zero a programmare con OpenGL... :) In altri termini, IMHO il fatto di doverlo scrivere necessariamente in C++ è un problema trascurabile rispetto al dover usare OpenGL (soprattutto per uno che conosce Java ma non OpenGL)!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.