2012-12-08 35 views
8

पर गलत बनावट बनावट मैं कस्टम जेएसओएन प्रारूप (मुख्य रूप से वेबजीएल के साथ उपयोग के लिए) के लिए ब्लेंडर 2.6x के लिए एक साधारण निर्यातक बना रहा हूं, क्योंकि जिन मौजूदा लोगों को मैं ऑनलाइन ढूंढ सकता हूं, ब्लेंडर 2.6 के साथ काम करें।ब्लेंडर 2.6 जेएसओएन निर्यातक, बनावट घन

मुझे लगभग यह काम मिल गया है, लेकिन एक बग बनी हुई है कि मैं समझ नहीं पा रहा हूं। एक साधारण घन पर, इसके पक्षों में से एक बनावट गलत अभिविन्यास में है। शेष घन ठीक से बना है। वहाँ

the bug

हैं:

आप समस्या को यहां की एक तस्वीर देख सकते हैं (दाईं ओर सही घन की तुलना में बाईं ओर बाईं चेहरा, गलत अभिविन्यास में है) कुछ सामान्य गलतफहमी या त्रुटियां जो इस व्यवहार को उत्पन्न कर सकती हैं?

इस समारोह है कि अपने कस्टम JSON प्रारूप करने के लिए ब्लेंडर 2.65 से निर्यात करता है (बग यहाँ में होना चाहिए, लेकिन मैं यह नहीं मिल सकता है) है:

def get_json(objects, scene): 
    """ Currently only supports one scene. 
     Exports with -Z forward, Y up. """ 

    object_number = -1 
    scene_data = [] 

    # for every object in the scene 
    for object in bpy.context.scene.objects: 

     # if the object is a mesh  
     if object.type == 'MESH': 

      object_number += 1 

      # convert all the mesh's faces to triangles 
      bpy.ops.object.mode_set(mode='OBJECT') 
      object.select = True 
      bpy.context.scene.objects.active = object 

      # triangulate using new Blender 2.65 Triangulate modifier 
      bpy.ops.object.modifier_add(type='TRIANGULATE') 
      object.modifiers["Triangulate"].use_beauty = False 
      bpy.ops.object.modifier_apply(apply_as="DATA", modifier="Triangulate") 

      bpy.ops.object.mode_set(mode='OBJECT') 

      object.select = False 

      # add data to scene_data structure 
      scene_data.append({ 
       "name"   : object.name, 
       "vertices"  : [], 
       "indices"  : [], 
       "normals"  : [], 
       "tex_coords" : [] 
      }) 

      vertex_number = -1 

      # for each face in the object 
      for face in object.data.polygons: 
       vertices_in_face = face.vertices[:] 

       # for each vertex in the face 
       for vertex in vertices_in_face: 

        vertex_number += 1 

        # store vertices in scene_data structure 
        scene_data[object_number]["vertices"].append(object.data.vertices[vertex].co.x + object.location.x) 
        scene_data[object_number]["vertices"].append(object.data.vertices[vertex].co.z + object.location.z) 
        scene_data[object_number]["vertices"].append(-(object.data.vertices[vertex].co.y + object.location.y)) 

        # store normals in scene_data structure 
        scene_data[object_number]["normals"].append(object.data.vertices[vertex].normal.x) 
        scene_data[object_number]["normals"].append(object.data.vertices[vertex].normal.z) 
        scene_data[object_number]["normals"].append(-(object.data.vertices[vertex].normal.y)) 

        # store indices in scene_data structure 
        scene_data[object_number]["indices"].append(vertex_number) 

      # texture coordinates 
      # bug: for a simple cube, one face's texture is warped 
      mesh = object.to_mesh(bpy.context.scene, True, 'PREVIEW') 
      if len(mesh.tessface_uv_textures) > 0: 
       for data in mesh.tessface_uv_textures.active.data: 
        scene_data[object_number]["tex_coords"].append(data.uv1.x) 
        scene_data[object_number]["tex_coords"].append(data.uv1.y) 
        scene_data[object_number]["tex_coords"].append(data.uv2.x) 
        scene_data[object_number]["tex_coords"].append(data.uv2.y) 
        scene_data[object_number]["tex_coords"].append(data.uv3.x) 
        scene_data[object_number]["tex_coords"].append(data.uv3.y) 

    return json.dumps(scene_data, indent=4) 

