• 締切済み

GLが透けてしまいます

OpenGLでオブジェクトを作成して,隠面除去を行ないました。 が、奥にあるはずの部分が何故か透けて(?)見えています。 この原因は何でしょうか。 どうすれば奥の部分が見えなくなりますか? 分かる方、教えてください。

みんなの回答

回答No.1

OpenGL の消去というと、Depthテストを有効にしたのでしょうか? もしかしたらカリングのことでしょうか。 透けるというとブレンディングが有効になっていますか? 実際のソースコードを、問題が再現される程度に なるべくシンプルにして提示いただくのが、 解決への最良の近道だと思います。 スクリーンショットもあれば申し分ありません。

hirubanasa
質問者

補足

ご回答ありがとうございます。 内容は円柱に画像を貼り付けるというものです。 円柱に凹凸を付けたく、試しにソース内の/****/で囲まれた所で値を変えています。 以前は透けている感じはなかったのですが、改良しているうちに透けているのが分かりました。 同時に変更していない回転の方向や見る角度も変わってしまいました(見下ろしていたのが見上げているように)。 ソース自体長く、複雑になってしまったので、改良したところを中心に載せ、SSも追加させていただきます。 また下記サイトを基に組んだのですが、そこではブレンディングとやらを行なっていない様子です。(詳しくは分かりませんが) http://www.center.wakayama-u.ac.jp/~tokoi/opengl/libglut.html​ void display(void){  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//デプスバッファ  glLoadIdentity();  /* 視点位置と視線方向 */  gluLookAt(-3.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);  /* 回転 */  glRotated((double)r, 0.0, 1.0, 0.0);  /* 描画 */  glColor3d(0.0, 0.0, 0.0);  glBegin(GL_QUADS);  for ( j = 0; j < (psize-1)*(psize-1); ++j ) {   glColor3dv( bgr[j] );   for ( i = 0; i < 4; ++i ) {    glVertex3dv(vertex[face[j][i]]);   }  }  glEnd();  glutSwapBuffers();  /* 一周回ったら回転角を 0 に戻す */  if ( ++r >= 360 ) r = 0; } void init(void){  glClearColor(1.0, 1.0, 1.0, 1.0);  glEnable(GL_DEPTH_TEST);  glEnable(GL_CULL_FACE);  glCullFace(GL_BACK); } /*円柱*/ void entyu(){  //極座標で xz面に円をつくる  k= 2 * rad + 1;  np = 4 * rad;  pi = acos( -1.0 );  dt = 2 * pi / np;  for( kp = 1; kp <= np; kp++ ){   tt = dt * kp;   x[ k ] = cos( tt );   z[ k ] = sin( tt );   k++;   if( k == 4 * rad )    k = 0;  }  // x, z座標(円)  k = 0;  for( i = 0; i < width; i++ ){   for( j = 0; j < height; j++ ){    vertex[ k + 4 * rad * j ][ 0 ] = x[ i ] * rad;     vertex[ k + 4 * rad * j ][ 2 ] = z[ i ] * rad; /************/      if( i == 0)       vertex[ k + 4 * rad * j ][ 0 ] -= 5;      else if( i == width / 2)       vertex[ k + 4 * rad * j ][ 0 ] += 5; /************/   }   k++;  }  k = 0;  // y座標  for( j = 0; j < height; j++ ){   for( i = 0; i < width; i++ ){    vertex[k][1] = psize - j - psize / 2;    k++;   }  } } //メイン関数 main(int argc, char *argv[]){  /*円柱*/  entyu();  glutInit(&argc, argv);  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);//デプスバッファ  glutCreateWindow(argv[0]);  glutDisplayFunc(display);  glutReshapeFunc(resize);  glutMouseFunc(mouse);  init();  glutMainLoop();  return 0; }

