/ / C o ObjC per raytracer in tempo reale su iOS? - obiettivo-c, c, ios, in tempo reale, raytracing

C o ObjC per raytracer in tempo reale su iOS? - obiettivo-c, c, ios, in tempo reale, raytracing

Sto iniziando a costruire un raytracer in tempo reale periOS. Sono nuovo in questa cosa di raytracing, tutto quello che ho fatto finora è scrivere in rudimentale in ObjC. Mi sembra che un raytracer basato su C sarà più veloce di uno scritto in ObjC, ma quello di ObjC sarà molto più semplice, poiché le gerarchie degli oggetti sono molto utili. La velocità è molto importante, però, dato che voglio che sia in tempo reale, diciamo 30 fps.

Qual è la tua opinione sull'accelerazione di Cvalga la complessità in più? Posso prevedere che il codice C impiega molto più tempo e mi provoca mal di testa con un sacco di bug (anche se non sono nuovo a C), ma andare verso una maggiore velocità è inizialmente seducente.

Ci sono degli esempi là fuori di raytracers scritti in C? La mia ricerca su Google per queste cose è contaminata da molti risultati per C ++ e C #.

risposte:

1 per risposta № 1

Se vuoi un tracciamento dei raggi veloci, puoi quasi dimenticarti di usare o C o obiettivo C. Quasi certamente vorrai usare OpenCL. Non sarà ancora abbastanza per ottenere (anche molto vicino) 30 fps, ma probabilmente sarà almeno il doppio più veloce di qualsiasi altra cosa che gira sulla CPU (e 5-10 volte più veloce non sarebbe vera sorpresa).


0 per risposta № 2

come affermato da zneak, c ++ è la migliore combinazione per velocità e polimorfismo.

tuttavia, puoi realizzare qualcosa da vicinoriducendo le chiamate objc (leggi: riduci l'interfaccia polimorfica al set minimo richiesto, quindi metti solo le parti che devono essere veloci in plain c o c ++).

la spedizione di messaggi objc è abbastanza veloce, e tu puoiin genere rimuovi molti dei metodi virtuali / dinamici dalle tue interfacce (supponiamo che ogni metodo di istanza objc sia virtuale). il codice c nei metodi objc è ancora il codice c ... da lì, determinare dove sono i colli di bottiglia - non fa male al profilo prima di cambiare codice funzionante, sia;)


0 per risposta № 3

Scrivere un "Raytracer in tempo reale" è senza l'usodell'assemblaggio ottimizzato a mano (o l'uso del compilatore Intel "economico";), ma ciò non è possibile per questa piattaforma), impossibile perché è necessaria la velocità.

Inoltre, è necessaria molta potenza di elaborazionema immagino che anche il percorso OpenCL non sia abbastanza potente (questo è a mio parere il caso anche per le macchine Desktop reali, la ragione di ciò è la mancanza di un vero grande cache sul processore grafico).


0 per risposta № 4

Dai un'occhiata http://ofps.oreilly.com/titles/9780596804824/ è il più vicino possibile.

Non è una traccia, ho scritto un raggiotracciante ed è un'enorme quantità di lavoro. GL usa una tecnica diversa per la grafica, quindi non sarà in grado ad esempio di rendere la capacità di un diamante di catturare la luce. quel collegamento contiene codice di esempio, è possibile scaricarlo ed eseguirlo. Ti renderai conto che anche alcuni degli esempi moderatamente complessi fanno davvero presa su un dispositivo reale ... stiamo parlando di <1 fps.