【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18614

OpenGLプログラム
投稿者---ふぉげ(2004/12/10 01:47:54)


C言語関係の質問でOpenGLについての質問はしてもいいのでしょうか。
とにかく、問題を打っておきます。
開発環境はVC++です。
見てもらいたいプログラムは
http://www.wakayama-u.ac.jp/~tokoi/opengl/select.c
のサイトのプログラムです。
その中の、中盤部分で
unsigned int j, n = ptr[0];

/* 続く2つの要素は、選択された位置に置ける奥行き値
の最小値と最大値を符号なし整数で表したもの */
double near = (double)ptr[1] / (double)0x7fffffff;
double far = (double)ptr[2] / (double)0x7fffffff;

というところがwindowsのVC++ではエラーがでます。
●「非標準の拡張機能が使用されています : 'near' は互換性のために残  されているキーワードです。」
●「 'double' : 指定された型は、識別子の名前を指定せずに宣言されて  います。」
というエラーなのですがLinuxやMacではコンパイルは通るみたいなのです。どなたかこの質問に答えてもらえないでしょうか。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:OpenGLプログラム 18615 Hermit 2004/12/10 07:39:43
<子記事> Re:OpenGLプログラム 18616 ぽへぇ 2004/12/10 07:40:56
<子記事> Re:OpenGLプログラム 18619 ふぉげ 2004/12/10 10:07:33
<子記事> OpenGLプログラム質問 18626 ふぉげ 2004/12/11 11:20:31


No.18615

Re:OpenGLプログラム
投稿者---Hermit(2004/12/10 07:39:43)


> double near = (double)ptr[1] / (double)0x7fffffff;
> double far = (double)ptr[2] / (double)0x7fffffff;
8086あたりの時に有った、near ポインタ far ポインタ識別子として
認識されているようなので、名前を変えればいいのではないでしょうか。
そのまま名前を変えてもいいし、
#define して far, near を別の名前に展開してもいいし。


この投稿にコメントする

削除パスワード

No.18616

Re:OpenGLプログラム
投稿者---ぽへぇ(2004/12/10 07:40:56)


nearもfarも古(いにしえ)のDOS時代のキーワードです。
手っ取り早いのは変数名を変更することですね。

>というところがwindowsのVC++ではエラーがでます。
>●「非標準の拡張機能が使用されています : 'near' は互換性のために残  されているキーワードです。」
>●「 'double' : 指定された型は、識別子の名前を指定せずに宣言されて  います。」



この投稿にコメントする

削除パスワード

No.18619

Re:OpenGLプログラム
投稿者---ふぉげ(2004/12/10 10:07:33)


みなさん、お早いお返事ありがとうございました。
本当に助かりました。
一度試してみます。


この投稿にコメントする

削除パスワード

No.18626

OpenGLプログラム質問
投稿者---ふぉげ(2004/12/11 11:20:31)


何度も質問してすいません。
下記のプログラムでは2枚のオブジェクトをつくり回転させているのですが、2つほど問題があります。独学で勉強しているのでなかなか問題が解決できないため悩んでいます。
.廛蹈哀薀爐鮗孫圓靴申峇屬鵬鹽召起こってしまうのを直してもらいた いのです。
△罎ゆくは、この2つのプログラムをオブジェクトをクリックしたら回 転するようにしたいのですが今のプログラムの書き方では難しいです?
 例えば、オブジェクトを二個for文で書いているのとかなど。

