MCPcopy Create free account
hub / github.com/cinder/Cinder / drawQuakeLabelsOnSphere

Method drawQuakeLabelsOnSphere

samples/Earthquake/src/Earth.cpp:108–153  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

106}
107
108void Earth::drawQuakeLabelsOnSphere( const vec3 &eyeNormal, const float eyeDist )
109{
110 gl::ScopedDepthTest depthTest( true );
111 gl::ScopedDepthWrite depthWrite( false );
112 gl::ScopedGlslProg shader( gl::getStockShader( gl::ShaderDef().color().texture() ) );
113
114 gl::ScopedColor color( 1, 1, 1 );
115 gl::ScopedBlendAlpha blend;
116
117 const float distMulti = eyeDist * 0.001f;
118 for( auto &quake : mQuakes ) {
119 // Skip if minor earthquake.
120 if( quake.mMag < mMinMagToRender )
121 continue;
122
123 // Skip if invisible.
124 float dp = glm::dot( glm::normalize( quake.mLoc ), glm::normalize( eyeNormal ) ) - 0.85f;
125 if( dp <= 0.0f )
126 continue;
127
128 // Calculate billboard vectors.
129 vec3 dir = glm::normalize( mLoc - quake.mLoc );
130 vec3 perp1 = glm::cross( dir, vec3( 0, 1, 0 ) );
131 vec3 perp2 = glm::cross( perp1, dir ); perp1 = glm::cross( perp2, dir );
132
133 float x = quake.mLocTip.x;
134 float y = quake.mLocTip.y;
135 float z = quake.mLocTip.z;
136
137 float w = quake.mLabel->getWidth() * dp * distMulti;
138 float h = quake.mLabel->getHeight() * dp * distMulti;
139
140 // Render billboard.
141 gl::ScopedTextureBind tex0( quake.mLabel, 0 );
142 gl::begin( GL_TRIANGLE_STRIP );
143 gl::texCoord( 0, 0 );
144 gl::vertex( x + perp1.x * w - perp2.x * h, y + perp1.y * w - perp2.y * h, z + perp1.z * w - perp2.z * h );
145 gl::texCoord( 1, 0 );
146 gl::vertex( x - perp1.x * w - perp2.x * h, y - perp1.y * w - perp2.y * h, z - perp1.z * w - perp2.z * h );
147 gl::texCoord( 0, 1 );
148 gl::vertex( x + perp1.x * w + perp2.x * h, y + perp1.y * w + perp2.y * h, z + perp1.z * w + perp2.z * h );
149 gl::texCoord( 1, 1 );
150 gl::vertex( x - perp1.x * w + perp2.x * h, y - perp1.y * w + perp2.y * h, z - perp1.z * w + perp2.z * h );
151 gl::end();
152 }
153}
154
155void Earth::addQuake( float aLat, float aLong, float aMag, const std::string &aTitle )
156{

Callers 1

drawMethod · 0.80

Calls 10

dotFunction · 0.85
colorMethod · 0.80
ShaderDefClass · 0.50
normalizeFunction · 0.50
beginFunction · 0.50
texCoordFunction · 0.50
vertexFunction · 0.50
endFunction · 0.50
getWidthMethod · 0.45
getHeightMethod · 0.45

Tested by

no test coverage detected