2011-09-15 15 views
2

OpenGLを使用する私は点p1と点p2の間に単純な線を描画しようとしていますが、それはうまくいきません。 しかし、私はこれらの位置で立方体をレンダリングすることができます。OpenGL:線が描画されない

 glEnable(GL_LIGHTING); 
     glEnable(GL_LIGHT0); 

     GLfloat mat_ambient[]  = {0.0, 0.0, 1.0, 1.0}; 
     GLfloat mat_flash[]  = {0.0, 0.0, 1.0, 1.0}; 
     GLfloat mat_flash_shiny[] = {50.0}; 
     GLfloat light_position[] = {100.0,-200.0,200.0,0.0}; 
     GLfloat ambi[]   = {0.1, 0.1, 0.1, 0.1}; 
     GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1}; 


     glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
     glLightfv(GL_LIGHT0, GL_AMBIENT, ambi); 
     glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); 
     glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash); 
     glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny); 
     glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
     glMatrixMode(GL_MODELVIEW); 

     glLoadIdentity(); 

     glTranslatef(p1.x, p1.y, p1.z); 
     glutSolidCube(20); 

     glLoadIdentity(); 
     glTranslatef(p2.x, p2.y, p2.z); 
     glutSolidCube(20); 
     glDisable(GL_LIGHTING); 
     glDisable(GL_DEPTH_TEST); 

私は次のコードを使用して線を描画しています。しかし、私はそれがレンダリングさdoesntのなぜ問題を見つけるカント:

 glDisable(GL_LIGHTING); 
     glEnable(GL_COLOR_MATERIAL); 

     glLoadIdentity(); 

     glColor3f(1,0,0); 
     glLineWidth(10.0); 

     glBegin(GL_LINES); //doesnt work with GL_LINE either 

      glVertex3f(p1.x, p1.y, p1.z); 
      glVertex3f(p2.x, p2.y, p2.z); 
     glEnd(); 

答えて

1

を私は何が起こることはラインが実際にレンダリングされていることであると仮定しますが、頂点の法線セット、光源から離れて指し、または0であることはまだあります。簡単な修正:線を描くときにライティングを無効にする。

線を「照らす」ことは可能ですが、「通常の」通常の照明モデルを想定すると、操作全体は意味をなさない。線は法線方向を持たず、通常の平面を持っています(言い換えれば、線自体は接線です)。

したがって、線を照らす適切な方法は、接線に基づくシェーディングです。固定機能OpenGLではできませんが、シェーダで実装するのは簡単です。

+0

私はglDisable(GL_LIGHTING)をコードの冒頭に含めようとしましたが、何も起こりません。 – Pedro

0

あなたのための提案のカップルは、2番目のコードスニペットをw.r.t:

1)あなたは、おそらく「glEnableです(GL_COLOR_MATERIAL)」を必要としない、その行をコメントアウトしてみてください。

2)intをglColor3f()に渡しています。 glColor3f(1.0f、0.0f、0.0f)を使ってみてください。代わりに。

また、立方体のない線画を同じ位置でチェックしましたか? (つまり、遮蔽されているかどうか)