マウスの位置でa,bの値が変化し、a,bの値が変化することでpx,pz
マウスの位置でa,bの値が変化し、a,bの値が変化することでpx,pzの値も変化し、車の座標が変わるようにしたいのですが、以下のようにするとマウスを動かしても反応がありません。
px = a; の部分を px = 10; にしてみると車の座標が変わるため、static void mouseの部分がおかしいと思うのですが、どう間違えているか分からないでしょうか?
文字数制限の関係上、関連する部分のみ抜粋します。
#include <stdlib.h>
#include <GL/glut.h>
#define W 6
#define D 9
int s,t,a,b;
static void display(void)
{
const static GLfloat lightpos[] = { 3.0, 4.0, 5.0, 1.0 }; /* 光源の位置 */
const static GLfloat yellow[] = { 0.8, 0.8, 0.2, 1.0 }; /* 車の色 */
static GLdouble px = 0.0, pz = 0.0; /* 車の位置 */
static GLdouble r = 0.0; /* 車の方向 */
px = a;
pz = b;
/* 画面クリア */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* モデルビュー変換行列の初期化 */
glLoadIdentity();
/* 光源の位置を設定 */
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
/* 視点の移動(物体の方を奥に移す)*/
glTranslated(0.0, 0.0, -25.0);
glRotated(30.0, 1.0, 0.0, 0.0);
/* シーンの描画 */
myGround(0.0);
glPushMatrix();
glTranslated(px, 1.0, pz);
glRotated(r - 90.0, 0.0, 1.0, 0.0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, yellow);
glutSolidTeapot(1.0);
glPopMatrix();
glFlush();
}
static void resize(int w, int h){
s = w/2;
t = h/2;
}
static void mouse(int u, int v) //
{
if((s - u) > 0){
a = 10;
}else if((s - u) < 0){
a = -10;
}
if((t - v) > 0){
b = 10;
}else if((t - v) < 0){
b = -10;
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutReshapeFunc(resize);
glutKeyboardFunc(keyboard);
init();
glutMainLoop();
glutPassiveMotionFunc(mouse);//マウスドラッグ時
return 0;
}
お礼
ありがとうございます。 和を使う場合でも 名詞を省略できるのですね。