और मामले में यह आंकड़ा यह मदद मिलेगी

[ 
    { 
     "vertices": [ 
      -1.0203653573989868, 
      1.0320179611444473, 
      0.669445663690567, 
      -1.0203653573989868, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      0.669445663690567, 
      -1.0203653573989868, 
      1.0320179611444473, 
      -1.330554336309433, 
      0.9796346426010132, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      1.0320179611444473, 
      -1.330554336309433, 
      0.9796346426010132, 
      1.0320179611444473, 
      0.669445663690567, 
      0.9796346426010132, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      1.0320179611444473, 
      0.669445663690567, 
      -1.0203653573989868, 
      1.0320179611444473, 
      0.669445663690567, 
      0.9796346426010132, 
      -0.9679820388555527, 
      0.669445663690567, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      0.669445663690567, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      -0.9679820388555527, 
      0.669445663690567, 
      0.9796346426010132, 
      1.0320179611444473, 
      0.669445663690567, 
      0.9796346426010132, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      1.0320179611444473, 
      0.669445663690567, 
      -1.0203653573989868, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      -1.330554336309433, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      0.669445663690567, 
      0.9796346426010132, 
      1.0320179611444473, 
      -1.330554336309433, 
      0.9796346426010132, 
      -0.9679820388555527, 
      -1.330554336309433, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      1.0320179611444473, 
      0.669445663690567, 
      0.9796346426010132, 
      -0.9679820388555527, 
      0.669445663690567, 
      0.9796346426010132, 
      -0.9679820388555527, 
      -1.330554336309433, 
      -1.0203653573989868, 
      1.0320179611444473, 
      0.669445663690567, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      0.669445663690567, 
      0.9796346426010132, 
      -0.9679820388555527, 
      0.669445663690567, 
      -1.0203653573989868, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      -0.9679820388555527, 
      -1.330554336309433, 
      0.9796346426010132, 
      -0.9679820388555527, 
      0.669445663690567, 
      0.9796346426010132, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      1.0320179611444473, 
      -1.330554336309433, 
      -1.0203653573989868, 
      1.0320179611444473, 
      0.669445663690567 
     ], 
     "normals": [ 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      -0.5773491859436035, 
      -0.5773491859436035, 
      0.5773491859436035, 
      0.5773491859436035 
     ], 
     "indices": [ 
      0, 
      1, 
      2, 
      3, 
      4, 
      5, 
      6, 
      7, 
      8, 
      9, 
      10, 
      11, 
      12, 
      13, 
      14, 
      15, 
      16, 
      17, 
      18, 
      19, 
      20, 
      21, 
      22, 
      23, 
      24, 
      25, 
      26, 
      27, 
      28, 
      29, 
      30, 
      31, 
      32, 
      33, 
      34, 
      35 
     ], 
     "name": "Cube", 
     "tex_coords": [ 
      0.008884529583156109, 
      0.6587533354759216, 
      0.3244488537311554, 
      0.3412468135356903, 
      0.32541996240615845, 
      0.657782256603241, 
      0.008884510956704617, 
      0.32541996240615845, 
      0.007913422770798206, 
      0.008884549140930176, 
      0.32541996240615845, 
      0.3244488537311554, 
      0.9920865893363953, 
      0.32444891333580017, 
      0.675551176071167, 
      0.32541996240615845, 
      0.9911155700683594, 
      0.00791349820792675, 
      0.3412467837333679, 
      0.008884538896381855, 
      0.6577821969985962, 
      0.007913422770798206, 
      0.34221789240837097, 
      0.32541996240615845, 
      0.6587532758712769, 
      0.6577821969985962, 
      0.3422178626060486, 
      0.6587533354759216, 
      0.6577821373939514, 
      0.3412468135356903, 
      0.6745801568031311, 
      0.34221789240837097, 
      0.9911155700683594, 
      0.3412468135356903, 
      0.6755512356758118, 
      0.6587533354759216, 
      0.007913460955023766, 
      0.34221789240837097, 
      0.3244488537311554, 
      0.3412468135356903, 
      0.008884529583156109, 
      0.6587533354759216, 
      0.007913422770798206, 
      0.008884549140930176, 
      0.324448823928833, 
      0.007913422770798206, 
      0.32541996240615845, 
      0.3244488537311554, 
      0.675551176071167, 
      0.32541996240615845, 
      0.6745801568031311, 
      0.008884529583156109, 
      0.9911155700683594, 
      0.00791349820792675, 
      0.6577821969985962, 
      0.007913422770798206, 
      0.6587533354759216, 
      0.3244488835334778, 
      0.34221789240837097, 
      0.32541996240615845, 
      0.3422178626060486, 
      0.6587533354759216, 
      0.3412467837333679, 
      0.34221789240837097, 
      0.6577821373939514, 
      0.3412468135356903, 
      0.9911155700683594, 
      0.3412468135356903, 
      0.99208664894104, 
      0.6577821969985962, 
      0.6755512356758118, 
      0.6587533354759216 
     ] 
    } 
] 

