我正在计算位图字体纹理的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击中纹理上的每个像素?