Author Topic: Accès aux valeurs des pixels d'une texture issue d'un RenderTexture  (Read 3233 times)

0 Members and 1 Guest are viewing this topic.

Steve

  • Associate
  • Posts: 1
Bonjour,
J'essaie depuis quelques temps d'accéder aux valeurs des pixels d'une texture issue d'un render texture. Mais j'ai toujours le même résultat : (0,0,0,0).

J'imagine donc que je me loupe quelque-part .
Voici le code :
      renderTextureId = HYP_RenderTexture.GetId("sceneRT")
      textureOutputId = HYP_Texture.GetId("textureOutput")      
               HYP_Texture.InitFromRenderTexture(textureOutputId , renderTextureId , 0)
               r, g, b, a = HYP_Texture.GetValueTex2DFloatRgba(textureEdgeletsOutputId,0)
         HYP_Debug.Trace (r)

Le "sceneRT" un un RenderTexture contenant plusieurs sorties
Le "textureOutput" est une texture vide de même type que la sortie 0 de sceneRT
Mon shader génère une image toute grise, le pixel 0 devrait donc valoir (0.5,0.5,0.5,1).

J'ai essayé de mettre ce code dans un script INIT,FRAME, etc. mais rien n'y fait...

D'ailleurs, après le InitFromRenderTexture, ma texture destination a toujours une taille de 0????

Des idées? 

Comme je n'arrive pas à joindre mon fichier xml, je vous colle le code ici :
Merci
Steve


<?xml version="1.0"?>
<geexlab>
   <scene name="MainScene" show_ref_grid="FALSE" display_fps="FALSE" vsync="FALSE" msaa="TRUE" >
      <background_color r="1." g="1." b="1." />
      <window_size width="800" height="600" />
      <background_image render="FALSE" image=""
      
      />
   </scene>


   <camera name="MainCamera" navigation_mode="ORBIT" fov="60.0" mouse_move_speed="1.0" keyboard_speed="500.0" mouse_wheel_speed="50.0" near_plane="10" far_plane="1000" >
      <position x="0.0" y="0.0" z="250" />
      <lookat x="0.0" y="0.0" z="0.0" w="1.0" />
      <orientation pitch="20.0" yaw="30.0" />
   </camera>


   <light name="light01" >
      <position x="0.0" y="0.0" z="250.0" />
      <ambient r="0.4" g="0.4" b="0.4" a="1.0" />
      <diffuse r="1.0" g="1.0" b="0.8" a="1.0" />
      <specular r="1.0" g="1.0" b="1.0" a="1.0" />
      
   </light>



   <material name="torusMeshMaterial" opacity="1.0" shader_program="TestShader">
      <ambient r="0.4" g="0.4" b="0.4" a="1.0" />
      <diffuse r="1.0" g="1.0" b="0.4" a="1.0" />
      <specular r="0.4" g="0.4" b="1.0" a="1.0" exp="60.0" />
   </material>


   <mesh name="torusMesh" render="TRUE" depth_test="TRUE" shape_type="TORUS"  lighting="FALSE" back_face_culling="FALSE" polygon_mode="SOLID" average_normals="TRUE" texturing="FALSE" vbo="FALSE" display_list="TRUE" auto_spin="FALSE" blending ="FALSE" >
      <torus radius="80.0" vertex_density="60" section_radius="800" />
      <position x="0.0" y="0.0" z="0.0" />
      <orientation pitch="0.0" yaw="0.0" roll="0.0" />
      <attach_material name="torusMeshMaterial" />            
       
   </mesh>
   <texture name="textureOutput" pixel_format="RGBA_FLOAT" />
   
   
   <render_texture name="sceneRT" type="FRAMEBUFFER" >
      <attach_texture_color pixel_format="RGBA_FLOAT"/>      <!-- RGBA_32F et RGBA_32F  ne sont pas clampes entre 0 et 1 -->
      <attach_texture_color pixel_format="RGBA_FLOAT"/> <!-- TODO : utiliser RGB_FLOAT et passer les valeurs de normal entre 0 et 1 (ajouter 1 et diviser par 2) -->
      <attach_render_buffer type="DEPTH" />      
   </render_texture>

   
   <shader_program name="TestShader" >
      <raw_data><![CDATA[
      
      
      [Vertex_Shader]
      #version 330 compatibility
      
      void main(){
         gl_Position = ftransform();          
         
      }
      
      [Pixel_Shader]
      #version 330 compatibility
   

      layout(location = 0) out vec4 positionOut;
      layout(location = 1) out vec4 depthNormOut;

      
      void main(){   
        positionOut = vec4(0.5,0.5,0.5,1.);
        depthNormOut = vec4(1.,1.,1.,1.);
      
      }
      ]]></raw_data>
   </shader_program>

   
   
   <script name="frameScript" run_mode="FRAME" language="LUA" >
      <raw_data><![CDATA[
x, y, z = HYP_Object.GetPosition(MainCameraId)
HYP_Object.SetPosition(light01Id, x, y, z)

      ]]></raw_data>
   </script>


   <script name="TesScript" run_mode="INIT" active="TRUE" language="LUA">
      <raw_data><![CDATA[

      renderTextureScoreId = HYP_RenderTexture.GetId("sceneRT")
      textureOutputId = HYP_Texture.GetId("textureOutput")      
      
      HYP_Texture.InitFromRenderTexture(textureEdgeletsOutputId, renderTextureScoreId, 1)
      width, height, depth = HYP_Texture.GetDimensions(textureEdgeletsOutputId)
      HYP_Debug.Trace ("width")
      HYP_Debug.Trace (width)


      r, g, b, a = HYP_Texture.GetValueTex2DFloatRgba(textureEdgeletsOutputId,100)
      HYP_Debug.Trace ("R")
      HYP_Debug.Trace (r)
      HYP_Debug.Trace ("END")
      


      ]]></raw_data>
   </script>
</geexlab>