関連するQ&A

  • openGLでの隠面消去処理について

    OpenGLの隠面消去処理について質問です. 2つの物体のある面どうしが完全にきれいに重なるような場合, カメラの角度によって,添付した画像のように 隠面処理が汚くなってしまいます. 重なってしまうのは仕様なのですが,こういった場合も どちらかの面だけをきれいに表示するということは無理なのでしょうか.

  • OpenGLを使ってマウスカーソル付近を照らすには?

    OpenGLを使ってマウスカーソル付近を照らすには? OpenGLを使って、C言語でマウスカーソル付近を照らすというプログラムを作りたいと思っています。 具体的に言うと、平面にいくつかオブジェクトがあり、そこにカーソルを持っていくと、カーソルを中心に円状に照らして見えるといったものを作りたいと思っています。 平面のウィンドウや、オブジェクトの方はいいのですが、その「カーソル付近を照らす」っていうプログラムがどうしてもわかりません。 わかる方、プログラムを教えてくれませんでしょうか。 よろしくお願いします。

  • PhotoshopCS5 Extendedについて

    PhotoshopCS5 Extendedを購入して早速使っているのですが、 3Dツールが使えません。 テキストを立体的にしたいのですが、3D成形オブジェクトを選択して作成ボタンを押すと 「テキストレイヤーから成形」コマンドは現在使用できません。 と表示が出てしまいます。 参考書はこれで先に進んでいるのですがなぜできないのでしょうか… GPU?やOPENGL?の設定かなにかでしょうか? 環境設定でもOpenGLを有効にするという項目は消えてしまってチェックをつけれません。 どうすればよいでしょうか・・・

  • イラストレーターの基本操作が・・?なぜだろうか。

    illustarorの基本操作が上手くいきません。どなたか教えて頂けませんか?使用はOS/Win-XP、CS5verです。 1、トリムマークが作れません。「効果」→「トリムマーク」を選択するとアートボードに沿ってトリムマークが作成されるはずなのですが何も表示がなく作成出来ません。何故でしょうか?ちなみにオブジェクトを作成して「オブジェクト」→「トリムマークを作成」をすると出来ます。商業印刷の入稿の場合はオブジェクトメニューからのトンボは作成しない方が良いハズなので?なのです。また、「効果」から作る場合と「オブジェクト」から作る場合の使い分けがビギナーでわかりません。 2、オーバープリントプレビューが上手くいきません。薄めの色で2つのオブジェクトを作り部分的に重なるように配置してオブジェクトを選択、「表示」→「オーバープリントプレビュー」を選択しても何も変わらずです。オブジェクトは1つ選択、両方選択の両方試しましたが上手くいかずです。重なり合っている 部分が「乗算」みたいになるはずなのですが・・・。 3、illustratorの操作とは関係ないのですが「色網」の意味を教えて下さい。「平網」はわかります。 4、「白ヌキ文字」とは「白色でノックアウトする」という意味・表現でよいでしょうか? 基本操作&素人質問でお恥ずかしいかぎりですが、よろしくお願いします。

  • 大学のCG初心者向けの授業の目的について

    大学のCG初心者向けの授業で、3次元座標変換、隠面消去、テクスチャマッピング等の簡単なプログラムをOpenGL等で実装させるというものがよくありますが、実際にCG業界で働いていらっしゃるCGデザイナーの方々は「3dsMAX」や「MAYA」などの3DCGソフトを使用して作業していると聞きました。とすると、実際にCGの仕事をする人は、OpenGL等のライブラリを使ってCでガリガリプログラムを書いているのでは無く、3DCGソフトを使用して作業をしているわけで、上に書きましたような授業の目的というのは、実際に仕事で扱う3DCGソフトが、中でどのような処理をしているか簡単に把握する程度のものととらえて良いのでしょうか?よろしくお願いいたします。

  • openGLで色&光つけ

    openGLでプログラムを組み、 オブジェクトに色をつけていたのですが、 光の設定を追加したところモノクロになってしまいました。 色が付いた状態で、光を当てることはできないのでしょうか。 分かる方、教えてください。

  • カップにパーティクルを埋め尽くす状態

    カップにパーティクルを埋め尽くす状態にするにはどうしたらよいでしょうか? カップ状のオブジェクトを作成。 パーティクルスタイルを 水 に設定( nParticle > nParticleの作成 > 水)。 カップオブジェクトを選択し、 「nParticle > nParticle の作成 > オブジェクトを埋め尽くす」 を実行。 再生してみると、なぜかパーティクルがカップをすり抜けてしまいます。 あれ??と思いカップオブジェクトと作成されたパーティクルを選択して、nMesh > パッシブ コライダの作成 を試してみましたが問題は解決出来ませんでした(この工程は本来必要ないはずと思うのですが、もしかして と思って試してみました)。 原因が何にあるのか思い当たりません。 カップにパーティクルを埋め尽くす状態にするにはどうしたらよいでしょうか? 何かやり方を間違えているでしょうか。 アドバイスなどいただけたらと思います。よろしくお願い致します。 Maya2013

  • ワード文書内のオブジェクトについて質問です

    ワード文書を印刷すると、入力していない部分にオブジェクト(楕円形)が印刷されてしまっています。削除しようにも文書上にはオブジェクトが存在しないので、選択することもできません。原因と解決策を教えて頂けませんか。 自分で作った文書ではないので現象が起きた時点の状況が分からないのですが、作成者に聞いたところ、オブジェクトをコピペしたときに、パソコンの画面で文書上ではない部分にペーストをしたようで、何回かクリックしてしまったということです。 うまく現象が説明できないのですが、お分かりいただける方、ご回答お待ちしております。

  • 鏡の銀抜き加工の方法

    鏡の裏の反射面をいろいろな形で除去することで、その部分だけクリアな透明ガラスに戻す、銀抜き、または、透明抜きと呼ばれる方法をご存知の方がいらっしゃればご教授いただけないでしょうか? ちなみに、サンドブラストによる反射面の除去はガラス面がザラザラになるため、この手法以外とさせていただきます。

  • 口臭・舌磨きについて

    僕は中学生ですが、口臭がとても気になります。 それで原因が多分舌の奥の白いやつだと思います。 指で触って匂いをかぐととても臭いです。 舌磨きを買って磨いているのですが、 おえってなります。 どうすれば良いですか。 舌磨きを買ったいみないです> < 奥の白いのを除去したいです!

専門家に質問してみよう