मैं वर्तमान तरीके एक बनाने के लिए की तलाश में नहीं कर रहा हूँ: बाहर, यहाँ निर्यात JSON डेटा है कि मेरी निर्यात स्क्रिप्ट (एक ही ऊपर छवि में बाईं तरफ घन प्रस्तुत करना करने के लिए इस्तेमाल डेटा) चलने से परिणाम है बेहतर फीचर भरा, या अधिक कुशल निर्यातक, बल्कि मैं सिर्फ फिना पसंद करूंगा इस बग को स्लीश करें ताकि मैं एक और अधिक दिलचस्प चीजें प्राप्त कर सकूं, जैसे कि वेबजीएल गेम बनाना, और टकराव का पता लगाना और इस तरह के बारे में सीखना। इस समस्या के संबंध में कोई मदद या सलाह मुझे बहुत सराहना की जाएगी!

संपादित करें:

मामले में यह मेरी प्रतिपादन कोड, और न निर्यातक यही समस्या है, यहाँ हो सकता है (मेरे WebGL बफ़र्स आरंभ और दृश्य ड्राइंग से संबंधित कोड का हिस्सा एक संशोधित है) कुछ कोड http://learningwebgl.com में पाया के संस्करण:

var gl; 

var current_shader_program; 
var per_vertex_shader_program; 
var per_fragment_shader_program; 

var modelview_matrix = mat4.create(); 
var modelview_matrix_stack = []; 
var projection_matrix = mat4.create(); 

var teapot_vertex_position_buffer = new Array(); 
var teapot_vertex_tex_coord_buffer = new Array(); 
var teapot_vertex_normal_buffer = new Array(); 
var teapot_vertex_index_buffer = new Array(); 

var earth_texture; 
var galvanized_texture; 

var teapot_angle = 180; 

var last_time = 0; 

