конфликт между J3DI, Win7 и Nvidia Geforce - PullRequest
0 голосов
/ 29 июня 2011

Я сделал сферу, используя J3DI (которая является библиотекой webGL) под WIN 7 64bit в качестве ОС и Nvidia Geforce GT330 M в качестве графической карты.

во-первых, я сделал это синим цветом, и он появился правильно.

Затем я попытался создать текстуру, но сфера выглядела так: http://s1.postimage.org/1ekqrgolg/earth.jpg

в то время как это появилось в Mac как это: http://s1.postimage.org/1eksf0138/error.jpg

Итак, в чем проблема? это из ОС, J3DI или из графической карты?

для дополнительной информации, скрипт шейдера я использовал это: обратите внимание: этот код был взят из OpenGL и HTML5 (видеокурс от O'reilly) VertexShader:

  uniform mat4 u_modelViewProjMatrix;
  uniform mat4 u_normalMatrix;
  uniform vec3 lightDir;

  attribute vec3 vNormal;
  attribute vec4 vTexCoord;
  attribute vec4 vPosition;

  varying float v_Dot;
  varying vec2 v_texCoord;

  void main()
  {
    gl_Position = u_modelViewProjMatrix * vPosition;
    v_texCoord = vTexCoord.st;
    vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
    v_Dot = max(dot(normalize(transNormal.xyz), normalize(lightDir)), 0.3);
  }

PixelShader:

  #ifdef GL_ES
  precision highp float;
  #endif
  uniform sampler2D sampler2d;

  varying float v_Dot;
  varying vec2 v_texCoord;

  void main()
  {
    vec2 texCoord = vec2(v_texCoord.s, v_texCoord.t);
    vec4 color = texture2D(sampler2d, texCoord);
    color += vec4(0.1, 0.1, 0.1, 1);
    gl_FragColor = vec4(color.xyz * v_Dot, color.a);
  }

функция контекста:

function(context){

    // setup VBOs
    context.enableVertexAttribArray(0);
    context.enableVertexAttribArray(1);
    context.enableVertexAttribArray(2);

    context.bindBuffer(context.ARRAY_BUFFER, context.sphere.normalObject);
    context.vertexAttribPointer(0, 3, context.FLOAT, false, 0, 0);

    context.bindBuffer(context.ARRAY_BUFFER, context.sphere.texCoordObject);
    context.vertexAttribPointer(1, 2, context.FLOAT, false, 0, 0);

    context.bindBuffer(context.ARRAY_BUFFER, context.sphere.vertexObject);
    context.vertexAttribPointer(2, 3, context.FLOAT, false, 0, 0);

    context.bindBuffer(context.ELEMENT_ARRAY_BUFFER, context.sphere.indexObject);

    //constract the model-view * projection matrix
    var mvpMatrix = new J3DIMatrix4(context.perspectiveMatrix);
    mvpMatrix.setUniform(context, context.getUniformLocation(context.program, "u_modelViewProjMatrix"), false);
    //bind texture
    context.bindTexture(context.TEXTURE_2D, this.texture);
    context.drawElements(context.TRIANGLES, context.sphere.numIndices, context.UNSIGNED_SHORT, 0);
}

Я действительно беспокоюсь об этой проблеме.

1 Ответ

0 голосов
/ 30 июня 2011

Ты почти у цели. В:

v_Dot = max(dot(normalize(transNormal.xyz), normalize(lightDir)), 0.3);

Измените 0,3 в конце на 1,0, что должно работать (отредактируйте: по крайней мере для Windows MAC может быть устаревшими драйверами).

...