WebGL은 2D 스프라이트의 텍스처를 렌더링합니다. 나타나지 않음

agmcleod

이전에는이 ​​작은 정사각형을 렌더링하기위한 색상 정점이 있었지만 이제 이미지를 사용하고 싶습니다. 나는 64x128 너비에 누워있는 이미지 스프라이트를 사용하고 있습니다.

오류가 발생하지 않지만 아무것도 표시되지 않습니다. 먼저 셰이더 :

<script id="shader-fs" type="x-shader/x-fragment">
  precision mediump float;

  varying vec2 vTextureCoord;

  uniform sampler2D uSampler;

  void main(void) {
    gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
  }
</script>

<script id="shader-vs" type="x-shader/x-vertex">
  attribute vec3 aVertexPosition;
  attribute vec2 aTextureCoord;

  uniform mat4 uMVMatrix;
  uniform mat4 uPMatrix;

  varying vec2 vTextureCoord;

  void main(void) {
    gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
    vTextureCoord = aTextureCoord;
  }
</script>

버퍼의 경우 :

initBuffers: function () {
  this.planePositionBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, this.planePositionBuffer);

  var vertices = [
    1.0, 1.0, 0.0,
    -1.0, 1.0, 0.0,
    1.0, -1.0, 0.0,
    -1.0, -1.0, 0.0
  ];

  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
  this.planePositionBuffer.itemSize = 3;
  this.planePositionBuffer.numItems = 4;

  this.textureBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, this.textureBuffer);
  var textureCoords = [
    0.0, 1.0,
    0.0, 0.0,
    1.0, 1.0,
    1.0, 0.0
  ];

  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
  this.textureBuffer.itemSize = 2;
  this.textureBuffer.numItems = 4;
}

셰이더 초기화 :

initShaders: function () {
  this.shader = new Shader("shader");
  var shaderProgram = this.shader.shaderProgram;
  shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
  gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);

  shaderProgram.textureCoordAttribute = gl.getAttribLocation(shaderProgram, "aTextureCoord");
  gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute);

  shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
  shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
  shaderProgram.samplerUniform = gl.getUniformLocation(shaderProgram, "uSampler");
}

그리고 드로우 콜.

draw: function () {
  this.resize();
  var delta = this.getDeltaTime();

  gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

  mat4.identity(this.mvMatrix);
  mat4.identity(this.pMatrix);

  mat4.perspective(this.pMatrix, 45 * Math.PI / 180, gl.canvas.clientWidth / gl.canvas.clientHeight, 0.1, 100.0);
  mat4.translate(this.pMatrix, this.pMatrix, [0.0, 0.0, -50.0]);

  var shaderProgram = this.shader.shaderProgram;

  for (var i = 0; i < this.objects.length; i++) {
    this.objects[i].update(delta, this.mvMatrix);
  }

  gl.bindBuffer(gl.ARRAY_BUFFER, this.planePositionBuffer);
  gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, this.planePositionBuffer.itemSize, gl.FLOAT, false, 0, 0);

  gl.bindBuffer(gl.ARRAY_BUFFER, this.textureBuffer);
  gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, this.textureBuffer.itemSize, gl.FLOAT, false, 0, 0);

  gl.activeTexture(gl.TEXTURE0);
  gl.bindTexture(gl.TEXTURE_2D, me.loader.getImage('test'));
  gl.uniform1i(shaderProgram.samplerUniform, 0);

  this.setMatrixUniforms();
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, this.planePositionBuffer.numItems);
  requestAnimationFrame(this.draw.bind(this));
},

나는 안드로이드에서 그리는 opengles에서 찾은 기사에서 텍스처 좌표를 기반으로했습니다. 아이디어는 좌표가 왼쪽 하단-> 왼쪽 상단-> 오른쪽 하단-> 오른쪽 상단의 순서 여야한다는 것입니다.

깨진 상태에 대한 전체 소스 코드는 위의 스 니펫 외에도 여기에서 찾을 수 있습니다. https://github.com/agmcleod/webgl-2dexperiment/tree/13f31f70037fdd4515c1336423337a1e82ab4e89

agmcleod

WebGL 코드가 모두 올바른 것 같습니다. 그러나 실제로 렌더링을 위해 webgl로 텍스처를 설정하기 위해 bindAllTextures 함수를 호출 한 적이 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Unity3D : 스프라이트가 나타나지 않음

분류에서Dev

xalan : nodeset은 노드를 렌더링하지 않고 텍스트 만 렌더링합니다.

분류에서Dev

다음 VC의 셀에서 레이블로 텍스트를 전송할 때 VC를 처음 열 때 텍스트가 나타나지 않습니다.

분류에서Dev

Python은 동일한 창에서 3D, 2D 이미지를 렌더링합니다.

분류에서Dev

OpenGL 텍스처 2D 배열이 깊이> 1로 렌더링되지 않음

분류에서Dev

webgl은 큐브 표면의 텍스처를 회전하지 않습니다.

분류에서Dev

OpenGL 인스턴스 렌더링이 작동하지 않고 하나의 인스턴스 만 나타납니다.

분류에서Dev

Pyglet / Cocos2d, 창이 나타나지만 스프라이트가 생성되지 않음

분류에서Dev

ThreeJs 텍스처가 나타나지 않습니다.

분류에서Dev

블렌더에서 이미지를 렌더링하면 UV 텍스처가 흰색으로 나타납니다.

분류에서Dev

백엔드의 JSON에서 객체를 렌더링하는 방법은 무엇입니까? (아이가 나타나지 않음)

