void createVertices(std::vector<atlas::math::Point>& vertices) { USING_ATLAS_MATH_NS; float theta = 0.0f; float thetaDelta = glm::two_pi<float>() / subDivs; vertices.push_back(Point(0)); for (int x = 0; x < subDivs; ++x) { theta = x * thetaDelta; vertices.push_back( cylindricalToCartesian(Point(radius, theta, 0))); } vertices.push_back(Point(0)); for (int x = 0; x < subDivs; ++x) { theta = x * thetaDelta; vertices.push_back( cylindricalToCartesian(Point(radius, theta, 0))); } }
void myRobot::populateArrays(){ for (int h=0; h<=stacks; h++) {//for each height yy[h]=1.0/stacks*h; //printf(" yy= %f",yy[h]); for (int i=0; i<5; i++) { double angle=90.0/4.0*i-45.0; //explicar double zOnBase=0.5; double xOnBase=tan(angle * M_PI / 180.0)/2; CylindricalPoint pt; pt.y=1.0; pt.r=0.25; pt.rho=-45.0+90/4.0*i; double zOnTop=cylindricalToCartesian(&pt).z; double xOnTop=cylindricalToCartesian(&pt).x; pt.r=1.0; pt.y=0; double zNormalOnTop=cylindricalToCartesian(&pt).z; double xNormalOnTop=cylindricalToCartesian(&pt).x; zz[h*5+i]=zOnBase+(zOnTop-zOnBase)*yy[h]; xx[h*5+i]=xOnBase+(xOnTop-xOnBase)*yy[h]; zz_normal[h*5+i]=1+(zNormalOnTop-1)*yy[h]; xx_normal[h*5+i]=xNormalOnTop*yy[h]; double norm=sqrt(zz_normal[h*5+i]*zz_normal[h*5+i]+xx_normal[h*5+i]*xx_normal[h*5+i]); zz_normal[h*5+i]/=norm; xx_normal[h*5+i]/=norm; //printf("populate x+z: %f\n", sqrt(zz_normal[h*5+i]*zz_normal[h*5+i]+ xx_normal[h*5+i]*xx_normal[h*5+i])); } } }
void myCylinder::drawRingVertex(int stackNr){ float stackHeight=1.0/stacks; CylindricalPoint cylPt1,cylPt2; cylPt1.r=0.5; cylPt1.y=stackNr/(double)stacks-0.5; cylPt2.r=0.5; cylPt2.y=cylPt1.y+1/(double)stacks; CartesianPoint cartPt1,cartPt2 ; for (int i=0; i<slices; i++) { cylPt1.rho=360./slices*(i-1/2.0); cartPt1=cylindricalToCartesian(&cylPt1); cylPt2.rho=360./slices*(i+1/2.0); cartPt2=cylindricalToCartesian(&cylPt2); glNormal3d(cartPt1.x, cartPt1.y, cartPt1.z); glTexCoord2d(repX/slices*i, repY/stacks*stackNr); glVertex3d(cartPt1.x, cartPt1.y, cartPt1.z); glNormal3d(cartPt2.x, cartPt1.y, cartPt2.z); glTexCoord2d(repX/slices*(i+1), repY/stacks*stackNr); glVertex3d(cartPt2.x, cartPt1.y, cartPt2.z); glNormal3d(cartPt2.x, cartPt2.y, cartPt2.z); glTexCoord2d(repX/slices*(i+1), repY/stacks*(stackNr+1)); glVertex3d(cartPt2.x, cartPt2.y, cartPt2.z); glNormal3d(cartPt1.x, cartPt2.y, cartPt1.z); glTexCoord2d(repX/slices*i, repY/stacks*(stackNr+1)); glVertex3d(cartPt1.x, cartPt2.y, cartPt1.z); } }
void myCylinder::drawRing(int stackNr){ //printf("drawing\n"); float stackHeight=1.0/stacks; CylindricalPoint cylPt1,cylPt2,cylNormal; cylPt1.r=0.5; cylPt1.y=stackNr/(double)stacks-0.5; cylPt2.r=0.5; cylPt2.y=cylPt1.y+1/(double)stacks; cylNormal.y=0; cylNormal.r=1.0; CartesianPoint cartPt1,cartPt2,cartNormal; for (int i=0; i<slices; i++) { cylPt1.rho=360./slices*(i-1/2.0); cartPt1=cylindricalToCartesian(&cylPt1); cylPt2.rho=360./slices*(i+1/2.0); cartPt2=cylindricalToCartesian(&cylPt2); cylNormal.rho=360./slices*i; cartNormal=cylindricalToCartesian(&cylNormal); glNormal3d(cartNormal.x, cartNormal.y, cartNormal.z); glVertex3d(cartPt1.x, cartPt1.y, cartPt1.z); glVertex3d(cartPt2.x, cartPt1.y, cartPt2.z); glVertex3d(cartPt2.x, cartPt2.y, cartPt2.z); glVertex3d(cartPt1.x, cartPt2.y, cartPt1.z); } }
virtual void draw(RoundState& state) override { const auto& appParams = BleepoutParameters::get(); float radius = appParams.domeRadius * _radiusScale; ofPushMatrix(); ofPushStyle(); ofEnableAlphaBlending(); ofFill(); ofSetColor(_color); for (int i = 0; i < _count; i++) { float heading = ofMap((float)i, 0, _count - 1, 0, 360); heading += _headingPulser.update(state.time); ofVec3f pos = cylindricalToCartesian(radius, heading, 1.0f); ofDrawSphere(pos, _sphereRadius); } //... ofPopStyle(); ofPopMatrix(); }
void myCylinder::draw(int opt){ topText->apply(); glBegin(GL_TRIANGLE_FAN); glNormal3d(0, 1, 0); glTexCoord2d(0.5, 0.5); glVertex3d(0, 0.5, 0); CylindricalPoint pt; CartesianPoint ptCart; pt.y=0.5; pt.r=0.5; for (int i=0; i<slices+1; i++) { pt.rho=360./slices*(i-1/2.0); ptCart=cylindricalToCartesian(&pt); glTexCoord2d(-ptCart.x+0.5, ptCart.z+0.5); glVertex3d(ptCart.x, ptCart.y, ptCart.z); } glEnd(); glBegin(GL_TRIANGLE_FAN); pt.y=-0.5; glNormal3d(0, -1, 0); for (int i=slices+1; i>=0; i--) { pt.rho=360./slices*(i-1/2.0); ptCart=cylindricalToCartesian(&pt); glTexCoord2d(ptCart.x+0.5, ptCart.z+0.5); glVertex3d(ptCart.x, ptCart.y, ptCart.z); } glEnd(); sideText->apply(); glBegin(GL_QUADS); if(opt == CENTERED_NORMALS) for (int i=0; i<stacks; i++) { this->drawRing(i); } else{ for (int i=0; i<stacks; i++) { this->drawRingVertex(i); } } glEnd(); }
void PhysicsObject::setPositionCylindrical(float r, float heading, float z) { staticRotation = 360 - heading; setPosition(cylindricalToCartesian(r, heading, z)); }