function createProgram(vertex_shader_filename, fragment_shader_filename) { 
    var vertex_shader_text = readFromUrl(vertex_shader_filename); 
    var fragment_shader_text = readFromUrl(fragment_shader_filename); 

    var vertex_shader = gl.createShader(gl.VERTEX_SHADER); 
    var fragment_shader = gl.createShader(gl.FRAGMENT_SHADER); 

    gl.shaderSource(vertex_shader, vertex_shader_text); 
    gl.shaderSource(fragment_shader, fragment_shader_text); 

    gl.compileShader(vertex_shader); 
    if (!gl.getShaderParameter(vertex_shader, gl.COMPILE_STATUS)) { 
     alert(gl.getShaderInfoLog(vertex_shader)); 
    } 

    gl.compileShader(fragment_shader); 
    if (!gl.getShaderParameter(fragment_shader, gl.COMPILE_STATUS)) { 
     alert(gl.getShaderInfoLog(fragment_shader)); 
    } 

    var shader_program = gl.createProgram(); 
    gl.attachShader(shader_program, vertex_shader); 
    gl.attachShader(shader_program, fragment_shader); 
    gl.linkProgram(shader_program); 

    if (!gl.getProgramParameter(shader_program, gl.LINK_STATUS)) { 
     alert("Error: Unable to link shaders!"); 
    } 

    shader_program.vertex_position_attribute = 
     gl.getAttribLocation(shader_program, "a_vertex_position"); 
    gl.enableVertexAttribArray(shader_program.vertex_position_attribute); 

    shader_program.vertex_normal_attribute = 
     gl.getAttribLocation(shader_program, "a_vertex_normal"); 
    gl.enableVertexAttribArray(shader_program.vertex_normal_attribute); 

    shader_program.tex_coord_attribute = 
     gl.getAttribLocation(shader_program, "a_tex_coord"); 
    gl.enableVertexAttribArray(shader_program.tex_coord_attribute); 

    shader_program.projection_matrix_uniform = 
     gl.getUniformLocation(shader_program, "u_projection_matrix"); 
    shader_program.modelview_matrix_uniform = 
     gl.getUniformLocation(shader_program, "u_modelview_matrix"); 
    shader_program.normal_matrix_uniform = 
     gl.getUniformLocation(shader_program, "u_normal_matrix"); 
    shader_program.sampler_uniform = 
     gl.getUniformLocation(shader_program, "u_sampler"); 
    shader_program.material_shininess_uniform = 
     gl.getUniformLocation(shader_program, "u_material_shininess"); 
    shader_program.show_specular_highlights_uniform = 
     gl.getUniformLocation(shader_program, "u_show_specular_highlights"); 
    shader_program.use_textures_uniform = 
     gl.getUniformLocation(shader_program, "u_use_textures"); 
    shader_program.use_lighting_uniform = 
     gl.getUniformLocation(shader_program, "u_use_lighting"); 
    shader_program.ambient_color_uniform = 
     gl.getUniformLocation(shader_program, "u_ambient_color"); 
    shader_program.point_lighting_location_uniform = 
     gl.getUniformLocation(shader_program, "u_point_lighting_location"); 
    shader_program.point_lighting_specular_color_uniform = 
     gl.getUniformLocation(shader_program, "u_point_lighting_specular_color"); 
    shader_program.point_lighting_diffuse_color_uniform = 
     gl.getUniformLocation(shader_program, "u_point_lighting_diffuse_color"); 

    return shader_program; 
} 

function initShaders() { 
    per_fragment_shader_program = createProgram("per_fragment_lighting.vs", "per_fragment_lighting.fs"); 

} 

function handleLoadedTexture(texture) { 
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); 

    gl.bindTexture(gl.TEXTURE_2D, texture); 
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, 
     texture.image); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST); 
    gl.generateMipmap(gl.TEXTURE_2D); 

    gl.bindTexture(gl.TEXTURE_2D, null); 
} 

function initTextures() { 
    earth_texture = gl.createTexture(); 
    earth_texture.image = new Image(); 
    earth_texture.image.onload = function() { 
     handleLoadedTexture(earth_texture); 
    } 
    earth_texture.image.src = "earth.jpg"; 

    galvanized_texture = gl.createTexture(); 
    galvanized_texture.image = new Image(); 
    galvanized_texture.image.onload = function() { 
     handleLoadedTexture(galvanized_texture); 
    }; 
    galvanized_texture.image.src = "galvanized.jpg"; 
} 

function setMatrixUniforms() { 
    gl.uniformMatrix4fv(current_shader_program.projection_matrix_uniform, false, 
     projection_matrix); 
    gl.uniformMatrix4fv(current_shader_program.modelview_matrix_uniform, false, 
     modelview_matrix); 

    var normal_matrix = mat3.create(); 
    mat4.toInverseMat3(modelview_matrix, normal_matrix); 
    mat3.transpose(normal_matrix); 
    gl.uniformMatrix3fv(current_shader_program.normal_matrix_uniform, false, 
     normal_matrix); 
} 

