本文整理汇总了C++中PV3D::normaliza方法的典型用法代码示例。如果您正苦于以下问题:C++ PV3D::normaliza方法的具体用法?C++ PV3D::normaliza怎么用?C++ PV3D::normaliza使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PV3D
的用法示例。
在下文中一共展示了PV3D::normaliza方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: creaTuboFrenet
void MontanaRusa::creaTuboFrenet(){
//Lo multiplicamos por el numero de vueltas
GLfloat intervalo = 2*M_PI*2/NQ;
PV3D** vertices = getVertices();
//Construimos los vertices de cada cara del tubo
for(int i=0; i<NQ; i++){
GLfloat valor = i*intervalo;
PV3D* T = primeraDerivada(valor);
T->normaliza();
PV3D* B = primeraDerivada(valor)->productoVectorial(segundaDerivada(valor));
B->normaliza();
PV3D* N = B->productoVectorial(T);
PV3D* C = funcion(valor);
for(int j=0; j<NP; j++){
int indiceVertice = NP*i+j;
PV3D* vertice = perfil[j]->multiplicaMatriz(N,B,T,C);
vertices[indiceVertice] = vertice;
}
}
//Construimos las caras
for(int i=0; i<NQ; i++){
for (int j=0; j<NP; j++){
int indiceCara = NP*i+j;
caras[indiceCara] = new Cara(4);
VerticeNormal** normalesCara = new VerticeNormal*[4];
int verticeBase = indiceCara;
int v0 = verticeBase % (NP*NQ);
int v1 = sucesor(verticeBase % (NP*NQ));
int v2 = (sucesor(verticeBase)+NP) % (NP*NQ);
int v3 = (verticeBase + NP) % (NP*NQ);
normalesCara[0] = new VerticeNormal(v0,indiceCara);
normalesCara[1] = new VerticeNormal(v1,indiceCara);
normalesCara[2] = new VerticeNormal(v2,indiceCara);
normalesCara[3] = new VerticeNormal(v3,indiceCara);
caras[indiceCara]->addVerticeNormal(normalesCara);
}
}
//Calculamos las normales de cada cara
for(int i=0; i<numCaras; i++){
normales[i] = CalculoVectorNormalPorNewell(caras[i]);
}
}
示例2: vNormal
PV3D* MontanaRusa::vNormal(GLfloat t){
PV3D* bin = vBinormal(t);
PV3D* tang = vTangente(t);
PV3D* norm = bin->productoVectorial(tang);
norm->normaliza();
return norm;
}
示例3: vBinormal
PV3D* MontanaRusa::vBinormal(GLfloat t){
PV3D* deriv1 = new PV3D(-3 * sin(t), 6 * cos(2 * t), 3 * cos(t), 0);
PV3D* deriv2 = new PV3D(-3 * cos(t), -12 * sin(2 * t), -3 * sin(t), 0);
PV3D* bin = deriv1->productoVectorial(deriv2);
bin->normaliza();
return bin;
}
示例4: dibujaCoche
void MontanaRusa::dibujaCoche(){
GLfloat movimiento = coche->getMovimiento();
PV3D* T = primeraDerivada(movimiento);
T->normaliza();
PV3D* B = primeraDerivada(movimiento)->productoVectorial(segundaDerivada(movimiento));
B->normaliza();
PV3D* N = B->productoVectorial(T);
PV3D* C = funcion(movimiento);
GLfloat m[] = { N->getX(), N->getY(), N->getZ(), N->isPoint(),
B->getX(), B->getY(), B->getZ(), B->isPoint(),
T->getX(), T->getY(), T->getZ(), T->isPoint(),
C->getX(), C->getY(), C->getZ(), C->isPoint()};
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glMultMatrixf(m);
coche->dibuja();
glPopMatrix();
}
示例5: calculoVectorNormalPorNewell
PV3D* Malla::calculoVectorNormalPorNewell(Cara C){
PV3D* n = new PV3D(0, 0, 0, 0);
for (int i = 0; i < C.getNumeroVertices(); i++){
PV3D* vertActual = vertice[C.getIndiceVertice(i)];
PV3D* vertSiguiente = vertice[C.getIndiceVertice((i + 1) % C.getNumeroVertices())];
n->setX(n->getX() + ((vertActual->getY() - vertSiguiente->getY())*(vertActual->getZ() + vertSiguiente->getZ())));
n->setY(n->getY() + ((vertActual->getZ() - vertSiguiente->getZ())*(vertActual->getX() + vertSiguiente->getX()))); // Z * X
n->setZ(n->getZ() + ((vertActual->getX() - vertSiguiente->getX())*(vertActual->getY() + vertSiguiente->getY()))); // X * Y
}
return n->normaliza();
}
示例6: vectorNormalNewell
PV3D* Malla::vectorNormalNewell(Cara* c){
PV3D* n = new PV3D();
for(int i=0; i<c->getNumVertices(); i++){
PV3D* vertActual = vertice[c->getIndiceVerticeK(i)];
PV3D* vertSig = vertice[c->getIndiceVerticeK((i+1) % c->getNumVertices())];
n->setX(n->getX() + ((vertActual->getY() - vertSig->getY()) * (vertActual->getZ() + vertSig->getZ())));
n->setY(n->getY() + ((vertActual->getZ() - vertSig->getZ()) * (vertActual->getX() + vertSig->getX())));
n->setZ(n->getZ() + ((vertActual->getX() - vertSig->getX()) * (vertActual->getY() + vertSig->getY())));
}
return n->normaliza();
}
示例7: key
//.........这里部分代码省略.........
camera.giraZ(0.1);
break;
case '4': //Lateral
camera.lateral();
break;
case '5': //Frontal
camera.frontal();
break;
case '6': //Cenital
camera.cenital();
break;
case '7': //Esquina
camera.esquina();
break;
case 'o': //Ortogonal
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(xLeft, xRight, yBot, yTop, N, F);
break;
case 'p': //Perspectiva
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, N, F);
break;
case 'l': //Oblicua
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
d.normaliza();
if(d.getZ() != 0.0 && (d.getX() != 0 || d.getY() != 0 || d.getZ() != 1)){
GLfloat m[16] = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
m[8] = -(d.getX()) / d.getZ();
m[9] = -(d.getY()) / d.getZ();
m[12] = -N * (d.getX() / d.getZ());
m[13] = -N * (d.getY() / d.getZ());
glOrtho(xLeft, xRight, yBot, yTop, N, F);
glMultMatrixf(m);
}
break;
case 'y': //Trasladar escena
escena->traslacionEscena(1, 0, 0);
break;
case 'h':
escena->traslacionEscena(-1, 0, 0);
break;
case 'g': //Escalacion escena
escena->escalacionEscena(1, 2, 1);
break;
case 'b':
escena->escalacionEscena(1, 0.5, 1);
break;