纹理坐标精度

时间:2018-01-24 12:30:11

标签: opengl

我正在计算位图字体纹理的uv坐标。 纹理大小为1024 x 1024.紫外线坐标是在像素上计算的 职位基础。这是代码。

  uv_run   = ( int8_t* )&bfs->uv[ bfs->st_ch_ind << 2 ];
  t_c_size = sizeof( t_c ); 
  x_pos    = x_st_pix;
  y_pos    = y_pix_delta * ( bfs->col_numb - 1 ) + 28;    // !!! this delta 28 has been added to center the chars

  for( c1 = 0; c1 < bfs->col_numb; c1++ )
  {
    /***********************/
    /*   process one row   */
    /***********************/
    for( c2 = 0; c2 < bfs->row_numb; c2++ )
    {
         /*******************************************/      
         /*   position in texture = x_pos / y_pos   */
         /*   this is lower left corner -> uv[ 0    */
         /*******************************************/    
         t_c[ 0 ].u = x_pos * uv_pix_fkt;
         t_c[ 0 ].v = y_pos * uv_pix_fkt;


         /*******************************************/      
         /*   go to lower right corner -> uv[ 1 ]   */
         /*******************************************/    
         x_pos += x_pix_delta;
         t_c[ 1 ].u = x_pos * uv_pix_fkt;
         t_c[ 1 ].v = y_pos * uv_pix_fkt;

         /*******************************************/      
         /*   go to upper right corner -> uv[ 2 ]   */
         /*******************************************/    
         y_pos += y_pix_delta;
         t_c[ 2 ].u = x_pos * uv_pix_fkt;
         t_c[ 2 ].v = y_pos * uv_pix_fkt;

         /*******************************************/      
         /*   go to upper left corner -> uv[ 3 ]   */
         /*******************************************/    
         x_pos -= x_pix_delta;
         t_c[ 3 ].u = x_pos * uv_pix_fkt;
         t_c[ 3 ].v = y_pos * uv_pix_fkt;

         y_pos -= y_pix_delta;
         x_pos += x_pix_delta; 
         memcpy( uv_run, t_c, t_c_size );
         uv_run += t_c_size;            
    }

    x_pos = x_st_pix;
    y_pos -= y_pix_delta;

此计算未达到确切(被认为是)目的地。 我在y方向偏移大约28像素! 源数据来自使用compressonator创建的DDS压缩文件。 我认为有可能用uv coos击中纹理上的每个像素?

0 个答案:

没有答案