function handleLoadedTeapot(teapot_data) { 

    for (var i = 0; i < teapot_data.length; i++) 
    { 
     teapot_vertex_normal_buffer[i] = gl.createBuffer(); 
     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_normal_buffer[i]); 
     gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(teapot_data[i].normals), 
      gl.STATIC_DRAW); 
     teapot_vertex_normal_buffer[i].item_size = 3; 
     teapot_vertex_normal_buffer[i].num_items = 
      teapot_data[i].normals.length/teapot_vertex_normal_buffer[i].item_size; 

     teapot_vertex_tex_coord_buffer[i] = gl.createBuffer(); 
     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_tex_coord_buffer[i]); 
     gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(teapot_data[i].tex_coords), 
      gl.STATIC_DRAW); 
     teapot_vertex_tex_coord_buffer[i].item_size = 2; 
     teapot_vertex_tex_coord_buffer[i].num_items = 
      teapot_data[i].tex_coords.length/teapot_vertex_tex_coord_buffer[i].item_size; 

     teapot_vertex_position_buffer[i] = gl.createBuffer(); 
     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_position_buffer[i]); 
     gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(teapot_data[i].vertices), 
      gl.STATIC_DRAW); 
     teapot_vertex_position_buffer[i].item_size = 3; 
     teapot_vertex_position_buffer[i].num_items = 
      teapot_data[i].vertices.length/teapot_vertex_position_buffer[i].item_size; 

     teapot_vertex_index_buffer[i] = gl.createBuffer(); 
     gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, teapot_vertex_index_buffer[i]); 
     gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(teapot_data[i].indices), 
      gl.STATIC_DRAW) 
     teapot_vertex_index_buffer[i].item_size = 1; 
     teapot_vertex_index_buffer[i].num_items = 
      teapot_data[i].indices.length/teapot_vertex_index_buffer[i].item_size; 
    } 

    document.getElementById("loading_text").textContent = ""; 
} 

function loadTeapot() { 
    var request = new XMLHttpRequest(); 
    request.open("GET", "untitled.json"); 
    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      handleLoadedTeapot(JSON.parse(request.responseText)); 
     } 
    }; 
    request.send(); 
} 

