2012-03-27 13 views
10

Ho fatto un progetto di grafica usando OpenGL e ora voglio convertirlo in WebGL in modo che possa metterlo sul web. C'è un modo per convertire direttamente i codici C++ OpenGL in WebGL o devo riscrivere manualmente ?? Ho appreso solo alcune nozioni di base su WebGL poiché sto imparando anche javascript in parallelo (solo perché è richiesto nella codifica di Webgl). E anche altri suggerimenti sono benvenuti.Come convertire il codice OpenGL in WebGL

risposta

13

Sono sorpreso che nessuno abbia menzionato lo Emscripten. Non è una soluzione perfetta e, a seconda di come è strutturato il tuo codice e di quali librerie utilizzi, potresti dover eseguire qualche modifica manuale, ma funziona piuttosto bene come un generico compilatore incrociato da C++ a Javascript.

Non faccio promesse che si tratti di un proiettile magico, ma potrebbe valere la pena dare un'occhiata.

+0

grazie mille .. :) Sto cercando di lavorare con Emscripten ... vediamo cosa succede. Sto usando le librerie di glut. – Bond

+2

Hai aggiornamenti su come ha funzionato? Sto prendendo una classe che è rigorosamente OpenGL ma spero di convertire il mio progetto finale in una versione basata sul web ... –

+0

Lasciatemi aggiungere il desktop GL ha [una vecchia API a funzione fissa obsoleta] (http: // StackOverflow .com/a/35802910/128511) che richiede qualche lavoro da emulare se si continua a utilizzarlo. – gman

0

In generale è necessaria la riscrittura manuale. Non c'è molta probabilità che una soluzione generica interpreti correttamente il codice esistente. Ovviamente potresti scrivere il tuo convertitore dato che hai il vantaggio di trattare solo con il tuo codice e le tue strutture.

Vale anche la pena ricordare che WebGL è un sottoinsieme di OpenGL ES 2.0, quindi il codice scritto per i sistemi desktop non sarà necessariamente comunque compatibile.

Il più vicino che ho visto è il codice per la conversione di modelli OBJ in codice WebGL.

1

A meno che la tua applicazione non sia banale, la maggior parte del tuo problema sarà la conversione del codice C++ in JavaScript. C++ e JavaScript sono lingue abbastanza diverse, ad es. uno viene tipizzato staticamente e l'altro viene digitato dinamicamente.

WebGL è basato su OpenGL ES 2.0, che è grosso modo un sottogruppo di OpenGL 2.0. Quindi puoi scrivere codice OpenGL che è direttamente traducibile, ma non è tutto il codice OpenGL. È difficile sapere quanto sia facile il porting del codice OpenGL senza ulteriori informazioni.

Non sono a conoscenza di alcuno strumento per automatizzare il lavoro per te, e sarei molto scettico verso tali strumenti se li vedessi. Mappare la semantica di un linguaggio di programmazione o di API a un altro è un compito molto difficile da automatizzare.

+0

kusma e @SpliFF Grazie per la risposta. In realtà ho creato una passeggiata attraverso un edificio e ora voglio pubblicizzarlo sulla rete ed è per questo che ho bisogno di webGL. – Bond

4

È una soluzione commerciale ma lo Mandreel lo farà. Emula anche il supporto della funzione fissa OpenGL ES 1.1 su WebGL. C'è anche Emscripten che convertirà il C/C++ e apparentemente ha un po 'di vecchio OpenGL support.

In caso contrario,

  1. si sta andando ad avere per convertire il C++ a JavaScript ovviamente
  2. Se avete usato le vecchie caratteristiche funzione fissi di vecchia OpenGL (glVertex, glColor, ecc ..) si 'll deve convertire i loro di utilizzare lo stile programmabile più recente di OpenGL 4 e OpenGL ES 2,0
+0

grazie mille per il vostro aiuto. Dovrò vedere il mio budget per Mandreel. Ma è davvero fantastico. – Bond

0

sembra che http://asmjs.org/ può essere una base per l'esecuzione di codice non-javascript nel browser.

Emscriptem (già menzionato), penso, può comprendere LLVM che può essere emesso da alcuni compilatori C++, ma probabilmente ha anche bisogno di un lavoro manuale, come vanno queste cose.

Non ho mai usato nessuno di questi ma ho letto su di loro e sembrano interessanti e stanno cercando di raggiungere quello che stai cercando di ottenere, non posso dire nulla sull'implementazione e su come funzionano nel "mondo reale" .

Problemi correlati