Un raytracer en c++ avec arbre csg pour linux (portable win32)

Description

GwoinRay est un raytracer en C++ développer pour un projet de fin d'année sous Linux.
Le programme lit un fichier script passé en paramètre et qui contient la scène à calculer. Différentes options (AntiAliasing, arbre CSG, faux bump, reflet, transparence, animation, ombres soft...) sont présentes et expliquées dans le fichier README.

Source / Exemple :


EXEMPLE DE FICHIER SCENE:
GwoinRay {
	ambiantlight <0.4,0.4,0.4>

	viewer {
		position <0,250,0>
		lookat <0, 200, 250>
		bank 0
	}

	plan {
		normale <0,1,0>
		distance 70
		diffuse <0.5, 0.9, 0.7>
	}

#les boules

	sphere { centre <0, 131, -350> rayon 100 diffuse <1,1,1>  reflection 0.9 brillance 5 }

	sphere { centre <-120, 150, 900> rayon 100 diffuse <1,1,1>  reflection 0.2 brillance 20 }
	sphere { centre <-100, 130, 550> rayon 100 diffuse <1,1,1> transparence 0.9 diffraction -10 reflection 0.2 brillance 20 }

	sphere { centre <-500, 80,-250> rayon 150 diffuse <0.8,0.8,0.9> reflection 0.3 brillance 75 bump 6 }
	
	csg difference {
		sphere { centre <500, 250, -400> rayon 120 diffuse <0.52, 0.95, 0.9>}
		boite { from <400,150,-300> to <600,350,-500> diffuse <0.2,1,1> }
	}	

	csg difference {
		boite { from <400,170,300> to <600,370,500> diffuse <0.8,0.5,1> }
		sphere { centre <500, 270, 400> rayon 120 diffuse <1,1,1> reflection 0.5 brillance 20 }
	}

	omni { position <0,430,0> rayon 800 couleur <1,0,0.85> }
	omni { position <-50,430,300> rayon 500 couleur <0.2,1,0.85> }
}

Conclusion :


Mon appli n'intègre pas les textures bitmap (juste procédurales), car je n'ai pas eu le temps de les mettre en place (projet développé en 1 week-end).

Le code peut-être assez complexe pour les débutants (templates, vector, héritages, ...) mais néanmoins util pour ceux qui auraient un projet à faire ;^)

j'allais oublié : l'affichage se fait dans un buffer OpenGL. C donc lui qui affiche dans une fenêtre GLUT.

G déveloper un autre raytracer en C qui prend en charge les textures mais pas l'arbre CSG (différence, union, intersection). Si ce projet vous interesse, envoyer moi un mail :^)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.