質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

glScalledを使わずメッシュを拡大したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 269

txty

score -8

glRotated//回転
glTranslatef//移動
glScaled//拡大
を使わずに、頂点の位置を変え、world行列をつくりたいのですが、まったくどうすればいいか思い浮かびません。(4*4の行列にならないかもしれない。すいません。)

追記....ポリゴン1個つくったからこれでしばらく練習するかな

試しにglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glClearColor(0.0,0.0,0.0,1.0); //(0.8,0.8,1.0,1.0)は白
    //(0.0.0.0,0.0,1.0);は黒
glPushMatrix();

glLoadIdentity();
gluLookAt(0.5,0.6,0.7,//0.4,0.8,0.7
          0.0, 0.0, 0.0,
          0.0, 1.0,0.0 );

    glScalef(0.1,0.1,0.1);

    glBegin(GL_TRIANGLES);


    /*元の三角形*/

float a[9] ={0.0, 0.5,0.0,
                -0.5, -0.5,0.0,
                  0.5,-0.5,0.0};

 /*x軸回転90度回転*/
float b[9]={
1.0,0.0,0.0,
0,cos(M_PI/2),-sin(M_PI/2),
0, sin(M_PI/2),cos(M_PI/2)
};

float c[9];

c[0]=a[0]*b[0]+a[1]*b[3]+a[2]*b[6]; //ok 
c[1]=a[0]*b[1]+a[1]*b[4]+a[2]*b[7]; //ok
c[2]=a[0]*b[2]+a[1]*b[5]+a[2]*b[8];//ok

c[3]=a[3]*b[0]+a[4]*b[3]+a[5]*b[6]; //ok
c[4]=a[3]*b[1]+a[4]*b[4]+a[5]*b[7]; //ok
c[5]=a[3]*b[2]+a[4]*b[5]+a[5]*b[8];//ok

c[6]=a[6]*b[0]+a[7]*b[3]+a[8]*b[6];
c[7]=a[6]*b[1]+a[7]*b[4]+a[8]*b[7];
c[8]=a[6]*b[2]+a[7]*b[5]+a[8]*b[8];


glVertex3f(a[0], a[1],a[2]);
glVertex3f(a[3], a[4],a[5]);
glVertex3f(a[6], a[7],a[8]);


//glVertex3f( c[0], c[1],c[2]);
//glVertex3f(c[3], c[4],c[5]);
//glVertex3f(c[6], c[7],c[8]);


glEnd();

glPopMatrix();

で何がしたいのかっていうと、求めたいのはy軸周りの内積だった。

イメージ説明
たぶんx軸で90°回転した。
イメージ説明

書けばわかると思ったがそんなことなさそうだった。これはできなそう。責任はとらない。
しばらく考えたけれど回転必要ないんだよね。

●縮小 z軸の縮小、数式は単純化されているとき、

妙だったので消す,あらゆる間違いについて責任はとらない。
その通りにみえるので、感動してあげた。

あと、紙でしかやったこないけど、行列の4行目は移動に関してなのですか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

質問というより,「謎の日記のような何か」に見えます…
一体何が問題なのでしょう?


glRotated//回転
glTranslatef//移動
glScaled//拡大

これらの関数は,「(OpenGLが持っている)現在の行列に,これらに相当する変換行列を乗じる」という行列の更新を行っているだけです.
行列更新結果 = 現在の行列 * glRotated等の変換行列という形で右から乗じます.
これらの関数を何らかの理由で使いたくない/使えないのであれば,単に,同様な処理を実装すれば良いだけです.

  • 自前で全ての演算を行った最終結果の座標を,glVertex系の関数に渡せばよいでしょう.
    利点は,演算の実装が底なしに自由なので行列表記を用いずとも良い,というあたりでしょうか.
  • あるいは,「(OpenGLが持っている)現在の行列」を直接書き換える手段もあるので,(glRotated等を用いずに)自前で計算した変換行列をOpenGLに与えるのでも良いでしょう.
    こちらの方法の場合は,4*4の変換行列の形を作る必要があります.

「変換行列の計算自体がわからない」ということであれば,わからない箇所を明確にして質問してください.
(とはいえ,これ系の計算は,このような場所で質問するよりも,ググって調べた方が早い気がしますが)

行列の4行目

とかいう話は,おそらくは同次座標に関連する話かと想像します.
「同次座標」で検索すると良いかもしれません.

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/23 19:31

    けっこう難しそうですが、解決の糸口になりそうです。ありがとうございました。

    キャンセル

  • 2020/07/24 20:46 編集

    ...........................修正

    キャンセル

  • 2020/07/25 18:38 編集

    なんかglTranlateか抜くと結局+0.15になったと思うから修正。もう忘れました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る