提示コードのvoid Wait();関数の内部のstd::cout<<関数部の出力が提示画像です。質問ですが参考サイトと同じようにミリ秒を使ってフレームレートを60に固定させたいのですがなぜwaitTime変数の値がマイナスなのでしょうか?提示コードではglfwGetTime();関数は秒数をdouble型で返すのでそれに1000掛けてミリ秒を取得しています。色々表示させてみて値を確認した結果参考サイトは間違えているということはわかったのですがではどうやってフレームレートを60で制御するのでしょうか?
知りたいこと
マイナスの値が返ってくるがこれは正しいのでしょうか?普通15,14といった値が返ってくることを想定しているのですが
確認したこと
変数はすべてコンストラクタ部で0で初期化
参考サイトの移し間違えを確認
参考サイト: https://dixq.net/g/03_14.html
cpp
1 2// ##################################### ミリ秒を取得 ##################################### 3int FrameWork::Window::getNowTime() 4{ 5 return (int)(glfwGetTime() * 1000.0f); 6} 7 8// ##################################### 待機フレームを計算 ##################################### 9void FrameWork::Window::FrameUpdate(glm::vec4 color) 10{ 11 float c = 1.0f / 255.0f; 12 glClearColor(color.x * c, color.y * c, color.z * c, color.w * c); //カラーバッファのクリア色 13 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_ACCUM_BUFFER_BIT); //フレームバッファを初期化 14 15 glEnable(GL_BLEND); //アルファブレンド有効 16 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //ブレンドタイプ 17 18 19 //フレームレートを制御する 20 if (count == 0) 21 { 22 startCount = getNowTime(); 23 } 24 25 if (count == FRAME_RATE) 26 { 27 startCount = getNowTime(); 28 count = 0; 29 } 30 31 //count++; 32 count += 1; 33} 34 35// ##################################### フレームを取得 ##################################### 36int FrameWork::Window::getFrame()const 37{ 38 return count; 39} 40 41// ##################################### フレームレート 待機 ##################################### 42void FrameWork::Window::Wait() 43{ 44 int tookTime = getNowTime() - startCount; 45 int waitTime = count * 1000 / FRAME_RATE - tookTime; 46 47 //std::cout << "waitTime: " << waitTime << std::endl; 48 49 50 std::cout << "tookTime: " << tookTime << std::endl; 51 std::cout << "waitTime: " << waitTime << std::endl; 52 std::cout << "count: " << count << std::endl; 53 std::cout << "getNowTime(): " << getNowTime() << std::endl; 54 std::cout << "((int)(count * 1000) / FRAME_RATE): " << ((int)(count * 1000) / FRAME_RATE) << std::endl; 55 std::cout << std::endl; 56 57 58 59 if (waitTime > 0) 60 { 61 std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); 62 63 } 64} 65
回答2件
あなたの回答
tips
プレビュー