का उपयोग करते हुए एक बिंदु की ओर एक QUAD घुमाएं जब मेरे पास एक निश्चित स्थिति पर एक क्वाड हो, तो मैं इसे इस तरह से कैसे घुमा सकता हूं कि किसी दिए गए बिंदु की ओर सामान्य बिंदु? कल्पना करें कि रंगीन ब्लॉक सिर्फ आयताकार quads हैं, तो यह छवि थोड़ा सा मतलब दिखाता है। क्वाड सभी इस तरह से उन्मुख होते हैं कि वे क्षेत्र के केंद्र की तरफ इशारा करते हैं। मैं ओपन/C++ (और Eigen lib) का उपयोग कर रहा alt text http://img689.imageshack.us/img689/3130/screenshot20100708at555.pngसी ++/ओपनजीएल: क्वाटरनियंस
:
alt text http://emrahgunduz.com/wp-content/uploads/2009/01/material_id_gui-600x364.jpg
हो सकता है कि यह दूसरी छवि में थोड़ा और अधिक मैं क्या करने की कोशिश कर रहा हूँ पता चलता है।
#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 प्रिय पाठक,
बस quads घूर्णन के साथ एक छोटा सा आगे हो गया: और मैं इस कोड को एक सरल ट्रैक्टर आकर्षित करने के लिए किया है। मैं quads के एक जोड़े स्थिति रहा हूँ बेतरतीब ढंग से और फिर मैं इस कोड के नीचे उत्तर से वर्णन का उपयोग का उपयोग कर vector3f एक look_at
की ओर उन्हें बारी बारी से:
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();
}
परिणाम इस प्रकार है: alt text http://img688.imageshack.us/img688/711/3drotatedquads.png
आप के रूप में देख सकते हैं कि मैं लगभग वहां हूं, हालांकि quads का घूर्णन अभी भी थोड़ा "अजीब" है। मैं नीचे दिए गए चित्र को रंगीन क्वाड के साथ देखता हूं जो आप घूर्णन में अंतर को स्पष्ट रूप से देखते हैं। मैं क्वाड को इस तरह से कैसे घुमा सकता हूं कि मुझे नीचे दिए गए रंग के समान परिणाम मिलते हैं?
+1: क्योंकि मैं 3 डी चित्रों :) – ereOn
प्यार ये छवि लिंक सभी टूट रहे हैं। –