Windows 7 J3DI、Win7和Nvidia Geforce之间的冲突

Windows 7 J3DI、Win7和Nvidia Geforce之间的冲突,windows-7,3d,webgl,nvidia,Windows 7,3d,Webgl,Nvidia,我在Win7 64位操作系统下使用J3DI(一个webGL库)制作了一个球体 和Nvidia Geforce GT330 M作为图形卡 首先,我做了蓝色的,它看起来是正确的 然后,我尝试在其上制作纹理,但球体显示如下图所示: 虽然它出现在Mac中,但如下所示: 那么,问题是什么?是从操作系统、J3DI还是从图形卡 关于其他信息,我使用的着色器脚本如下: 注意:此代码取自OpenGL和HTML5(来自O'reilly的视频课程) 顶点着色器: uniform mat4 u_modelVie

我在Win7 64位操作系统下使用J3DI(一个webGL库)制作了一个球体 和Nvidia Geforce GT330 M作为图形卡

首先,我做了蓝色的,它看起来是正确的

然后,我尝试在其上制作纹理,但球体显示如下图所示:

虽然它出现在Mac中,但如下所示:

那么,问题是什么?是从操作系统、J3DI还是从图形卡

关于其他信息,我使用的着色器脚本如下: 注意:此代码取自OpenGL和HTML5(来自O'reilly的视频课程) 顶点着色器:

  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);
  }
像素着色器:

  #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);
}

我真的很关心这个问题。

你就快到了。在:

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

最后将0.3改为1.0,应该可以(编辑:至少对于Windows,MAC可能是过时的驱动程序)。

我已经尝试过了,但没有解决问题。它只是增强了光线。但是球体看起来仍然像这样的位图:您是否在modelview的每个帧上加载标识矩阵?该图像看起来像是纹理的极轴投影