#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
GLdouble vertex[][3] = {
{ -0.5, 0.0, 0.0 },
{ 0.5, 0.0, 0.0 },
{ 0.5, 0.0, 2.0 },
{ -0.5, 0.0, 2.0 },
};
GLdouble color[][3] = {
{ 1.0, 0.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 1.0, 0.0 },
{ 1.0, 0.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};
GLdouble normal[][3] = {
{ 0.0, 0.0,-1.0 },
{ 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{-1.0, 0.0, 0.0 },
{ 0.0,-1.0, 0.0 },
{ 0.0, 1.0, 0.0 }
};

int b,k,j;
GLfloat light0pos[] = { 5.0, 3.0, 5.0, 1.0 };
GLfloat light1pos[] = { 5.0, 3.0, 0.0, 1.0 };
GLfloat green[] = { 0.0, 1.0, 0.0, 1.0 };
///////////**再描画**/////////////
void idle(void)
{
glutPostRedisplay();
}
//////////////**物体**//////////////
void display(void)
{
int i=1,j,k;
static int r = 0;
while(i){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslated(-0.8, 0.0, 0.0);
gluLookAt(2.5, 10.0, 20.0, 2.5, 1.0, 0.0, 0.0, 3.0, 1.0);
glLightfv(GL_LIGHT0, GL_POSITION, light0pos);
glLightfv(GL_LIGHT1, GL_POSITION, light1pos);
for(j = 0; j < 6; ++j){
glColor3dv(color[j]);
glNormal3dv(normal[j]);
}
for(k = 1; k <= 2; k++){
glPushMatrix();
glRotated((double)r, 0.0, 0.0, 0.5);
glBegin(GL_QUADS);
glVertex3dv(vertex[0]);
glVertex3dv(vertex[1]);
glVertex3dv(vertex[2]);
glVertex3dv(vertex[3]);
glEnd();

glBegin(GL_QUADS);
glVertex3dv(vertex[0]);
glVertex3dv(vertex[3]);
glVertex3dv(vertex[2]);
glVertex3dv(vertex[1]);
glEnd();
glPopMatrix();
glTranslated(1.5, 0.0, 0.0);
}
glutSwapBuffers();
/* 一周回ったら回転角を 0 に戻す */
++r;
if (r >= 180){
r = 0;
i = 0;
}
}
}
//////////////**サイズ変更**////////////////
void resize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(15.0, (double)w / (double)h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
//////////////////**マウス設定**////////////////////
void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
/* アニメーション開始 */
glutIdleFunc(idle);
}
else {
/* アニメーション停止 */
glutIdleFunc(NULL);
}
break;
case GLUT_RIGHT_BUTTON:
break;
default:
break;
}
}
///////////////**初期化**/////////////////////////
void init(void)
{
glShadeModel(GL_SMOOTH);
glClearColor(1.0, 1.0, 1.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_DIFFUSE, green);
glLightfv(GL_LIGHT1, GL_SPECULAR, green);
}
/////////////////////**main**////////////////////////
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(1000,600);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glTranslated(1.5, 0.0, 0.0);
glutReshapeFunc(resize);
glutMouseFunc(mouse);
init();
glutMainLoop();
return 0;
}



この投稿にコメントする

削除パスワード

No.18640

質問
投稿者---ふぉげ(2004/12/12 15:11:15)


どなたかわからないでしょうか。お願いします。


この投稿にコメントする

削除パスワード

No.18641

Re:質問
投稿者---あかま(2004/12/12 16:32:47)


>どなたかわからないでしょうか。お願いします。
とりあえずソースを添付するときは「HTML変換ツール」で字下げすると返答率は上がるかもしれませんね。

あと、掲示板で「お願いします」だけのレスは全然意味ないと思います。
見てるときは見てるし、見てないときは見てないのが掲示板ですから。
あ、記事上げの効果はあるのか。


この投稿にコメントする

削除パスワード

No.18642

Re:質問
投稿者---ふぉげ(2004/12/12 17:03:07)


あかまさん、ご指摘ありがとうございます。
ツールの使い方が今ひとつわかりませんでした。
申し訳ありません。


この投稿にコメントする

削除パスワード

No.18645

Re:質問
投稿者---RAPT(2004/12/12 20:01:10)


OpenGLは知らないが、初回のみ処理をしたくないのなら、フラグでも
用意して判定すればよいのでは?

それから、
int i = 1;
while(i){
  if( ... ){
    i = 0;
  }
}
って、
for(;;){
  if( ... ){
    break;
  }
}
の方がいいかも。



この投稿にコメントする

削除パスワード

No.18670

Re:質問
投稿者---ふぉげ(2004/12/13 15:45:40)


ご指摘ありがとうございます。
参考にさせていただきます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