Белый (может быть неокрашенный) OBJ в GLSL/C++

Привет, я работаю над созданием космической среды с кораблем внутри. Но после создания скайбокса (без ошибок) я поместил свой корабль внутрь, но у него нет цвета. Это что-то вроде бело-черного Вот проект

Я сделал (смоделировал) корабль с OPENSCAD и после с MESHLAB Я экспортировал это в .OBJ формат. Я загружаю его в исходный код, но у него нет текстуры / цвета. Вот мой корабль в Мешлаб Корабль Мешлаб

Мне нужно знать только, что я должен добавить что-то о цвете в коде или это ошибка при вводе. Что это?

Если вам нужно, я отправлю код, но если что-то нормально, эта ошибка, объясните мне, в любом случае, я немного новичок в opengl, так что наберитесь терпения, спасибо

РЕДАКТИРОВАТЬ:

Смотри мой .obj файл в windows: Корабельная сетка

И тот же проект в Ubuntu: Корабельная сетка Убунту

В чем эта разница?

В любом случае код openscad:

module navicella(){
  $fn=100;  
    rotate([0,180,270]){
    union(){
         rotate([270,180,0]){   
              rotate([90,0,0])
                cylinder(50,7,10,center=true);

              intersection(){
               translate([0,-25,0])    
                sphere(10);  
               translate([0,-25,0])
                cube(19,center=true);    
              } 
              difference(){
               translate([0,35,0])
                cube([10,15,15],center=true);    
               translate([0,40,0])    
                sphere(13);
              }  

              translate([5,-10,0])rotate([90,0,70])  
                cube([35,1,15],center=true);
              translate([-2,0,0])rotate([90,0,95])  
                cube([50,1,10],center=true);

              translate([0,3,6])rotate([0,-15,90])  
                cube([40,1,20],center=true); 
              translate([0,3,-6])rotate([0,15,90])  
                cube([40,1,20],center=true); 

              translate([0,-35,0])rotate([90,0,0])
                cylinder(10,5,0,center=true);
              translate([0,20,0])rotate([0,90,0])  
                cube([45,1,2],center=true);
              translate([0,25,0]) rotate([90,0,0])
                cylinder(5,4,7,center=true); 
        }    
    }
}
}
navicella();

1 ответ

Решение

Похоже, вы забыли отключить все используемые текстуры, которые не используются вашей моделью. Это очень распространенная ошибка (я делаю это все еще сегодня).

Что, вероятно, происходит?

  1. Вы рендерили скайбокс или любой объект с текстурами

    Так например GL_CUBE_MAP и или GL_TEXTURE_2D включены Теперь, когда вы начинаете рендерить вашу сетку, которая не содержит текстуры, текстуры все еще включены. Таким образом, для каждого фрагмента / пикселя GL всегда будет выбирать последнюю заданную координату текстуры из последней связанной текстуры во всех включенных целевых объектах текстуры и комбинировать цвет в соответствии с настройками GL.

    Поэтому, если ваша модель не содержит текстурных координат, GL будет использовать последний установленный. Это обычно в угловой области, где черная граница... или вы просто в какой-то темной области текстуры. Также, если вы отменяете текстуры, это означает, что вы привязываете текстуры по умолчанию 0 который обычно черный.

    Чтобы проверить / исправить это просто позвоните glDisable(GL_....); для всех ранее использованных текстурных целей. Если это поможет вам узнать, где проблема.

    Также, если ваш объект содержит текстурные координаты и текстура загружена неправильно (например, неправильное имя файла / путь), то результат обычно черный.

  2. Отсутствует или отрицательный normals при рендеринге с включенным освещением

    Не похоже на это, но это также может быть причиной. Если ваша модель имеет ошибки или нет normals тогда вычисление освещения приводит к неправильному освещению. Если объект всегда темный, даже если вы поворачиваете его, нормали сводятся на нет (обращены в другую сторону), и вы должны изменить лицевую поверхность для освещения / материала или отрицать нормали.

    Если интенсивность цвета меняется с вращением, то ваш объект, вероятно, не имеет нормалей, и снова используется последний установленный нормаль (из предыдущего рендеринга). В этом случае либо рассчитайте нормали для объекта (через перекрестное произведение), либо отключите освещение для этого объекта.

Другие вопросы по тегам