特定の位置に QUAD がある場合、その法線が特定のポイントを指すように回転するにはどうすればよいですか? 色付きのブロックが単なる長方形の四角形であると想像してください。この画像は、私の言いたいことを少し示しています。四角形はすべて、球の中心を向くように配置されています。
代替テキスト http://emrahgunduz.com/wp-content/uploads/2009/01/material_id_gui-600x364.jpg
たぶん、この 2 番目の画像は、私がやろうとしていることをもう少し示しています 。
私はopenGL / C++(およびEigen lib)を使用しています。そして、単純なクワッドを描画する次のコードがあります。
#include "ofMain.h"
#include "Quad.h"
Quad::Quad(Vector3f oPosition):position(oPosition) {
}
void Quad::update() {
}
void Quad::draw() {
float size = 1.3;
glColor3f(1.0f, 0.0f, 0.6f);
glPushMatrix();
glTranslatef(position.x(), position.y(), position.z());
glScalef(size, size,size);
glBegin(GL_QUADS);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(1,1,0);
glVertex3f(0,1,0);
glEnd();
glPopMatrix();
}
更新 17-07 親愛なる読者へ
クワッドを回転させることで、少し前進しました。look_at
いくつかのクワッドをランダムに配置してから、以下の返信の説明を使用して、このコードを使用してそれらを vector3f に向かって回転させます。
void Quad::draw() {
float size = 0.5;
glColor3f(1.0f, 0.0f, 0.6f);
glPushMatrix();
Vector3f center = look_at - position;
Vector3f center_norm = center.normalized();
float r_angle = acos(center_norm.dot(normal));
Vector3f axis = normal.normalized().cross(center_norm);
glPointSize(8);
glLineWidth(4.0f);
// draw the center point
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POINTS);
glVertex3fv(look_at.data());
glEnd();
// draw the quad
glColor4f(0.0f, 0.0f, 0.0f, 0.85f);
glTranslatef(position.x(), position.y(), position.z());
glRotatef(r_angle * RAD_TO_DEG, axis.x(), axis.y(), axis.z());
glScalef(size, size,size);
glBegin(GL_QUADS);
glVertex3f(-0.5,-0.5,0);
glVertex3f(0.5,-0.5,0);
glVertex3f(0.5,0.5,0);
glVertex3f(-0.5,0.5,0);
glEnd();
glPopMatrix();
}
ご覧のとおり、クワッドの回転はまだ少し「奇妙」ですが、ほぼそこまで来ています。下の画像を見ると、色付きのクワッドがあり、回転の違いがはっきりとわかります。下の色付きの球と同じ結果が得られるようにクワッドを回転させるにはどうすればよいですか?