Page 1 sur 1

suggestion a propos des cameras

Publié : sam. 06/oct./2012 14:45
par Backup
@G_rom
comme tu le sais, je fais mumuse avec les Anaglyphes

je trouve 2 choses dommage dans le code ci dessous :

qu'on ne puisse pas superposer la Vue de 2 cameras
(dans l'exemple on vois bien que le fond de la camera de gauche efface une partie de la camera de droite .. il est pourtant indiqué dans la doc, qu'une camera est crée avec fond transparent .. )
Syntaxe

CameraBackColor(#Camera, Couleur)
Description

Change la couleur de fond de la #Camera. RGB() peut être utilisée pour obtenir une couleur valide. ; Quand une nouvelle camera est créée, son fond est transparent pour permettre de mixer facilement un fond 2D avec une scène 3D.
si nous pouvions superposer a l'ecran , le contenue des 2 cameras , ça ouvrirai alors la porte au anaglyphes ( et possibilité de jeux en anaglyphe :) )

la deuxieme chose, bien sur il faudrait pouvoir filtrer les couleurs des cameras en ne laissant passer Que le rouge pour celle de gauche
et que le Cyan (Vert+bleu) pour celle de droite
ça demanderai de creer une fonction CameraFRONTColor(#Camera, r,v,b )
3 parametres , qui decideraient, quelle couleur ont laisse passer
1,0,0 pour ne laisser passer que le rouge
0,1,0 , pour ne laisser passer que le vert
0,0,1 pour ne laisser passer que le bleu
ou meme
0,1,1 pour ne laisser passer que le Cyan (vert+bleu ) etc ....

et 1,1,1 pour le fonctionnement normal :)



en les superposant, ces cameras , nous aurions alors la 3D anaglyphe a l'ecran :)

je pense que ça doit pas etre évident a faire ....

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Camera
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 1

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D()
	
	  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
	  Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
	  
	  InitSprite()
	  InitKeyboard()
	  InitMouse()
	  
	  If Screen3DRequester()
	    
	    KeyboardMode(#PB_Keyboard_International) 
	    
	    AmbientColor(RGB(0, 200, 0))  ; Green 'HUD' like color 
	 
	    CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
	    CreateEntity(0, LoadMesh(0, "robot.mesh"), MaterialID(0))
	    AnimateEntity(0, "Walk")
	    
	    CreateCamera(0, 0, 0, 100, 100)  ; gauche camera (qui filtrerai son contenu en ne laissant que le Rouge passer )
	 CreateCamera(1,0, 0, 55, 50) ; droite camera ( qui filtrerai son contenu en ne laissant que le Vert+bleu passer )
	; et surtout qu'une camera laisse son fond transparent !!  cela permettrai des superpositions  qui amenerai la possibilité de faire des jeux Anaglyphes  :o)
	    CameraLocate(0, 0, 20, 250)  
	    CameraLocate(1, 5, 20, 250) ; ici on poserai la camera de gauche a gauche (faire l'ecart des yeux )
	   
	    
	    CameraRenderMode(0, #PB_Camera_Wireframe)  ; Wireframe for this camera
	  CameraRenderMode(1, #PB_Camera_Wireframe)  ; Wireframe for this camera
	 
	    Repeat
	      Screen3DEvents()
	      
	      If ExamineMouse()
	        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
	        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
	      EndIf
	      
	      If ExamineKeyboard()
	             
	        If KeyboardPushed(#PB_Key_Left)
	          KeyX = -#CameraSpeed 
	        ElseIf KeyboardPushed(#PB_Key_Right)
	          KeyX = #CameraSpeed 
	        Else
	          KeyX = 0
	        EndIf
	                  
	        If KeyboardPushed(#PB_Key_Up)
	          KeyY = -#CameraSpeed 
	        ElseIf KeyboardPushed(#PB_Key_Down)
	          KeyY = #CameraSpeed 
	        Else
	          KeyY = 0
	        EndIf
	
	      EndIf
	      
	      
	      RotateEntity(0, 0, 0.1, 0, #PB_Relative)
	      
	      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
	      MoveCamera  (0, KeyX, 0, KeyY)
	      
	      RotateCamera(1, MouseY, MouseX, 0, #PB_Relative)
	      MoveCamera  (1, KeyX, 0, KeyY)
	      
	      RenderWorld()
	      Screen3DStats()
	      FlipBuffers()
	    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
	  EndIf
	    
	Else
	  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End; EPB

Re: suggestion a propos des cameras

Publié : sam. 06/oct./2012 15:13
par G-Rom
je suis overbooké , mais pour faire ce que tu souhaite , j'utiliserais 2 camera de rendu de textures ( les yeux )
avec un shader pour chaque texture , avec une 3° camera fixe et un plan qui projete le résultat des 2 rendu textures.
Donc un noeud global , 2 cameras attaché au noeud global , deux rtt , deux shader , une 3° camera , un plan de la taille de l'écran , et puis rendre tout ca dans un .material
en l'état actuel c'est faisable. ;)

Re: suggestion a propos des cameras

Publié : sam. 06/oct./2012 15:16
par Backup
G-Rom a écrit :je suis overbooké , mais pour faire ce que tu souhaite , j'utiliserais 2 camera de rendu de textures ( les yeux )
avec un shader pour chaque texture , avec une 3° camera fixe et un plan qui projete le résultat des 2 rendu textures.
Donc un noeud global , 2 cameras attaché au noeud global , deux rtt , deux shader , une 3° camera , un plan de la taille de l'écran , et puis rendre tout ca dans un .material
en l'état actuel c'est faisable. ;)

ben quand tu aura un moment faudra qu'on vois ça ensemble :)


ps : ici il montre la base pour faire ça avec 3dsmax

http://www.crealyse.com/ressources-peda ... yphes.html

faudrai pouvoir faire ça avec ogre :)

Re: suggestion a propos des cameras

Publié : dim. 07/oct./2012 10:59
par comtois
y'a un plugin pour ogre qui le fait

http://www.ogre3d.org/forums/viewtopic.php?t=32284

ça n'a pas l'air d'être si simple que ça à faire.

Re: suggestion a propos des cameras

Publié : dim. 07/oct./2012 11:42
par Backup
excellent !

on peut employer ce pluggin en Purebasic ?

Re: suggestion a propos des cameras

Publié : lun. 08/oct./2012 8:51
par kelebrindae
Hmm... Est-ce que les "compositors" ne sont pas censés pouvoir faire des choses comme ça?
(Et tiens, au fait, je ne crois pas avoir vu d'exemple de compositor en PB; ça fonctionne? )