本文整理汇总了C++中PV3D类的典型用法代码示例。如果您正苦于以下问题:C++ PV3D类的具体用法?C++ PV3D怎么用?C++ PV3D使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PV3D类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fDerivate
//-------------------------------------------------------------------------
void MontanaRusa::draw(bool relleno,bool dibujaNormales,bool derrapa){
Malla::draw(relleno,dibujaNormales); // Dibuja la malla
PV3D* fderivate = fDerivate(carPos);
PV3D* sderivate = sDerivate(carPos);
PV3D* Tt=fDerivate(carPos); Tt->normalize(); // Tt = C'
PV3D* Bt=fderivate->crossProduct(sderivate); Bt->normalize(); // Bt = C'.C''
PV3D* Nt=Bt->crossProduct(Tt); // Nt = Bt.Tt
PV3D* Ct=function(carPos); // Ct = C
GLfloat m[] ={ Nt->getX(), Nt->getY(), Nt->getZ(), 0, // Se niega Bt porque al ser
-Bt->getX(),-Bt->getY(),-Bt->getZ(),0, // un producto escalar es perpendicular
Tt->getX(), Tt->getY(), Tt->getZ(), 0, // al plano definido por C'.C''
Ct->getX(), Ct->getY(), Ct->getZ(), 1}; // pero en sentido contrario
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glMultMatrixf(m);
if (derrapa)
glTranslated(0,0,-1.3);
//glTranslated(Ct->getX(),Ct->getY(),Ct->getZ()); // lo pone en la posición pero no con la torsión necesaria
car->draw();
glPopMatrix();
//deletes de los objetos ya no necesarios
delete sderivate; delete fderivate; delete Tt;
delete Bt; delete Nt; delete Ct;
}
示例2: buildSceneObjects
void buildSceneObjects() {
//Cámara
PV3D* eye = new PV3D(eyeX, eyeY, eyeZ, 1);
PV3D* look = new PV3D(lookX, lookY, lookZ, 0);
PV3D* up = new PV3D(upX, upY, upZ, 0);
cam = new Camara(eye, look, up, xRight, xLeft, yTop, yBot,N,F);
escena = new Escena(200.0);
carDir = NONE;
angleDoor = 0;
//Farola light position
PV3D* pFarola = escena->farolas[escena->numFarolas/2]->mt->getPos();
p1[0] = pFarola->getX(); p1[1] = pFarola->getY()+15; p1[2] = pFarola->getZ(); p1[3] = 1.0;
//Car Lights Position
PV3D* luz1 = escena->coche->faro1->mt->getPos();
p2[0] = luz1->getX()-1;p2[1] = luz1->getY(); p2[2]= luz1->getZ(); p2[3]= 1.0;
PV3D* luz2 = escena->coche->faro2->mt->getPos();
p3[0] = luz2->getX()-1;p3[1] = luz2->getY(); p3[2]= luz2->getZ(); p3[3]= 1.0;
dir2[0] = -1.0; dir2[1] = 0.0; dir2[2] = 0.0;
cam->setLookAt(new PV3D(0,0,0,0), escena->coche->mt->getPos());
}
示例3: Poligon
//-------------------------------------------------------------------------
void MontanaRusa::build(){
GLfloat intervaloToma = 2*2*M_PI/NQ; // Hay que dar dos vueltas porque hay puntos con 2 valores
Poligon *poli = new Poligon(new PV3D(),NP,tam); // un polígono del tamaño y con los lados que queremos
vector<PV3D*>* puntos= poli->getVertex();
for(int i=0;i<NQ;i++){ // Esto ocurre en cada "sección" del gusano
GLfloat toma=intervaloToma*i; // Este valor hace que a cada vuelta la "matriz" sea única
PV3D* fderivate = fDerivate(toma); // Se calculan los valores que ayudan al cálculo de los puntos
PV3D* sderivate = sDerivate(toma);
PV3D* Tt=fDerivate(toma); Tt->normalize();
PV3D* Bt=fderivate->crossProduct(sderivate); Bt->normalize();
PV3D* Nt=Bt->crossProduct(Tt);
PV3D* Ct=function(toma);
for(int j=0;j<NP;j++){ // Esto ocurre con cada uno de los vértices del polígono
int numV=NP*i+j;
PV3D* clon=puntos->at(j)->clone(); // Un clon del punto del polígono para trabajar
PV3D* punto=clon->matrixProduct(Nt,Bt,Tt,Ct);
vertex->at(numV)=punto; // El punto recibe un identificador y siempre con sentido
delete clon;
}
//deletes de los objetos ya no necesarios
delete sderivate; delete fderivate; delete Tt;
delete Bt; delete Nt; delete Ct;
}
// Se construyen las caras
for(int numFace=0;numFace<faces->size();numFace++){ // |>Recorremos todas las caras en orden
faces->at(numFace)= new Cara(4);
vector<VerticeNormal*>* auxNormals= new vector<VerticeNormal*>(4);
int a= (numFace) % (NP*NQ);
int b= (nextVertex(numFace) )% (NP*NQ); // Teniendo cuidado de cerrar bien el círculo
int c= (nextVertex(numFace) +NP)% (NP*NQ);
int d= (numFace+NP)% (NP*NQ);
auxNormals->at(0)=new VerticeNormal(a,numFace);
auxNormals->at(1)=new VerticeNormal(b,numFace);
auxNormals->at(2)=new VerticeNormal(c,numFace);
auxNormals->at(3)=new VerticeNormal(d,numFace);
faces->at(numFace)->setIndicesVN(auxNormals);
}
// Se hacen las normales
for(int i=0;i<this->numFaces;i++){
normals->at(i)= this->doVectorNormalNewell(faces->at(i));
}
delete poli;
}
示例4: vBinormal
PV3D* MontanaRusa::vNormal(GLfloat t){
PV3D* bin = vBinormal(t);
PV3D* tang = vTangente(t);
PV3D* norm = bin->productoVectorial(tang);
norm->normaliza();
return norm;
}
示例5: PV3D
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;
}
示例6: modificarPosicionSistema
void modificarPosicionSistema(GLdouble t)
{
PV3D desp; //desplazamiento de la esfera y satelite en "t"
GLdouble m[16]; //matriz de deplazamiento
_espiral.calculaMatrizTransformacion(m, t);
desp = _espiral.aplicaMatrizAPunto(m, PV3D());
_posiX_sistema = desp.get_x();
_posiZ_sistema = desp.get_z();
}
示例7: PV3D
PV3D* PV3D::normaliza(){
// Same direction but module = 1
PV3D* newV = new PV3D();
GLdouble moduleVector = module(this);
newV->setX((1 / moduleVector) * this->getX());
newV->setY((1 / moduleVector) * this->getY());
newV->setZ((1 / moduleVector) * this->getZ());
newV->setPV(0); //vector
return newV;
}
示例8: PV3D
PV3D Matr::prodVect(PV3D vect){
float vectArray[4] = {vect.getX(), vect.getY(), vect.getZ(), vect.getPV()};
float vectResult[4];
for(int i=0; i<ancho; i++){
vectResult[i] = 0.0;
for (int k=0; k<alto; k++){
vectResult[i] += this->data[i][k] * vectArray[k];
}
}
return PV3D(vectResult[0], vectResult[1], vectResult[2], vectResult[3]);
}
示例9: getVertices
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]);
}
}
示例10: PV3D
PV3D* Malla::normalCaraNewell(Cara* cara){
PV3D* n = new PV3D(0.0, 0.0, 0.0, 0);
for (int i=0; i<cara->getNumVertices(); i++) {
PV3D* vertActual= perfil[cara->getIndiceVerticeK(i)];
PV3D* vertSiguiente= perfil[cara->getIndiceVerticeK((i+1) % cara->getNumVertices())];
n->setCoordenadaX(n->getCoordenadaX() + ((vertActual->getCoordenadaY() - vertSiguiente->getCoordenadaY()) * (vertActual->getCoordenadaZ() + vertSiguiente->getCoordenadaZ())));
n->setCoordenadaY(n->getCoordenadaY() + ((vertActual->getCoordenadaZ() - vertSiguiente->getCoordenadaZ()) * (vertActual->getCoordenadaX() + vertSiguiente->getCoordenadaX())));
n->setCoordenadaZ(n->getCoordenadaZ() + ((vertActual->getCoordenadaX() - vertSiguiente->getCoordenadaX()) * (vertActual->getCoordenadaY() + vertSiguiente->getCoordenadaY())));
}
n->normalizarVector();
return n;
}
示例11: glMatrixMode
void Malla::dibuja(){
if (this->rotateAngleX != 0 || this->rotateAngleY != 0 || this->rotateAngleZ != 0){
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(this->rotateAngleX, 1, 0, 0);
glRotatef(this->rotateAngleY, 0, 1, 0);
glRotatef(this->rotateAngleZ, 0, 0, 1);
}
for (int i = 0; i<numCaras; i++) {
glLineWidth(1.0);
glColor3f(cara[i]->getRed(), cara[i]->getGreen(), cara[i]->getBlue());
if (this->displayModel == 1){
glBegin(GL_POLYGON);
}
else if(this->displayModel == 0){
glBegin(GL_LINE_LOOP);
}
for (int j = 0; j < cara[i]->getNumeroVertices(); j++) {
int iN = cara[i]->getIndiceNormal(j);
int iV = cara[i]->getIndiceVertice(j);
glNormal3f(normal[iN]->getX(), normal[iN]->getY(), normal[iN]->getZ());
//Si hubiera coordenadas de textura, aquí se suministrarían
//las coordenadas de textura del vértice j con glTexCoor2f(…);
glVertex3f(vertice[iV]->getX(), vertice[iV]->getY(), vertice[iV]->getZ());
}
glEnd();
if (this->showN){
PV3D* centro = getCentroDeCara(*cara[i]);
glBegin(GL_LINES);
glColor3f(1.0 - cara[i]->getRed(), 1.0 - cara[i]->getGreen(), 1.0 - cara[i]->getBlue());
glVertex3f(centro->getX(), centro->getY(), centro->getZ());
glVertex3f(centro->getX() + normal[cara[i]->getIndiceNormal(0)]->getX(),
centro->getY() + normal[cara[i]->getIndiceNormal(0)]->getY(),
centro->getZ() + normal[cara[i]->getIndiceNormal(0)]->getZ());
glEnd();
}
}
if (this->rotateAngleX != 0 || this->rotateAngleY != 0 || this->rotateAngleZ != 0){
glPopMatrix();
}
}
示例12: choqueCoche
void choqueCoche(){
PV3D* pCoche = escena->coche->mt->getPos();
for (int i = 0; i < escena->numFarolas; i++){
Farola* f = escena->farolas[i];
PV3D* pFarola = f->mt->getPos();
if((abs(pCoche->getX()-pFarola->getX()) < 6) &&
(abs(pCoche->getZ()-pFarola->getZ()) < 3) &&
!f->caida){
f->mt->rota(90,0,0,1);
f->caida = true;
if(i == escena->numFarolas/2)
glDisable(GL_LIGHT1);
}
}
for (int i = 0; i < escena->numTrees; i++){
Tree* t = escena->trees[i];
PV3D* pTree = t->mt->getPos();
if((abs(pCoche->getX()-pTree->getX()) < 6)
&& (abs(pCoche->getZ()-pTree->getZ()) < 3) &&
!t->caido){
t->mt->rota(90,0,0,1);
t->caido = true;
}
}
// if(abs(pCoche->getX()) > escena->escenaSize/2
// || (abs(pCoche->getZ()) > escena->escenaSize/2)){
// escena->coche->mt->traslada(new PV3D(0,0,0,1));
// cam->setLookAt(new PV3D(5,5,5,1), escena->coche->mt->getPos());
// glutPostRedisplay();
// }
}
示例13: T
PV3D* ParametricCurve::T(float t){
PV3D* ret;
ret = Cdiff(t);
ret->normalize();
return ret;
}
示例14: PV3D
PV3D* Malla::calculoNormalNewell(Cara* c){
GLdouble nx = 0.0;
GLdouble ny = 0.0;
GLdouble nz = 0.0;
PV3D* verticeActual = NULL;
PV3D* verticeSig = NULL;
int nV = c->getNumVertices();
for(int i = 0; i < nV;i++){
verticeActual = vertices[c->getIndice(i)->get_indiceVertice()];
verticeSig = vertices[c->getIndice((i+1)%nV)->get_indiceVertice()];
nx += (verticeActual->getY()-verticeSig->getY())*(verticeActual->getZ()+verticeSig->getZ());
ny += (verticeActual->getZ()-verticeSig->getZ())*(verticeActual->getX()+verticeSig->getX());
nz += (verticeActual->getX()-verticeSig->getX())*(verticeActual->getY()+verticeSig->getY());
}
PV3D* n = new PV3D(nx,ny,nz,0);
n->normalizar();
return n;
}
示例15: Cubo
Tablero::Tablero(int largo, int alto, int ancho)
{
_largo = largo;
_alto = alto;
_ancho = ancho;
_numCubos = _largo * _alto * _ancho;
for (int i = 0; i < _numCubos; i++) {
this->addObjeto(new Cubo());
hijos[i]->color->setColor(0.2, 0.2, 0.2);
}
//comienza pintando al principio de la carretara
PV3D* p = new PV3D(_largo / 2, 0, 1, 1);
int numCubo = 0;
for (int x = 0; x < _largo; x++) {
for (int y = 0; y < _alto; y++) {
for (int z = 0; z < _ancho; z++) {
hijos[numCubo]->mt->traslada(p);
p->setZ(p->getZ()+1);
numCubo++;
}
p->setZ(p->getZ()-_ancho);
if(_alto > 1)
p->setY(p->getY()+1);
}
if(_alto > 1)
p->setY(p->getY()-_alto);
p->setX(p->getX()-1);
}
}