1

テクスチャがあり、opengl を使用して画面にレンダリングしたい場合、テクスチャが画面と同じサイズであってもテクスチャが小さくレンダリングされます。テクスチャを画面にレンダリングするには、次のシェーダーを使用します。

頂点シェーダー:

  #version 120
  attribute vec2 point;
  varying vec2 fr_point;
  void main(void) {
    gl_Position = vec4(point, 0.0, 1.0);
    fr_point = point;
  }

フラグメント シェーダー:

  #version 120
  varying vec2 fr_point;
  uniform sampler2D texture;
  void main(void) {
    gl_FragColor = texture2D(texture, fr_point);
  };

頂点属性 quad は -1 と 1 の範囲の quad です

私のレンダリング機能

glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(p);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);

glUniform1i(uni_texture, 0);

glEnableVertexAttribArray(att_point);
GLfloat triangle_vertices[] = {
   -1.,  -1.,
   -1., 1.,
   1., -1,

   1., 1,
   -1., 1.,
   1., -1.
};

glVertexAttribPointer(
   att_point, 
   2,
   GL_FLOAT,
   GL_FALSE,
   0,
   triangle_vertices
);

glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(att_point);
glutSwapBuffers();

テクスチャの高さまたはサイズが同じであっても、テクスチャが常に非常に小さくレンダリングされるのはなぜですか?

4

1 に答える 1

2

テクスチャ座標は 0 から 1 にスケーリングされるため、クワッド座標をテクスチャ座標に変換する必要があります。

fr_point = (1+point)/2; //fr_point = (vec2(1)+point.xy)/2

だから

(-1,-1) -> (0,0)
(-1,1)  -> (0,1)
(1,1)   -> (1,1)
(1,-1)  -> (1,0)

座標はテクスチャ座標になります。

于 2013-11-02T13:41:28.013 に答える