more mad attempts to squeeze better performance
This commit is contained in:
parent
267dc7534f
commit
668b34db8e
|
@ -236,9 +236,9 @@ Quad2i GameCamera::computeVisibleQuad() {
|
|||
Vec2f v2(sinf(degToRad(viewDegree - hAng + fov)), cosf(degToRad(viewDegree - hAng + fov)));
|
||||
#endif
|
||||
|
||||
v.normalize();
|
||||
v1.normalize();
|
||||
v2.normalize();
|
||||
v.normalize(false);
|
||||
v1.normalize(false);
|
||||
v2.normalize(false);
|
||||
|
||||
Vec2f p = Vec2f(pos.x, pos.z) - v * dist;
|
||||
Vec2i p1(static_cast<int>(p.x + v1.x * nearDist), static_cast<int>(p.y + v1.y * nearDist));
|
||||
|
|
|
@ -1400,11 +1400,12 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",0,frustum[0][0],frustum[0][1],frustum[0][2],frustum[0][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2] );
|
||||
// #endif
|
||||
t = std::sqrt( frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2] );
|
||||
if(t != 0.0) {
|
||||
frustum[0][0] /= t;
|
||||
frustum[0][1] /= t;
|
||||
|
@ -1423,11 +1424,12 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",1,frustum[1][0],frustum[1][1],frustum[1][2],frustum[1][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2] );
|
||||
// #endif
|
||||
t = std::sqrt( frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2] );
|
||||
if(t != 0.0) {
|
||||
frustum[1][0] /= t;
|
||||
frustum[1][1] /= t;
|
||||
|
@ -1446,11 +1448,13 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",2,frustum[2][0],frustum[2][1],frustum[2][2],frustum[2][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2] );
|
||||
// #endif
|
||||
|
||||
t = std::sqrt( frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2] );
|
||||
if(t != 0.0) {
|
||||
frustum[2][0] /= t;
|
||||
frustum[2][1] /= t;
|
||||
|
@ -1469,12 +1473,13 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",3,frustum[3][0],frustum[3][1],frustum[3][2],frustum[3][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2] );
|
||||
// #endif
|
||||
|
||||
t = std::sqrt( frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2] );
|
||||
if(t != 0.0) {
|
||||
frustum[3][0] /= t;
|
||||
frustum[3][1] /= t;
|
||||
|
@ -1493,11 +1498,13 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",4,frustum[4][0],frustum[4][1],frustum[4][2],frustum[4][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2] );
|
||||
// #endif
|
||||
|
||||
t = std::sqrt( frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2] );
|
||||
|
||||
if(t != 0.0) {
|
||||
frustum[4][0] /= t;
|
||||
|
@ -1517,11 +1524,13 @@ bool Renderer::ExtractFrustum(VisibleQuadContainerCache &quadCacheItem) {
|
|||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nCalc Frustum #%da: [%f][%f][%f][%f]\n",5,frustum[5][0],frustum[5][1],frustum[5][2],frustum[5][3]);
|
||||
|
||||
/* Normalize the result */
|
||||
#ifdef USE_STREFLOP
|
||||
t = streflop::sqrt( static_cast<streflop::Simple>(frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2]) );
|
||||
#else
|
||||
t = sqrt( frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2] );
|
||||
#endif
|
||||
// #ifdef USE_STREFLOP
|
||||
// t = streflop::sqrt( static_cast<streflop::Simple>(frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2]) );
|
||||
// #else
|
||||
// t = sqrt( frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2] );
|
||||
// #endif
|
||||
|
||||
t = std::sqrt( frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2] );
|
||||
|
||||
if(t != 0.0) {
|
||||
frustum[5][0] /= t;
|
||||
|
@ -8293,14 +8302,14 @@ void Renderer::renderArrow(const Vec3f &pos1, const Vec3f &pos2,
|
|||
const float blendDelay= 5.f;
|
||||
|
||||
Vec3f dir= Vec3f(pos2-pos1);
|
||||
float len= dir.length();
|
||||
float len= dir.length(false);
|
||||
|
||||
if(len>maxlen) {
|
||||
return;
|
||||
}
|
||||
float alphaFactor= clamp((maxlen-len)/blendDelay, 0.f, 1.f);
|
||||
|
||||
dir.normalize();
|
||||
dir.normalize(false);
|
||||
Vec3f normal= dir.cross(Vec3f(0, 1, 0));
|
||||
|
||||
Vec3f pos2Left= pos2 + normal*(width-0.05f) - dir*arrowEndSize*width;
|
||||
|
|
|
@ -128,41 +128,47 @@ void Object::setHeight(float height) {
|
|||
}
|
||||
}
|
||||
|
||||
void Object::update() {
|
||||
void Object::updateHighlight() {
|
||||
//highlight
|
||||
if(highlight > 0.f) {
|
||||
const Game *game = Renderer::getInstance().getGame();
|
||||
highlight -= 1.f / (Game::highlightTime * game->getWorld()->getUpdateFps(-1));
|
||||
//const Game *game = Renderer::getInstance().getGame();
|
||||
//highlight -= 1.f / (Game::highlightTime * game->getWorld()->getUpdateFps(-1));
|
||||
highlight -= 1.f / (Game::highlightTime * GameConstants::updateFps);
|
||||
}
|
||||
}
|
||||
|
||||
if(objectType != NULL && objectType->getTilesetModelType(variation) != NULL &&
|
||||
objectType->getTilesetModelType(variation)->getAnimSpeed() != 0.0) {
|
||||
void Object::update() {
|
||||
//if(objectType != NULL && objectType->getTilesetModelType(variation) != NULL &&
|
||||
// objectType->getTilesetModelType(variation)->getAnimSpeed() != 0.0) {
|
||||
if(animated == true) {
|
||||
// printf("#1 Object updating [%s] Speed [%d] animProgress [%f]\n",this->objectType->getTilesetModelType(variation)->getModel()->getFileName().c_str(),objectType->getTilesetModelType(variation)->getAnimSpeed(),animProgress);
|
||||
|
||||
float heightFactor = 1.f;
|
||||
const float speedDivider= 100.f;
|
||||
float speedDenominator = (speedDivider * GameConstants::updateFps);
|
||||
if(objectType != NULL && objectType->getTilesetModelType(variation) != NULL) {
|
||||
float heightFactor = 1.f;
|
||||
const float speedDivider= 100.f;
|
||||
float speedDenominator = (speedDivider * GameConstants::updateFps);
|
||||
|
||||
// smooth TwoFrameanimations
|
||||
float f=1.0f;
|
||||
if(objectType->getTilesetModelType(variation)->getSmoothTwoFrameAnim()==true){
|
||||
f=abs(std::sin(animProgress*2*3.16))+0.4f;
|
||||
}
|
||||
// smooth TwoFrameanimations
|
||||
float f=1.0f;
|
||||
if(objectType->getTilesetModelType(variation)->getSmoothTwoFrameAnim()==true){
|
||||
f=abs(std::sin(animProgress*2*3.16))+0.4f;
|
||||
}
|
||||
|
||||
float newAnimProgress = animProgress + f*(((float)objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator);
|
||||
float newAnimProgress = animProgress + f*(((float)objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator);
|
||||
|
||||
// printf("A [%f] B [%f] C [%f] D [%f] E [%f] F [%f]\n",
|
||||
// ((float)objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor),
|
||||
// speedDenominator,
|
||||
// ((objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator),
|
||||
// (animProgress + ((objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator)),
|
||||
// animProgress,newAnimProgress);
|
||||
// printf("A [%f] B [%f] C [%f] D [%f] E [%f] F [%f]\n",
|
||||
// ((float)objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor),
|
||||
// speedDenominator,
|
||||
// ((objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator),
|
||||
// (animProgress + ((objectType->getTilesetModelType(variation)->getAnimSpeed() * heightFactor) / speedDenominator)),
|
||||
// animProgress,newAnimProgress);
|
||||
|
||||
animProgress = newAnimProgress;
|
||||
// printf("#2 new animProgress [%f]\n",animProgress);
|
||||
animProgress = newAnimProgress;
|
||||
// printf("#2 new animProgress [%f]\n",animProgress);
|
||||
|
||||
if(animProgress > 1.f) {
|
||||
animProgress = 0.f;
|
||||
if(animProgress > 1.f) {
|
||||
animProgress = 0.f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,6 +102,7 @@ public:
|
|||
|
||||
const Vec2i & getMapPos() const { return mapPos; }
|
||||
|
||||
void updateHighlight();
|
||||
void update();
|
||||
float getAnimProgress() const { return animProgress;}
|
||||
|
||||
|
|
|
@ -52,6 +52,8 @@ World::World() {
|
|||
staggeredFactionUpdates = false;
|
||||
unitParticlesEnabled=config.getBool("UnitParticles","true");
|
||||
|
||||
animatedTilesetObjectPosListLoaded = false;
|
||||
|
||||
ExploredCellsLookupItemCache.clear();
|
||||
ExploredCellsLookupItemCacheTimer.clear();
|
||||
ExploredCellsLookupItemCacheTimerCount = 0;
|
||||
|
@ -92,6 +94,8 @@ World::World() {
|
|||
void World::cleanup() {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
animatedTilesetObjectPosListLoaded = false;
|
||||
|
||||
ExploredCellsLookupItemCache.clear();
|
||||
ExploredCellsLookupItemCacheTimer.clear();
|
||||
//FowAlphaCellsLookupItemCache.clear();
|
||||
|
@ -151,6 +155,8 @@ void World::endScenario() {
|
|||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
Logger::getInstance().add(Lang::getInstance().get("LogScreenGameUnLoadingWorld","",true), true);
|
||||
|
||||
animatedTilesetObjectPosListLoaded = false;
|
||||
|
||||
ExploredCellsLookupItemCache.clear();
|
||||
ExploredCellsLookupItemCacheTimer.clear();
|
||||
|
||||
|
@ -168,6 +174,8 @@ void World::end(){
|
|||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
Logger::getInstance().add(Lang::getInstance().get("LogScreenGameUnLoadingWorld","",true), true);
|
||||
|
||||
animatedTilesetObjectPosListLoaded = false;
|
||||
|
||||
ExploredCellsLookupItemCache.clear();
|
||||
ExploredCellsLookupItemCacheTimer.clear();
|
||||
|
||||
|
@ -505,17 +513,55 @@ void World::setQueuedScenario(string scenarioName,bool keepFactions) {
|
|||
}
|
||||
|
||||
void World::updateAllTilesetObjects() {
|
||||
for(int x = 0; x < map.getSurfaceW(); ++x) {
|
||||
for(int y = 0; y < map.getSurfaceH(); ++y) {
|
||||
SurfaceCell *sc = map.getSurfaceCell(x,y);
|
||||
Gui *gui = this->game->getGuiPtr();
|
||||
if(gui != NULL) {
|
||||
Object *selObj = gui->getHighlightedResourceObject();
|
||||
if(selObj != NULL) {
|
||||
selObj->updateHighlight();
|
||||
}
|
||||
}
|
||||
|
||||
if(animatedTilesetObjectPosListLoaded == false) {
|
||||
animatedTilesetObjectPosListLoaded = true;
|
||||
animatedTilesetObjectPosList.clear();
|
||||
|
||||
for(int x = 0; x < map.getSurfaceW(); ++x) {
|
||||
for(int y = 0; y < map.getSurfaceH(); ++y) {
|
||||
SurfaceCell *sc = map.getSurfaceCell(x,y);
|
||||
if(sc != NULL) {
|
||||
Object *obj = sc->getObject();
|
||||
if(obj != NULL && obj->isAnimated() == true) {
|
||||
//obj->update();
|
||||
animatedTilesetObjectPosList.push_back(Vec2i(x,y));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(animatedTilesetObjectPosList.empty() == false) {
|
||||
for(unsigned int i = 0; i < animatedTilesetObjectPosList.size(); ++i) {
|
||||
const Vec2i &pos = animatedTilesetObjectPosList[i];
|
||||
SurfaceCell *sc = map.getSurfaceCell(pos);
|
||||
if(sc != NULL) {
|
||||
Object *obj = sc->getObject();
|
||||
if(obj != NULL) {
|
||||
if(obj != NULL && obj->isAnimated() == true) {
|
||||
obj->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for(int x = 0; x < map.getSurfaceW(); ++x) {
|
||||
// for(int y = 0; y < map.getSurfaceH(); ++y) {
|
||||
// SurfaceCell *sc = map.getSurfaceCell(x,y);
|
||||
// if(sc != NULL) {
|
||||
// Object *obj = sc->getObject();
|
||||
// if(obj != NULL) {
|
||||
// obj->update();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
void World::updateAllFactionUnits() {
|
||||
|
|
|
@ -150,6 +150,9 @@ private:
|
|||
bool originalGameFogOfWar;
|
||||
std::map<int,std::pair<const Unit *,const FogOfWarSkillType *> > mapFogOfWarUnitList;
|
||||
|
||||
bool animatedTilesetObjectPosListLoaded;
|
||||
std::vector<Vec2i> animatedTilesetObjectPosList;
|
||||
|
||||
public:
|
||||
World();
|
||||
~World();
|
||||
|
|
|
@ -213,16 +213,19 @@ public:
|
|||
return x < v.x || (x == v.x && y < v.y);
|
||||
}
|
||||
|
||||
inline float length() const{
|
||||
inline float length(bool requireAccuracy=true) const {
|
||||
#ifdef USE_STREFLOP
|
||||
return static_cast<float>(streflop::sqrt(static_cast<streflop::Simple>(x*x + y*y)));
|
||||
if(requireAccuracy == true) {
|
||||
return static_cast<float>(streflop::sqrt(static_cast<streflop::Simple>(x*x + y*y)));
|
||||
}
|
||||
return static_cast<float>(std::sqrt(static_cast<float>(x*x + y*y)));
|
||||
#else
|
||||
return static_cast<float>(sqrt(static_cast<float>(x*x + y*y)));
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void normalize(){
|
||||
T m= length();
|
||||
inline void normalize(bool requireAccuracy=true){
|
||||
T m= length(requireAccuracy);
|
||||
x/= m;
|
||||
y/= m;
|
||||
}
|
||||
|
@ -444,16 +447,19 @@ public:
|
|||
return Vec3<T>(v-*this).length();
|
||||
}
|
||||
|
||||
inline float length() const{
|
||||
inline float length(bool requireAccuracy=true) const {
|
||||
#ifdef USE_STREFLOP
|
||||
return static_cast<float>(streflop::sqrt(static_cast<streflop::Simple>(x*x + y*y + z*z)));
|
||||
if(requireAccuracy == true) {
|
||||
return static_cast<float>(streflop::sqrt(static_cast<streflop::Simple>(x*x + y*y + z*z)));
|
||||
}
|
||||
return static_cast<float>(std::sqrt(x*x + y*y + z*z));
|
||||
#else
|
||||
return static_cast<float>(sqrt(x*x + y*y + z*z));
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void normalize(){
|
||||
T m= length();
|
||||
inline void normalize(bool requireAccuracy=true){
|
||||
T m= length(requireAccuracy);
|
||||
x/= m;
|
||||
y/= m;
|
||||
z/= m;
|
||||
|
|
|
@ -244,12 +244,13 @@ void ParticleRendererGl::renderModel(GameParticleSystem *ps, ModelRenderer *mr){
|
|||
Vec3f flatDirection= Vec3f(direction.x, 0.f, direction.z);
|
||||
Vec3f rotVector= Vec3f(0.f, 1.f, 0.f).cross(flatDirection);
|
||||
|
||||
#ifdef USE_STREFLOP
|
||||
float angleV= radToDeg(streflop::atan2(static_cast<streflop::Simple>(flatDirection.length()), static_cast<streflop::Simple>(direction.y))) - 90.f;
|
||||
#else
|
||||
float angleV= radToDeg(atan2(flatDirection.length(), direction.y)) - 90.f;
|
||||
#endif
|
||||
//#ifdef USE_STREFLOP
|
||||
// float angleV= radToDeg(streflop::atan2(static_cast<streflop::Simple>(flatDirection.length()), static_cast<streflop::Simple>(direction.y))) - 90.f;
|
||||
//#else
|
||||
// float angleV= radToDeg(atan2(flatDirection.length(), direction.y)) - 90.f;
|
||||
//#endif
|
||||
|
||||
float angleV= radToDeg(std::atan2(flatDirection.length(false), direction.y)) - 90.f;
|
||||
glRotatef(angleV, rotVector.x, rotVector.y, rotVector.z);
|
||||
|
||||
#ifdef USE_STREFLOP
|
||||
|
|
Loading…
Reference in New Issue
Block a user