function drawScene() { 

    gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight); 
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 

    if (teapot_vertex_position_buffer[0] == null || 
     teapot_vertex_normal_buffer[0] == null  || 
     teapot_vertex_tex_coord_buffer[0] == null || 
     teapot_vertex_index_buffer[0] == null) { 
     return; 
    } 

    current_shader_program = per_fragment_shader_program; 
    gl.useProgram(current_shader_program); 

    var specular_highlights = document.getElementById("specular").checked; 
    gl.uniform1i(current_shader_program.show_specular_highlights_uniform, specular_highlights); 

    var lighting = document.getElementById("lighting").checked; 
    gl.uniform1i(current_shader_program.use_lighting_uniform, lighting); 

    if (lighting) { 
     gl.uniform3f(current_shader_program.ambient_color_uniform, 
      parseFloat(document.getElementById("ambient_r").value), 
      parseFloat(document.getElementById("ambient_g").value), 
      parseFloat(document.getElementById("ambient_b").value)); 

     gl.uniform3f(current_shader_program.point_lighting_location_uniform, 
      parseFloat(document.getElementById("light_pos_x").value), 
      parseFloat(document.getElementById("light_pos_y").value), 
      parseFloat(document.getElementById("light_pos_z").value)); 

     gl.uniform3f(current_shader_program.point_lighting_specular_color_uniform, 
      parseFloat(document.getElementById("specular_r").value), 
      parseFloat(document.getElementById("specular_g").value), 
      parseFloat(document.getElementById("specular_b").value)); 

     gl.uniform3f(current_shader_program.point_lighting_diffuse_color_uniform, 
      parseFloat(document.getElementById("diffuse_r").value), 
      parseFloat(document.getElementById("diffuse_g").value), 
      parseFloat(document.getElementById("diffuse_b").value)); 
    } 

    var texture = document.getElementById("texture").value; 
    gl.uniform1i(current_shader_program.use_textures_uniform, texture != "none"); 

    mat4.identity(modelview_matrix); 
    mat4.translate(modelview_matrix, [0, 0, -10]); 

    mat4.rotate(modelview_matrix, degToRad(23.4), [1, 0, 0]); 
    mat4.rotate(modelview_matrix, degToRad(teapot_angle), [0, 1, 0]); 

    gl.activeTexture(gl.TEXTURE0); 
    if (texture == "earth") { 
     gl.bindTexture(gl.TEXTURE_2D, earth_texture); 
    } 
    else if (texture == "galvanized") { 
     gl.bindTexture(gl.TEXTURE_2D, galvanized_texture); 
    } 
    gl.uniform1i(current_shader_program.sampler_uniform, 0); 

    gl.uniform1f(current_shader_program.material_shininess_uniform, 
     parseFloat(document.getElementById("shininess").value)); 

    for (var i = 0; i < teapot_vertex_position_buffer.length; i++) 
    { 
     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_position_buffer[i]); 
     gl.vertexAttribPointer(current_shader_program.vertex_position_attribute, 
      teapot_vertex_position_buffer[i].item_size, gl.FLOAT, false, 0, 0); 

     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_tex_coord_buffer[i]); 
     gl.vertexAttribPointer(current_shader_program.tex_coord_attribute, 
      teapot_vertex_tex_coord_buffer[i].item_size, gl.FLOAT, false, 0, 0); 

     gl.bindBuffer(gl.ARRAY_BUFFER, teapot_vertex_normal_buffer[i]); 
     gl.vertexAttribPointer(current_shader_program.vertex_normal_attribute, 
      teapot_vertex_normal_buffer[i].item_size, gl.FLOAT, false, 0, 0); 

     gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, teapot_vertex_index_buffer[i]); 

     setMatrixUniforms(); 
     gl.drawElements(gl.TRIANGLES, teapot_vertex_index_buffer[i].num_items, 
      gl.UNSIGNED_SHORT, 0); 
    } 
} 

मैं जानता हूँ कि यह माध्यम से देखने के लिए एक बहुत की एक नरक, यही वजह है कि मैं इसे पहले पोस्ट नहीं किया है, लेकिन एक सुझाव आया है कि प्रतिपादन कोड हो सकता है गलती हो ध्यान दें कि कोड में उल्लिखित "टीपोट" वास्तव में निर्यात किया गया मॉडल है (जिस घन को मैं प्रस्तुत करने की कोशिश कर रहा हूं)।

+1

मेरा क्षेत्र नहीं है इसलिए मैं मदद नहीं कर सकता, लेकिन एक अच्छा प्रश्न के लिए एक +1 अगर यह कोई सांत्वना है –

+0

मुझे नहीं लगता कि आप आसानी से वाई और जेड पदों को स्वैप कर सकते हैं जो यूवी को अभी भी 100% सही होने की उम्मीद कर रहे हैं। – Grimmy

+0

इससे कुछ समझ आती है, लेकिन यदि ऐसा है, तो मैं एक-जेड फॉरवर्ड प्राप्त करने के बारे में कैसे जाउंगा, वैध बनावट निर्देशांक के साथ वाई अप ओरिएंटेशन? – Defcronyke

उत्तर

1

जैसा कि एजरोली ने टिप्पणी की थी, आपके शिखर और बनावट निर्देशांक की अनुक्रमणिका को गठबंधन नहीं किया गया है।

to_mesh के बाद भी शिखर निर्यात करने से बहुत सारी पागलपन हो सकती है।

आप अपने जाल के tessfaces का उपयोग कर सही अनुक्रमण का पता लगा सकते हैं।