2012-07-03 1 views
0

Я работаю над win7 microsoft visual studio 08 с формами. Я только что изменил свою графическую карту, и в моем приложении появилось какое-то псевдонимы.OpenGL aliasing?

img

Это может быть apreciated, что серые линии рода наложения спектров, а также система отсчета, то есть почти незаметны.

Любая идея, как это решить?

я выложу некоторые части кода только в случае, если: 1: Краска функция

2: функция, которая привлекает все показано на рисунке (это просто куча GL :: Vertex3)

System::Void Draw3Daxis(){ 
     OpcionesPlot* opciones; 
     opciones=OpcionesPlot::Instance(); 
     int extra=2; 
     int sqrnumber=10; 

     //Planos en los ejes 
     GL::Color3(Color::White); 
     GL::Begin(BeginMode::Quads); 
     if(opciones->draw3DXYaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(LENGTH,0,0); 
      GL::Vertex3(LENGTH,LENGTH,0); 
      GL::Vertex3(0,LENGTH,0); 
     } 
     if(opciones->draw3DXZaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(LENGTH,0,0); 
      GL::Vertex3(LENGTH,0,LENGTH); 
      GL::Vertex3(0,0,LENGTH); 
     } 
     if(opciones->draw3DYZaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(0,LENGTH,0); 
      GL::Vertex3(0,LENGTH,LENGTH); 
      GL::Vertex3(0,0,LENGTH); 
     } 
     GL::End(); 


     // ejes XYZ 
     GL::Color3(Color::Black); 
     GL::Begin(BeginMode::Lines); 
     if(opciones->draw3DXYaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(LENGTH+extra,0,0); 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(0,LENGTH+extra,0); 
     } 
     if(opciones->draw3DXZaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(LENGTH+extra,0,0); 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(0,0,LENGTH+extra); 
     } 
     if(opciones->draw3DYZaxis){ 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(0,LENGTH+extra,0); 
      GL::Vertex3(0,0,0); 
      GL::Vertex3(0,0,LENGTH+extra); 
     } 

     //--> lineas de los planos 
     GL::Color3(Color::DarkGray); 
     for(int i=1;i<=sqrnumber;i++){ 
      if(i==sqrnumber) 
       GL::Color3(Color::Black); 
      if(opciones->draw3DXYaxis){ 
       GL::Vertex3(LENGTH/sqrnumber*i,0,0); 
       GL::Vertex3(LENGTH/sqrnumber*i,LENGTH,0); 
       GL::Vertex3(0,LENGTH/sqrnumber*i,0); 
       GL::Vertex3(LENGTH,LENGTH/sqrnumber*i,0); 
      } 
      if(opciones->draw3DXZaxis){ 
       GL::Vertex3(LENGTH/sqrnumber*i,0,0); 
       GL::Vertex3(LENGTH/sqrnumber*i,0,LENGTH); 
       GL::Vertex3(0,0,LENGTH/sqrnumber*i); 
       GL::Vertex3(LENGTH,0,LENGTH/sqrnumber*i); 

      } 
      if(opciones->draw3DYZaxis){ 
       GL::Vertex3(0,0,LENGTH/sqrnumber*i); 
       GL::Vertex3(0,LENGTH,LENGTH/sqrnumber*i); 
       GL::Vertex3(0,LENGTH/sqrnumber*i,0); 
       GL::Vertex3(0,LENGTH/sqrnumber*i,LENGTH); 
      } 

     } 
     GL::End(); 
     // triangulos para los ejes 
     //----->cuadrado 
     GL::Color3(Color::Black); 
     GL::Begin(BeginMode::Quads); 
     float quadside=0.7; 
     if(opciones->draw3DXYaxis){ 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 

      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 


     } 
     if(opciones->draw3DXZaxis){ 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 

      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 
     } 
     if(opciones->draw3DYZaxis){ 
      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 

      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 

     } 
     GL::End(); 


     // --> triangulos para hacer la punta 
     GL::Begin(BeginMode::Triangles); 
     if(opciones->draw3DXYaxis){ 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 

      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 

     } 
     if(opciones->draw3DXZaxis){ 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,-quadside,quadside); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,-quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 
      GL::Vertex3((float)LENGTH+extra,quadside,-quadside); 
      GL::Vertex3((float)LENGTH+extra,quadside,quadside); 
      GL::Vertex3(LENGTH+extra+5,0,0); 

      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
     } 
     if(opciones->draw3DYZaxis){ 
      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(-quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 
      GL::Vertex3(quadside,(float)LENGTH+extra,-quadside); 
      GL::Vertex3(quadside,(float)LENGTH+extra,quadside); 
      GL::Vertex3(0,LENGTH+extra+5,0); 

      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(-quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(-quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 
      GL::Vertex3(quadside,-quadside,(float)LENGTH+extra); 
      GL::Vertex3(quadside,quadside,(float)LENGTH+extra); 
      GL::Vertex3(0,0,LENGTH+extra+5); 

     } 
     GL::End(); 
     Write3D(LENGTH,3,3,GLUT_BITMAP_9_BY_15,"X"); 
     Write3D(3,LENGTH,3,GLUT_BITMAP_9_BY_15,"Y"); 
     Write3D(3,3,LENGTH,GLUT_BITMAP_9_BY_15,"Z"); 
    } 

ответ

2

Попробуйте отключить проверку глубины перед тем, как нарисовать каждый набор объектов (сначала ориентировочные плоскости, оси - второй, а затем опорную сетку).

Похоже, что ваши оси являются Z-боевыми плоскостями.

У вас есть несколько вариантов -

  1. Отключить глубину теста, когда рисуются линии (не самолеты). Это позволит убедиться, что не происходит z-борьба.
  2. Продолжайте тестирование глубины, но используйте glPolygonOffset при рисовании самолетов, чтобы компенсировать их, чтобы z-борьба не происходила вообще.
  3. Используйте GL_LEQUAL (или что-то еще) как DepthFunc при рисовании плоскостей, но используйте GL_EQUAL при рисовании линий. Этот должен сделать все в порядке.
+0

mmm yes it actualy работает таким образом, но это дает мне еще одну проблему. Если я отключу проверку глубины, я смогу увидеть сквозные плоскости при вращении, а при некоторых поворотах она получит какую-то сумасшедшую геометрию ... –

+0

На самом деле странные геометрии были неправильными интерпретациями вращения (так как вы можете видеть сквозь плоскости, похоже, быть в другом вращении). –

+0

А, не отключайте проверку глубины, рисуя плоскости. Отключите их потом только для рисования линий, все должно быть в порядке. – Ani