분류에서Dev

스프라이트가 파이 게임에 나타나지 않습니다.

분류에서Dev

마우스를 올려 놓은 탐색 모음에 이미지가 나타나지 않습니다.

분류에서Dev

이상한 글 리피 콘이 나타나고 부트 스트랩 선택으로 렌더링되지 않음

분류에서Dev

MVVM 라이트 스 니펫은 Visual Studio에서 라이브 템플릿으로 나타나지 않습니다.

분류에서Dev

워드 프레스에 더 이상 d3.js div 툴팁이 나타나지 않음

분류에서Dev

텍스트가 나타나지 않습니다-파이 게임

분류에서Dev

Underscore를 사용한 Backbone Tempting은 템플릿에서 하나의 속성을 렌더링하지만 다른 하나는 렌더링하지 않습니다.

분류에서Dev

GLSL은 사용 가능한 텍스처 단위보다 더 많은 텍스처를 렌더링합니다.

분류에서Dev

dc.js-하나의 그룹에서 두 개체 (하나의 차트-렌더링, 하나의 모양-그렇지 않음)를 함께 렌더링합니까?

분류에서Dev

이미지의 대체 텍스트가 나타나지 않습니다.

분류에서Dev

상자에 C # 텍스트가 나타나지 않음 (Unity 3D)

분류에서Dev

다시로드 한 후 LibGDX 텍스처가 나타나지 않습니다.

분류에서Dev

GLSL : 2D 텍스처 렌더링

분류에서Dev

OpenGL은 화면의 일부를 텍스처로 렌더링합니다.

분류에서Dev

Drupal 7.52 : 텍스트 편집기가 더 이상 나타나지 않습니다.

분류에서Dev

프레임마다 작은 텍스처를 렌더링 한 다음 확장 하시겠습니까?

분류에서Dev

내 구성 요소와 함께 "오류 : 텍스트 문자열은 <Text> 구성 요소 내에서 렌더링되어야합니다"라는 메시지가 나타나는 이유는 무엇입니까?

분류에서Dev

OpenGL 3.3 텍스처가 렌더링되지 않음 (검은 색 텍스처, C ++, GLFW / SOIL)

Related 관련 기사

  1. 1

    Unity3D : 스프라이트가 나타나지 않음

  2. 2

    xalan : nodeset은 노드를 렌더링하지 않고 텍스트 만 렌더링합니다.

  3. 3

    다음 VC의 셀에서 레이블로 텍스트를 전송할 때 VC를 처음 열 때 텍스트가 나타나지 않습니다.

  4. 4

    Python은 동일한 창에서 3D, 2D 이미지를 렌더링합니다.

  5. 5

    OpenGL 텍스처 2D 배열이 깊이> 1로 렌더링되지 않음

  6. 6

    webgl은 큐브 표면의 텍스처를 회전하지 않습니다.

  7. 7

    OpenGL 인스턴스 렌더링이 작동하지 않고 하나의 인스턴스 만 나타납니다.

  8. 8

    Pyglet / Cocos2d, 창이 나타나지만 스프라이트가 생성되지 않음

  9. 9

    ThreeJs 텍스처가 나타나지 않습니다.

  10. 10

    블렌더에서 이미지를 렌더링하면 UV 텍스처가 흰색으로 나타납니다.

  11. 11

    백엔드의 JSON에서 객체를 렌더링하는 방법은 무엇입니까? (아이가 나타나지 않음)

  12. 12

    스프라이트가 파이 게임에 나타나지 않습니다.

  13. 13

    마우스를 올려 놓은 탐색 모음에 이미지가 나타나지 않습니다.

  14. 14

    이상한 글 리피 콘이 나타나고 부트 스트랩 선택으로 렌더링되지 않음

  15. 15

    MVVM 라이트 스 니펫은 Visual Studio에서 라이브 템플릿으로 나타나지 않습니다.

  16. 16

    워드 프레스에 더 이상 d3.js div 툴팁이 나타나지 않음

  17. 17

    텍스트가 나타나지 않습니다-파이 게임

  18. 18

    Underscore를 사용한 Backbone Tempting은 템플릿에서 하나의 속성을 렌더링하지만 다른 하나는 렌더링하지 않습니다.

  19. 19

    GLSL은 사용 가능한 텍스처 단위보다 더 많은 텍스처를 렌더링합니다.

  20. 20

    dc.js-하나의 그룹에서 두 개체 (하나의 차트-렌더링, 하나의 모양-그렇지 않음)를 함께 렌더링합니까?

  21. 21

    이미지의 대체 텍스트가 나타나지 않습니다.

  22. 22

    상자에 C # 텍스트가 나타나지 않음 (Unity 3D)

  23. 23

    다시로드 한 후 LibGDX 텍스처가 나타나지 않습니다.

  24. 24

    GLSL : 2D 텍스처 렌더링

  25. 25

    OpenGL은 화면의 일부를 텍스처로 렌더링합니다.

  26. 26

    Drupal 7.52 : 텍스트 편집기가 더 이상 나타나지 않습니다.

  27. 27

    프레임마다 작은 텍스처를 렌더링 한 다음 확장 하시겠습니까?

  28. 28

    내 구성 요소와 함께 "오류 : 텍스트 문자열은 <Text> 구성 요소 내에서 렌더링되어야합니다"라는 메시지가 나타나는 이유는 무엇입니까?

  29. 29

    OpenGL 3.3 텍스처가 렌더링되지 않음 (검은 색 텍스처, C ++, GLFW / SOIL)

뜨겁다태그

보관